HowTo: Node Red – Aktuelle Wetterdaten von OpenWeatherMap beziehen

Nicht immer hat man die Möglichkeit Umgebungsdaten wie zum Beispiel die Außentemperatur direkt zu messen. Trotzdem ist manchmal praktisch. So kann man zum  Beispiel sicherstellen, dass die Heizkörper im inneren nur eingeschaltet werden, wenn es draußen auch kalt ist. Heizungen die sich im Sommer automatisch einschalten kosten nicht nur Geld sondern auch Schweiß. 🙂

Um an diese Umgebungsdaten zu kommen bräuchte man eigentlich eine eigene Wetterstation, welche das SmartHome mit den entsprechenden Daten füttert.
Dieses Geld kann man sich allerdings sparen. Dank kostenlosen Wetterservices von denen man diese Daten nur noch beziehen muss. Einer dieser Wetterservices ist OpenWeatherMap.org.

Wie Ihr Wetterdaten von OpenWeatherMap.org bezieht und für Euer SmartHome nutzen könnt, ist im folgenden Artikel erklärt.


Sicherheitshinweise

Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/

Affiliatelinks/Werbelinks

Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂 


Voraussetzungen

Hilfreiche Artikel:
Damit Ihr diese Konfiguration übernehmen  könnt sollte NodeRed natürlich schon installiert sein.
Wie ihr einen RaspberryPi dazu vorbereitet und dann NodeRed darauf installiert ist in den folgenden Artikeln beschrieben.

Die folgenden Artikel beschreiben was zu tun ist um den RaspberryPi soweit vorzubereiten:
RaspberryPi – Einrichten für Nerdiys!
RaspberryPi – Die Erste Konfiguration!
RaspberryPi – Den RaspberryPi über SSH steuern
NodeRed – Installation von NodeRed auf dem RaspberryPi
NodeRed – Neue Nodes installieren

NodeRed – Node-Code importieren und exportieren

Benötigtes Werkzeug:
-keins-

Benötigtes Material:

In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.


In die NodeRed Konfigurationsoberfläche einloggen

Bevor Ihr eure NodeRed Konfiguration bearbeiten könnt müsst Ihr Euch - falls aktiviert - zunächst in die NodeRed Konfigurationsoberfläche einloggen.

Ansicht des Login Dialogs. Hier müsst Ihr die Login Daten eingeben die Ihr während der Konfiguration des Logins angegeben habt. Infos dazu findet Ihr im Artikel NodeRed - Benutzerlogin einrichten.

openWeatherMap-API-Key registrieren

Damit Ihr aktuelle Wetterdaten von openWeahterMap.org abrufen könnt, benötigt Ihr einen API-Key. Wie Ihr diesen kostenlos registrieren könnt ist in diesem Artikel beschrieben: OpenWeatherMap.org API-Key registrieren
Später muss dieser dann in der openWeatherMap-Node hinterlegt werden. Also merkt ihn Euch gut. 🙂

openWeatherMap-Node installieren

Damit Ihr die Daten von OpenWeatherMap.Org abrufen könnt, müsst Ihr die Node „node-red-node-openweathermap“ installieren. Wie das man Nodes installiert ist im Artikel NodeRed – Neue Nodes installieren erklärt.

Node-Code importieren

Bei den ersten Schritten sollte euch die folgende Konfiguration unterstützen. Importiert dazu einfach folgenden Node-Code in Euere NodeRed-installation. Wie das geht ist im Artikel NodeRed – Node-Code importieren und exportieren erklärt.

Gleich darauf müsst Ihr – wie weiter unten beschrieben – den zuvor registrierten API-Key zur Konfiguration hinzufügen.

Ansicht der Konfiguration im Editor.

Node-Code:

