NEWS
[gelöst] Verzögerung funktioniert nicht richtig
-
@Manuel001 sagte:
Es ist ja nicht das Problem, dass der Timer neu oder zusätzlich gestartet wird, sondern nicht gestoppt wird.
Gestoppt wird nur bei Werten >= 10. Bei Werten unter 10 (z.B. 9, 8, 7) wird bei jedem Trigger ein neuer Timer gestartet. Es kann aber nur 1 Timer gestoppt werden, die anderen laufen weiter.
-
@paul53 Es wird also praktisch mein Timer "timeout4" nicht neu gestartet sondern weitere Timer unter dem gleichen Namen? Gibt es da keine elegantere Möglichkeit, dass man nur einen Timer hat den man dann entweder startet, stoppt oder neustartet?
-
@Manuel001 sagte:
weitere Timer unter dem gleichen Namen?
Ja.
@Manuel001 sagte in Verzögerung funktioniert nicht richtig:
Gibt es da keine elegantere Möglichkeit,
Man kann mit jedem Trigger den Timer stoppen, was aber dazu führen kann, dass die Zeit nie abläuft, wenn innerhalb der Verzögerungszeit immer wieder getriggert wird.
Variante mit der Timer-Variablen als Sperr-Variable:
Hinweis: Erst eine Dummy-Variable erstellen und diese zuweisen. Anschließend in die Javascript-Ansicht und wieder zurück wechseln. Nun die Timer-Variable selektieren.
-
@paul53 Danke für die Unterstützung. Soweit verstehe ich es jetzt. Aber noch für Dummys: Variable habe ich erstellt, aber wie zuweisen?
-
@Manuel001 sagte:
Variable habe ich erstellt, aber wie zuweisen?
Nach Wechsel in JS-Ansicht und zurück:
-
@paul53 Danke.
Das müsste doch jetzt so funktionieren?:
Aber irgendwie geht das noch immer nicht. -
@Manuel001 sagte:
Das müsste doch jetzt so funktionieren?:
Ja, sollte: Nach 3 Minuten >= 400 schalten auf true und nach 3 Minuten < 10 schalten auf false.
Poste mal den erzeugten Javascript-Code ohne die letzte Zeile in Code tags. -
code_text var timeout3, timeout_Ladegeraet_ein, timeout4, timeout_Ladegeraet_aus; on({id: 'modbus.1.holdingRegisters.1002_Überschuss', change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("modbus.1.holdingRegisters.1002_Überschuss").val < 400) { (function () {if (timeout_Ladegeraet_ein) {clearTimeout(timeout_Ladegeraet_ein); timeout_Ladegeraet_ein = null;}})(); } else if (!timeout_Ladegeraet_ein) { timeout_Ladegeraet_ein = setTimeout(function () { setState("rpi2.1.gpio.24.state"/*GPIO 24*/, true); }, 60000); } if (getState("modbus.1.holdingRegisters.1002_Überschuss").val >= 10) { (function () {if (timeout_Ladegeraet_aus) {clearTimeout(timeout_Ladegeraet_aus); timeout_Ladegeraet_aus = null;}})(); } else if (!timeout_Ladegeraet_aus) { timeout_Ladegeraet_aus = setTimeout(function () { setState("rpi2.1.gpio.24.state"/*GPIO 24*/, false); }, 60000); } });
-
@Manuel001
Ist das der vollständige Code ? Es sind die Variablen timeout3 und timeout4 deklariert, die nirgends verwendet werden ? -
@paul53
Ja ist der vollständige code. timeout3 und 4 waren nur in einem deaktiviertem Block in Verwendung. Ich habe jetzt diesen Block gelöscht. Dann sind diese Variablen verschwunden und jetzt funktioniert es. Danke!
Darf das sein, dass ein deaktivierter Block diese Auswirkung hat?