Wettervorhersage mit OpenWeatherMap selbst gebaut

Mit OpenWeatherMap hat man die Möglichkeit umfangreiche Daten herunter zu laden. Die Daten werden nicht von kommerziellen Wetterstationen geliefert, sondern von privaten Nutzern die eine passende Wetterstation besitzen. Es ist somit ein OpenSource Projekt mit offenen Daten.

Für nachfolgendes Projekt benötigten wir einen API-Key , der kann kostenlos hier erstellt werden:
https://home.openweathermap.org/api_keys  aber ACHTUNG der Key benötigt bis 60 Minuten für die Aktivierung. Es kann also in Node-Red passieren dass ein falsche oder unpassender API-Key als Fehler angezeigt wird.

Damit wir meinen Flow fehlerfrei nutzen können benötigen wir noch “OpenWeatherMap” und “node-red-dashboard” als Node. Dazu öffnen wir das Menü auf der rechten Seite und öffnen “Manage palette”. Hierzu öffnet sich auf der linken Seite ein Fenster und dort auf “Install” klicken.

Manage Palette
Manage Palette

Install dashboard
Install dashboard
Install openweathermap
Install openweathermap

 Nun haben wir die Voraussetzungen geschaffen mit “Node-Red” so zu arbeiten dass nichts fehlt und keine Fehlermeldungen kommen. Nun importieren wir den Flow über “Menü -> Import Clipboard”

Import Clipboard Node-Red
Import Clipboard

