AT - ZAMG Wetterwarnungen - V2
Update V2 Es wurde ein Fehler behoben bei dem sich mehrer Meldungen des gleichen Typs überschreiben konnten und damit Warnungen verloren gingen.
Hier der gefixte Flow:
Hier wird beschrieben wie das Abfragen und Senden von Wetterwarnungen der ZAMG (Österreich) an den Miniserver funktioniert.
Disclaimer
Das ganze funktioniert nur solange die ZAMG ihren API Call getWarningsForCoords nicht umstellt!
Basics
Hier https://warnungen.zamg.at/wsapp/de/alle/heute/19177,257711,783484,534322 ist die Startseite der ZAMG für die Wetterwarnungen
Über die Ortssuche dann den eigene Ort suchen, das ist z.B. der Link für Graz https://warnungen.zamg.at/wsapp/de/alle/heute/536171,346009,583941,363297/15.443568,47.071078
Dann Alle Warnungen auswählen, das liefert diesen Link, https://warnungen.zamg.at/wsapp/de/alle/naechsten24stunden/536171,346009,583941,363297/15.443568,47.071078 den brauchen wir - und auch nicht, siehe später!
Da sind jetzt die Warnungen und Uhrzeiten aufgelistet, die wir brauchen und uns herausholen mit Node Red
Wo sind die interessanten Daten?
Hier eine Regenwarnung
Umsetzung in Node Red
Das oben gefunden nutzt nicht wirklich was, weil die ganzen Daten über Java Script geladen werden!
Über den Network Tab im Chrome Browser kann man aber sehen welche Calls zum Server gemacht werden und den Link der die Daten beschafft herausfinden.
WICHTIG: Ihr müsst die folgende 2. URL mit euren eigenen Geo Koordinaten in Node Red verwenden!
Entweder im Chrom über den Network Tab aufrufen - nach getWarningsForCoords suchen und Link in neuer Seite öffnen und Link kopieren
oder die Geo Koordinaten aus eurer eigene Browser URL kopieren - es sind die letzten beiden Werte aus dem Browser Link
Der Browser Link, NICHT verwenden in Node Red
Der RICHTIGE API Link, diesen verwenden in Node Red
Also, ihr müsst euer Koordinaten mit dem API Call verwenden, das sind die blau markierten Zahlen!
Dieser API Call ist perfekt, weil der liefert uns einen JSON String zurück mit dem wir gleich weiterarbeiten können!
Hier ein Beispiel zamgwetterdaten.json
Bedeutung der Daten
Da ich bisher keine Doku gefunden habe für warntypid und warnstufeid werden diese ignoriert und ich suche im Text einfach nach Regen, Gewitter, Sturm, Nebel, Hitze um eine Warnung zu generieren. Natürlich wird das Datum und die Uhrzeit berücksichtigt beim erzeugen der Warnung für den Miniserver.
Beispiel für Daten
Es können also mehrer Warnungen gleichen Typs in einer Nachricht vorkommen, das ist im Flow zu beachten.
Der Flow
Da die Wetterwarnungen ja immer nur vorhanden sind, wenn es welche gibt, wir in Loxone aber wissen wollen Wetterwarnung ja bzw. nein, ist der Flow in zwei Zweige aufgeteilt, um diese Information zu generieren. Wie man Informationen in einem Flow speichert ist hier erklärt: https://nodered.org/docs/user-guide/context
(Wichtig für V1 User: der cheerio Node ist nicht mehr erforderlich, wir bekommen ja direkt JSON Daten)
Der Flow-Zweig zum Werte holen
der Timestamp fragt alle 20 Minuten die aktuellen Werte ab (verwendet bitte keine kleineren Werte um die ZAMG nicht sauer zu machen!)
alle Warnungen werden zurückgesetzt und
die Daten werden abgefragt, ausgewertet und die gerade aktuellen Warnungen aktualisiert/gesetzt
Der Loxone Zweig
mit 5 Sekunden Verzögerung - damit sicher alles berechnet ist - werden die aktualisierten Daten über UDP an Loxone geliefert
Was muss ich im Flow alles anpassen?
auf jeden Fall die URL im Node API Call Unwetterabfrage - hier wie oben beschrieben den API Call mit euren Geo Koordinaten eintragen.
IP Adresse und den Port im Node Miniserver UDP - hier verwende ich den Port 7771 - muss mit dem UDP Port, den du in der Config vergibst, übereinstimmen!
Und hier der Flow zum Download
Config für Miniserver
Die Daten werden mit UDP an den Minserver gesendet, hier ein Beispiel, die Hitzewarnung ist gerade aktiv:
Befehlserkennung der virtuellen UDP Eingänge
Wichtig: die UDP Eingänge NICHT als Digitaleingeng verwenden!
Die Einheit sollte überall mit <v> angegeben werden, es wird 0 oder 1 geliefert
So sieht der String aus, der über UDP an den Miniservere gesendet wird: "Gewitter:0 AkutGewitter:0 Hagel:0 Hitze:0 Sturm:0 Regen:0 Wind:0 Nebel:0"
Ist aktuell eine Warnung aktiv, so steht statt einer 0 eine 1 als Wert.
Und das ist die jeweilige Befehlserkennung im Miniserver für die Werte:
\iHitze:\i\v
\iGewitter:\i\v
\iAkutGewitter:\i\v
\iSturm:\i\v
\iHagel:\i\v
\iRegen:\i\v
\iWind:\i\v
\iRegen:\i\v
\iNebel:\i\v
Diskussionen & Anfragen
bitte NUR hier führen: https://www.loxforum.com/forum/faqs-tutorials-howto-s/262281-wetterwarnungen-der-zamg-für-ganz-österreich-in-loxone-einbinden#post262281