NEWS
Aktion bei DWD-Warnung: irgendwas ist falsch
-
Hallo zusammen,
ich greife die Wetterwarnungen des DWD ab. Gibt es eine Warnung für Unwetter (type=0) oder Sturm (type=1) und diese "schlimm" genug (level mind. 3), soll ein Bewässerungsstrang für 10 Minuten laufen.
Das klappt an sich auch, allerdings wird das auch gestartet, wenn wie eben eine Warnung für Hitze (type=8) reinkommt - da soll das natürlich nicht laufen.
Das Skript schaut so aus:
Die Warnung laut Debug-Mail:
Warnstart0 durchgeführt, VT_Heute_Warnstart ist true; Type=8; Level =50; Warnung: Am Samstag wird eine starke Wärmebelastung erwartet. Samstag ist mit einer zusätzlichen Belastung aufgrund verringerter nächtlicher Abkühlung insbesondere im dicht bebauten Stadtgebiet von Fürth zu rechnen.VT_Heute_Warnstart ist eine Variable, die sicherstellt, dass es maximal ein Mal am Tag läuft - das klappt soweit.
Wenn ich mir den Wert von Warning type ausgeben lasse, ist dieser aktuell 8 und mit einem kleinen Logik-Test auch nicht <=1 - warum wird es trotzdem gemacht?
Definition des Typ-Werts:
"_id": "dwd.0.warning.type", "type": "state", "common": { "name": "Warning type", "type": "number", "role": "weather.type", "read": true, "write": false, "states": { "0": "Thunderstorm", "1": "Wind/Storm", "2": "Rain", "3": "Snow", "4": "Fog", "5": "Frost", "6": "Ice", "7": "Thawing", "8": "Heat", "9": "UV warning" },
MOD-EDIT: Code in code-tags gesetzt!
Soll ich den Text abfragen statt die Zahl? Ich traue mich nicht recht, da laut Debug eben die Zahl zurückgegeben wird...
Viele Grüße
Bender275 -
@bender275 sagte in Aktion bei DWD-Warnung: irgendwas ist falsch:
das klappt soweit.
die Variable wird bei Skripstart nich befüllt und dürfte somit undefined sein.
@bender275 sagte in Aktion bei DWD-Warnung: irgendwas ist falsch:
Soll ich den Text abfragen statt die Zahl
nein! das ist eine Werteliste
was weiss denn das Skript über die Level und Typ?
hast du da nal die Werte per debug ausgegeben? -
@homoran sagte in Aktion bei DWD-Warnung: irgendwas ist falsch:
die Variable wird bei Skripstart nich befüllt und dürfte somit undefined sein.
Doch, die ist befüllt, der Block war nur außerhalb des Screenshots - jetz mit komplettem Bild.@bender275 sagte in Aktion bei DWD-Warnung: irgendwas ist falsch:
Soll ich den Text abfragen statt die Zahl
nein! das ist eine Werteliste
was weiss denn das Skript über die Level und Typ?
hast du da nal die Werte per debug ausgegeben?Die Werte sind der Text in der Mail.
Kurzer Test des Typs mit einem anderen Skript:
-
Das Level wird richtig erkannt und verarbeitet.
Nur warum ist 8 in einem Skript kleiner 1 und im anderen nicht?
-
Da muß ein ClearTimeout und Timeout (100ms) nach dem Falls Objekt rein.
- ist es undefiniert ob der Wert des Datenpunktes sich schon geändert hat wenn diese Funktion aufgerufen wird
- hat sich definitiv beim ersten Aufruf, der andere Datenpunkt noch nicht geändert.
Benutze den schon ewig nicht mehr, aber der hat doch einen Datenpunkt für das Json, Trigger auf den und warte dann ein paar ms.
-
@ticaki
Okay, ja, der level-Wert ist früher geändert als der Type-Wert.
Habe jetzt ganz vorne eine Pause rein, mal schauen, ob das klappt.
Danke für den Hinweis!Ich habe aber auch schon versucht, den Type auf 0 oder 1 abzufragen - trotzdem lief die Bewässerung los, obwohl der Wert ja dann undefined oder NULL wäre.
-
@bender275
hab mich missverständlich ausgedrückt:undefiniert ist ob sich type schon von 0 auf 8 geändert hat, hat er nicht, ist es kleiner als 1ah nachgeguckt, der ist ja null im nicht warn modus
Noch mehr edit, ist das Problem:
if (null < 1)log('bla') javascript.0 (1489) script.js.Test.Skript_2: bla
-
@bender275 sagte: Habe jetzt ganz vorne eine Pause rein, mal schauen, ob das klappt.
Das klappt nicht, denn eine Pause verzögert nur.
Der Timeout muss mit dem zweiten Trigger gestoppt und neu gestartet werden.@ticaki sagte in Aktion bei DWD-Warnung: irgendwas ist falsch:
der ist ja null im nicht warn modus
Es muss also zusätzlich auf
!= null
geprüft werden. -
@paul53 Danke, ist angepasst:
Mal schauen, am Samstag Nacht soll es bei uns gewittern... -
Um sicher zu sein mußt du noch prüfen ob der Wert nicht den gleichen Typ hat.
in Javascript wäre das ein
val !== null
aber das scheints im Blockly nicht zu gebenIm Bild wäre ein durchgestrichtes = sinnvoller gewesen hab typ number nicht gefunden
-
@ticaki sagte: mußt du noch prüfen ob der Wert nicht den gleichen Typ hat.
Die Prüfung auf 0 oder 1 ist ausreichend. Siehe hier
-
@paul53
stimmt, Danke