I concur 
I cant help with the weather part but the sunrise / sunset times are fairly easy.
Obviously I dont know how you intend to trigger the flow (6am alarm? a PIR sensor? a button on your wall???) but in the below example I use a CRON node to fire at 6am Monday ~ Friday.
So considerations you need to make are - what if the sun is already up when the flow is triggered (i.e. mid-summer sunrise is at before 5am where I am) so if you look at the function i wrote, i get it to say "... the sun is already up and it sets at xx yy")
The cron node is immensely configurable (read the built in help) you can use times, CRON schedules, solar events etc etc. You can also automate it (i.e. set it from input mesages like the dashboard).
So here is the flow I knocked up to do the message you requested (I will let you replace the fake weather part)...
[{"id":"ba53ccac.28a1d","type":"cast-to-client","z":"21106466.70e60c","name":"","url":"","contentType":"","message":"","language":"en","ip":"192.168.1.19","port":"8009","volume":"100","x":1690,"y":220,"wires":[[]]},{"id":"8f1e45ea.c35958","type":"cronplus","z":"21106466.70e60c","name":"describer","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[],"x":1540,"y":160,"wires":[["e0041b7e.81f008","70ef167f.cbc798"]]},{"id":"488a6eb1.f1ef8","type":"debug","z":"21106466.70e60c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","x":1650,"y":280,"wires":[]},{"id":"e0041b7e.81f008","type":"function","z":"21106466.70e60c","name":"generate message to cast","func":"var now = new Date();\nvar sunriseTime;\nvar sunsetTime;\n\n//find the sunset & sunrise items\nvar sunrise = msg.payload.result.eventTimes.find(e => e.event == \"sunrise\")\nvar sunset = msg.payload.result.eventTimes.find(e => e.event == \"sunset\")\n\n//first, ensure sunrise comes before sunset\nif(sunrise) sunriseTime = sunrise.time;\nif(sunset) sunsetTime = sunset.time;\nif(sunriseTime && sunsetTime && sunriseTime > sunsetTime ) {\n //sunriseTime is before sunsetTime, delete it!\n sunriseTime = null;\n}\n\nvar sunInfo = \"\";\n\nif(sunriseTime && sunriseTime > now) {\n let hh = sunriseTime.getHours();\n let mm = sunriseTime.getMinutes();\n sunInfo = \"The sun will rise at \" + hh + \" \" + mm;\n} else {\n sunInfo = \"The sun is already up\";\n}\n\nif(sunsetTime && sunsetTime > now) {\n let hh = sunsetTime.getHours();\n let mm = sunsetTime.getMinutes();\n if(sunInfo) {\n sunInfo += \" and\";\n } else {\n sunInfo += \"The sun\";\n }\n sunInfo += \" will set at \" + hh + \" \" + mm;\n}\n\n//build the message to cast\nvar weather = flow.get(\"weather\");\nvar message = weather ? weather : \"\";\nmessage += message ? \" \" + sunInfo : sunInfo;\n\nmsg.payload = {\n message: message\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":1370,"y":220,"wires":[["488a6eb1.f1ef8","ba53ccac.28a1d"]]},{"id":"ee767009.e8076","type":"change","z":"21106466.70e60c","name":"Describe solar events","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"command\":\"describe\",\"expressionType\":\"solar\",\"solarType\":\"selected\",\"solarEvents\":\"sunrise,sunset\",\"location\":\"54.998989574504265 -1.417386531829834\"}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":1360,"y":160,"wires":[["8f1e45ea.c35958"]]},{"id":"111511e0.66ff8e","type":"change","z":"21106466.70e60c","name":"Get weather info (faked)","rules":[{"t":"set","p":"weather","pt":"flow","to":"Today, rain is expected.","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1490,"y":100,"wires":[["ee767009.e8076","436d39b2.8ac038"]]},{"id":"9f77c2a8.c9ac5","type":"cronplus","z":"21106466.70e60c","name":"6am","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"morning_alert","topic":"morning_alert","payloadType":"default","payload":"","expressionType":"cron","expression":"0 0 6 * * mon-fri","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":1310,"y":100,"wires":[["111511e0.66ff8e"]]},{"id":"436d39b2.8ac038","type":"debug","z":"21106466.70e60c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1730,"y":100,"wires":[]},{"id":"70ef167f.cbc798","type":"debug","z":"21106466.70e60c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1730,"y":160,"wires":[]}]