[{"id":"85dcceee.5ca84","type":"change","z":"5ebf035f.49459c","name":"außenTemperatur","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.main.temp-273.15","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":200,"wires":[["6ab6bc17.16a144"]]},{"id":"b36beeac.014ba","type":"json","z":"5ebf035f.49459c","name":"","property":"payload","action":"","pretty":false,"x":510,"y":200,"wires":[["85dcceee.5ca84","a0fb594.6e02ea8","7aa148d5.934fb8","8e550228.aae02","52536e82.1cb05","b22dec0e.d53f3","bcdf0d32.be17a","95d0a7a8.66b9e8","514584f.458327c"]]},{"id":"34eee9ed.b64d36","type":"inject","z":"5ebf035f.49459c","name":"Daten manuell abrufen","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":260,"wires":[["d5a8c5aa.82b3c8"]]},{"id":"a0fb594.6e02ea8","type":"change","z":"5ebf035f.49459c","name":"außenLuftfeuchtigkeit","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.main.humidity","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":320,"wires":[["b9f93625.5051b8"]]},{"id":"7aa148d5.934fb8","type":"change","z":"5ebf035f.49459c","name":"außenLuftdruck","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.main.pressure","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":360,"wires":[["fbf0a415.6ed9c8"]]},{"id":"d5a8c5aa.82b3c8","type":"openweathermap","z":"5ebf035f.49459c","name":"","wtype":"current","lon":"","lat":"","city":"Bochum","country":"Germany","language":"de","x":410,"y":260,"wires":[["b36beeac.014ba"]]},{"id":"67bf25e3.d1ce1c","type":"openweathermap in","z":"5ebf035f.49459c","name":"","wtype":"current","lon":"","lat":"","city":"Bochum","country":"Germany","language":"de","x":160,"y":200,"wires":[["b36beeac.014ba"]]},{"id":"8e550228.aae02","type":"debug","z":"5ebf035f.49459c","name":"Rohdaten","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":680,"y":160,"wires":[]},{"id":"6ab6bc17.16a144","type":"debug","z":"5ebf035f.49459c","name":"außenTemperatur","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":990,"y":200,"wires":[]},{"id":"b9f93625.5051b8","type":"debug","z":"5ebf035f.49459c","name":"außenLuftfeuchtigkeit","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1000,"y":320,"wires":[]},{"id":"fbf0a415.6ed9c8","type":"debug","z":"5ebf035f.49459c","name":"außenLuftdruck","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":980,"y":360,"wires":[]},{"id":"52536e82.1cb05","type":"change","z":"5ebf035f.49459c","name":"Windstärke","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.wind.speed","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":400,"wires":[["93256619.92a1b8"]]},{"id":"b22dec0e.d53f3","type":"change","z":"5ebf035f.49459c","name":"Windrichtung","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.wind.deg","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":440,"wires":[["d755f34d.fdefa"]]},{"id":"93256619.92a1b8","type":"debug","z":"5ebf035f.49459c","name":"Windstärke","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":970,"y":400,"wires":[]},{"id":"d755f34d.fdefa","type":"debug","z":"5ebf035f.49459c","name":"Windrichtung","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":970,"y":440,"wires":[]},{"id":"bcdf0d32.be17a","type":"change","z":"5ebf035f.49459c","name":"wetterBeschreibung","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.weather[0].description","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":720,"y":480,"wires":[["a9876b9d.5e5be8"]]},{"id":"a9876b9d.5e5be8","type":"debug","z":"5ebf035f.49459c","name":"wetterBeschreibung","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":1000,"y":480,"wires":[]},{"id":"95d0a7a8.66b9e8","type":"change","z":"5ebf035f.49459c","name":"außenTempMin","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.main.temp_min-273.15","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":240,"wires":[["751ba810.fd1938"]]},{"id":"514584f.458327c","type":"change","z":"5ebf035f.49459c","name":"außenTempMax","rules":[{"t":"set","p":"payload","pt":"msg","to":"data.main.temp_max-273.15","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":280,"wires":[["455148a8.ce5168"]]},{"id":"751ba810.fd1938","type":"debug","z":"5ebf035f.49459c","name":"außenTempMin","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":980,"y":240,"wires":[]},{"id":"455148a8.ce5168","type":"debug","z":"5ebf035f.49459c","name":"außenTempMax","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":980,"y":280,"wires":[]}]
In den OpenWeatherMap-Nodes muss Eurer OpenWeatherMap-API-Key eingetragen werden, damit der Datenabruf funktioniert.

Weiterführende Informationen

https://openweathermap.org/


Viel Spaß mit dem Projekt

Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂

P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂

Buy Me a Coffee at ko-fi.com       

11 Kommentare

  1. HI,
    Coole sache, danke für deine Tutorials 🙂

    Ich habe ein Problem.
    Wenn ich die Temperaturen als Text ausgebe, erhalte ich zu viele Kommastellen dahinter….
    Wie kann ich das Runden?

    Vielen Dank!

    1. Hey Adrian,
      danke. 🙂
      ich mache sowas immer mit einer function Node und etwas JavaScript. (Gibt bestimmt auch noch andere potentiell bessere Wege).
      Ich habe Dir ein Beispiel hier hochgeladen: https://pastebin.com/UesZyP2N
      Den Code solltest du einfach importieren können. Ist hoffentlich selbsterklärend. Ansonsten frag gerne nochmal. 🙂
      Beste Grüße
      Fabian

  2. Hi all

    Der Beitrag isch schon etwas älter, aber er hat mir dich sehr geholfen, vielen Dank!
    Ich baue mir gerade Rhasspy auf einem OrangePi auf, die Sprachausgabe der Wetterdaten
    nehmen dank dem Node-Code Formen an:). Mein Problem ist, dass ich die einzelnen
    Abfragen nicht in eine Ausgabe zusammenfassen kann, ich muss da ja noch statischen Text
    anfügen, wie „Das aktuelle Wetter in…“ oder „Der Wind bläs aus Richtung..“ und dann als msg.payload an den Server weiterleiten. Für einen Tip wär ich sehr offen, danke.

    Gruss Michael

  3. Ja genau Fab, der war goldrichtig der Tip, funzt sehr gut, vielen Dank.
    Nun möchte ich noch die „data.main.temp-273.15“ abrunden, bei mir ist das die msg.payload2, habe dazu deinen Tip von weiter oben gesichtet „parseFloat(msg.payload).toFixed(2)“.
    Kannst du mir kurz helfen wo das hin muss oder gibt es einen anderen Weg?
    Gruss Michael

    1. Hi Michael,
      du kannst das im Prinzip in die gleiche function node packen. Zum Beispiel so:
      var value=parseFloat(msg.payload2).toFixed(2)
      msg.payload „Hier steht der Satz den du Ausgeben willst mit dem gerundeten Wert: „+String(value);

      Hoffe das klappt so.
      Beste Grüße
      Fabian

  4. Hi Michael.
    I have used your Openweather in Node-red to show current weather in a given city, but I want dynamic input of lat/long so I can show the weather here and now, but I don’t find input for lat/long in Openweather.
    I’ve searched „all over“ the internet, but haven’t found anything I can use.
    Am I using a wrong version of Openweather?
    I have a GPS receiver that gives mif lat/long in Node-red.
    And thanks for all your Node-red information.

Kommentar hinterlassen

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.