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.
openWeatherMap-API-Key registrieren
openWeatherMap-Node installieren
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.
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":[]}]
Weiterführende Informationen
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. 🙂
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!
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
Funktioniert Perfekt 🙂
Super schneller Support! Danke
Super! Gerne. 🙂 Viel Erfolg!
Beste Grüße
Fabian
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
Hi Michael,
ich glaube das was du suchst habe ich in diesem Beitrag (für einen etwas anderen Zweck) genutzt: https://nerdiy.de/howto-nodered-pushbullet-benachrichtigung-bei-ssh-login/
Wenn du den Code importierst und dir dann die function node anguckst kannst du sehen wie die neue payload zusammengebaut wird.
Ich hoffe das hilft dir, ansonsten gib mir gerne nochmal bescheid. 🙂
Beste Grüße
Fab
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
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
Top, ja das ist genau so, funktioniert bestens!
Dank Dir Fabian
Super, freut mich, dass es geklappt hat. 🙂