NEWS
Wertänderung im Zeitraum überwachen und Aktion ausführen
-
Hallo zusammen,
ich bin auf der Suche nach einer Lösung für mein Vorhaben.
aktuell habe ich Verbindungsabrüche mit meinem WLAN AP.
Zu Testzwecken probiere ich nun dieses Workaround. Ich pinge über den Adapter "ping" meinen Router über meinen WLAN AP an.
Wenn diese Verbindung abbricht möchte ich gerne meinen WLAN AP über den TR-064 neustarten. Dieses soll aber nur durchgeführt werden wenn der Ping über den Zeitraum von 5 min auf false steht. Kommt der Ping innerhalb der Zeit wieder zurück, ist kein Reboot notwendig.
Einzige Idee die ich hatte war über setTimeout zu gehen, allerdings wird dieser immer ausgeführt, auch wenn sich der Wert im Zeitraum wieder ändert.
Zur Vereinfachung mein Testscript:
var test = "hm-rega.0.6370"/*Testschalter*/; on(test, function (obj) { current_state = getState(state).val; if (current_state == "1") { log ('Wert = true' ); setTimeout(function() { log ('Timeout ausgeführt'); }, 10000); } else if (current_state == "0") { log ("Werte = false"); } });
Kann mir jemand einen Tipp geben, wie es funktionieren könnte?
Mfg
-
badewannenprinzip
-
Versuche es mal so:
var test = "hm-rega.0.6370"/*Testschalter*/; var timer = null; on(test, function (obj) { if (obj.state.val == "1") { log ('Wert = true' ); timer = setTimeout(function() { log ('Timeout ausgeführt'); }, 10000); } else { log ("Wert = false"); if (timer) clearTimeout(timer); } });
Liefert die SV "Testschalter" wirklich eine Zeichenkette mit den Inhalten "0" und "1" ?
-
Liefert die SV "Testschalter" wirklich eine Zeichenkette mit den Inhalten "0" und "1" ? `
Nein, Werte sind true und false.
Woran kann erkennen um was es sich handelt und was liefert der ping-adapter?
mfg
-
-
if (obj.state.val) { ```` `
Das bedeutet also beim Typ boolean wird es immer ausgeführt wenn der Wert auf true geht?
Wie müsste es dann aussehen wenn es nur bei false starten soll?
Und warum funktioniert es dann trotzdem mit der alten Variante?
if (obj.state.val == "1") {
-
-
Keine Ahnung :? Ist es wirklich so ? `
laut meinem Versuch und dem Log dazu schon.
!
Ich werde jetzt
if (obj.state.val === true) {
verwenden, lässt sich leichter merken und ist auch nachhaltig leicht herbeizuführen. Kann dann auch leicht auf false umstellen, ohne nachlesen zu müssen.
Auf jeden Fall passt das Script soweit und funktioniert so wie es soll.
Danke + Mfg
-
Und warum funktioniert es dann trotzdem mit der alten Variante? `
Javascript nimmt eine implizite Typwandlung vor:"0" bzw. 0 –> false
"1" bzw. 1 --> true
Bei der Verwendung von === muss der Typ dagegen übereinstimmen.
-
OK, danke für die Erklärung. Dann verwende ich jetzt true, dann ist es auch gleich dem state.