[{"id":"abfd38ea.ba964","type":"twitter out","z":"99a0c7b1.70593","twitter":"","name":"Tweet","x":1356.61669921875,"y":262.75,"wires":[]},{"id":"50b32e2.76ca25","type":"function","z":"99a0c7b1.70593","name":"Aktuelle Uhrzeit und Datum für Twitter","func":"// (1) wandelt timestamo ins ISO Datumformat um\n//msg.timestamp= new Date().toISOString()\n\n// (2) beliebiges Datum festlegbar: hier: YYYY-MM-DD HH:MM.SS\n//     (Ausgabeformat wird danz am Ende zusammengestellt)\nvar now     = new Date(); \nvar year    = now.getFullYear();\nvar month   = now.getMonth()+1; \nvar day     = now.getDate();\nvar hour    = now.getHours();\nvar minute  = now.getMinutes();\nvar second  = now.getSeconds(); \nif(month.toString().length == 1) {\nvar month = '0'+month;\n}\nif(day.toString().length == 1) {\nvar day = '0'+day;\n}   \nif(hour.toString().length == 1) {\nvar hour = '0'+hour;\n}\nif(minute.toString().length == 1) {\nvar minute = '0'+minute;\n}\nif(second.toString().length == 1) {\nvar second = '0'+second;\n} \n\n\n// Variante1: wenn z.B. nicht ein vorhandener Payload\n// überschrieben werden soll, sondern um ein\n// Datum ergänzt werden soll.  \n\n//msg.timestamp = year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second;\n\n// Variante 2: Function gibt die aktuelle Zeit als payload aus\nnow = day+'-'+month+'-'+year+' '+hour+':'+minute+':'+second;\n\n// JSON Antwort parsen\nvar weather=(msg.payload);\n \n// Neue Nachricht mit Payload erstellen\nvar newMsg = { payload: \"Aktuelles Wetter: \"+weather + \" \\r am \" +now};\n \n// Zurückgeben der Nachricht\nreturn [newMsg];","outputs":1,"noerr":0,"x":1088.13330078125,"y":263,"wires":[["68e02757.ff3ed8","abfd38ea.ba964"]]},{"id":"68e02757.ff3ed8","type":"debug","z":"99a0c7b1.70593","name":"","active":true,"console":"false","complete":"false","x":1347,"y":206.75,"wires":[]},{"id":"98e922b.bab19e","type":"function","z":"99a0c7b1.70593","name":"Lese Wetterdaten ","func":"if (msg.payload.weather === \"Clear\") {\n    msg.payload = \"Heute sonniger Himmel in #München \"\n return [ msg, null, null, null, null ];\n} else if (msg.payload.weather === \"Clouds\") {\n    msg.payload = \"Heute bewölkter Himmel in #München \"\n return [ null, msg, null, null, null ];\n} else if (msg.payload.weather === \"Rain\") {\n    msg.payload = \"Heute Regen in #München \"\n return [null, null, msg, null, null];\n} else if (msg.payload == \"Storm\") {\n return [null, null, null, msg, null];\n} else {\n return [null, null, null, null, msg];\n}\n","outputs":"5","noerr":0,"x":693.1333312988281,"y":281.75,"wires":[["50b32e2.76ca25","4561c385.bdfddc","41aa6c5d.d6fa9c"],["50b32e2.76ca25","4561c385.bdfddc","41aa6c5d.d6fa9c"],["50b32e2.76ca25","4561c385.bdfddc","41aa6c5d.d6fa9c"],[],[]]},{"id":"92dc701d.2e71b","type":"openweathermap","z":"99a0c7b1.70593","name":"OpenWeather","wtype":"current","lon":"11.413586","lat":"48.161115","city":"","country":"","language":"en","x":401.1333312988281,"y":353.75,"wires":[["98e922b.bab19e","b915a80e.9bd9a"]]},{"id":"6fca9a40.9d9efc","type":"inject","z":"99a0c7b1.70593","name":"Bewölkt","topic":"","payload":"{ \"weather\": \"Clouds\", \"detail\": \"few clouds\", \"tempk\": 276.978, \"tempc\": 3.7, \"temp_maxc\": 3.7, \"temp_minc\": 3.7, \"humidity\": 94, \"maxtemp\": 276.978, \"mintemp\": 276.978, \"windspeed\": 3.21, \"winddirection\": 265.503, \"location\": \"Gröbenzell\", \"sunrise\": 1487312199, \"sunset\": 1487349654, \"clouds\": 24, \"description\": \"The weather in Gröbenzell at coordinates: 48.19, 11.38 is Clouds (few clouds).\" }","payloadType":"json","repeat":"","crontab":"","once":false,"x":198,"y":185.75,"wires":[["98e922b.bab19e"]]},{"id":"eeeeca49.b358e","type":"inject","z":"99a0c7b1.70593","name":"Regen","topic":"","payload":"{ \"weather\": \"Rain\", \"detail\": \"few clouds\", \"tempk\": 276.978, \"tempc\": 3.7, \"temp_maxc\": 3.7, \"temp_minc\": 3.7, \"humidity\": 94, \"maxtemp\": 276.978, \"mintemp\": 276.978, \"windspeed\": 3.21, \"winddirection\": 265.503, \"location\": \"Gröbenzell\", \"sunrise\": 1487312199, \"sunset\": 1487349654, \"clouds\": 24, \"description\": \"The weather in Gröbenzell at coordinates: 48.19, 11.38 is Rain (few clouds).\" }","payloadType":"json","repeat":"","crontab":"","once":false,"x":201.13333129882812,"y":224.75,"wires":[["98e922b.bab19e"]]},{"id":"9e19ee83.395b2","type":"inject","z":"99a0c7b1.70593","name":"Sonne","topic":"","payload":"{ \"weather\": \"Clear\", \"detail\": \"few clouds\", \"tempk\": 276.978, \"tempc\": 3.7, \"temp_maxc\": 3.7, \"temp_minc\": 3.7, \"humidity\": 94, \"maxtemp\": 276.978, \"mintemp\": 276.978, \"windspeed\": 3.21, \"winddirection\": 265.503, \"location\": \"Gröbenzell\", \"sunrise\": 1487312199, \"sunset\": 1487349654, \"clouds\": 24, \"description\": \"The weather in Gröbenzell at coordinates: 48.19, 11.38 is Rain (few clouds).\" }","payloadType":"json","repeat":"","crontab":"","once":false,"x":199.13333129882812,"y":271,"wires":[["98e922b.bab19e"]]},{"id":"4561c385.bdfddc","type":"ui_audio","z":"99a0c7b1.70593","name":"Wetter Ansage","group":"941ab841.9f14a8","voice":"6","x":1018.61669921875,"y":194,"wires":[]},{"id":"41aa6c5d.d6fa9c","type":"ui_text","z":"99a0c7b1.70593","group":"941ab841.9f14a8","order":0,"width":0,"height":0,"name":"Wetter heute","label":"","format":"{{msg.payload}}","layout":"row-spread","x":1010.61669921875,"y":331.5,"wires":[]},{"id":"8a687d6f.e5082","type":"inject","z":"99a0c7b1.70593","name":"Hole Wetterdaten","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"0 0-22 * * *","once":false,"x":194,"y":353.75,"wires":[["92dc701d.2e71b"]]},{"id":"b915a80e.9bd9a","type":"debug","z":"99a0c7b1.70593","name":"","active":true,"console":"false","complete":"false","x":673.61669921875,"y":351.25,"wires":[]},{"id":"941ab841.9f14a8","type":"ui_group","z":"","name":"Wetter","tab":"90287ea5.6d429","disp":true,"width":"6"},{"id":"90287ea5.6d429","type":"ui_tab","z":"","name":"München","icon":"dashboard"}]

Wähle nun im Flow “OpenWeather” aus mit einem Doppelklick. Trage nun Deine Koordinaten ein. Mit Hilfe von dieser Webseite findest Du Deine Koordinaten http://www.latlong.net/

Koordinaten
Koordinaten

Damit die Sprachausgabe hörbar ist, muss das “http://<Raspberry-IP>/ui/” geöffnet sein. Klick hierzu auf die Knöpfe “Bewölkt, Regen oder Sonne”, wenn hier eine Ansage im Lautsprecher Deines Computer (auf dem der Browser läuft – nicht RASPBERRY) zu hören, hast Du alles richtig gemacht.

 

Entsprechende Anpassungen für Deinen Standort, kannst Du im Flow selbst einstellen.

 

Twitter Wettervorhersage München
Aktuelle Ausgabe bei Twitter

Viel Spaß beim ausprobieren, basteln, programmieren wünscht , Joachim

 

 

Joachim

Aus Leidenschaft für Technik. Aktuelle Themen sind Datensicherheit, Software für Datenschutz, Mobile Geräte, Smartphone Sicherheit und Anwendungen, Raspberry Pi Geek.

Alle Beiträge ansehen von Joachim →

Ein Gedanke zu “Wettervorhersage mit OpenWeatherMap selbst gebaut

  1. Servus Joachim,

    sehr interessante Sachen, die du hier vorstellst. Wie könnte man in Node-Red die Koordinaten von einem GPS-USB-Empfänger hier eintragen? Ich würde gerne zur aktuellen Position auf einer Urlaubsreise mit z. B. stündlicher Aktualisierung (mit dem Wohnmobil unterwegs) die Wetterdaten anzeigen. Bin noch kompletter Einsteiger und kämpfe mit NR und den ganzen Drum und Dran 🙂

    Gruß
    Robert

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert