NEWS
[gelöst] Schalten verzögert und mit bestimmter Dauer
-
Hallo Gemeinde,
ich stehe gerade etwas auf dem Schlauch.Ich möchte ein Sirene mit einer definierten Verzögerung einschalten,
sie soll dann für x Sekunden laufen und wieder abschalten.
Beide Werte kommen aus Datenpunkten.Ich mache folgendes:
// Sirene innen auslösen -------------------------------------------------------------------------------------------------- on({id: "javascript.0.alarmgeber.innensirene", change: "ne"}, function (obj) { if (obj.state.val === true) { setStateDelayed("sonoff.0.alarmswitch.POWER1", true, getState("javascript.0.alarmgeber.alarmInnerSirenDelay").val*1000); timeoutis = setTimeout(function () { setState("sonoff.0.alarmswitch.POWER1", false); setState("javascript.0.alarmgeber.innensirene", false); }, getState("javascript.0.alarmgeber.alarmInnerSirenDuration").val*1000); } });
Das führt dazu, das die Sirene mit Verzögerung einschaltet, aber nicht mehr ausschaltet.
Kann mir da einer einen kleinen Schubs geben.Vielen Dank
Christian -
@stimezo der Denkfehler ist die Annahme, dass die Zeilen des Scripts der Reihe nach abgearbeitet würden und die Zeilen ab 5 auf das Ende von setStateDelayed warten würden
-
Danke, hast Du eine Alternative?
-
@stimezo Du kannst direkt beide setStateDelayed für "true" und "false" absetzen und berechnest die Dauer bis zum Ausschalten einfach durch Addition der beiden Intervalle
-
@ahnungsbefreit
Danke, das Probiere ich. -
Das Funktioniert leider nicht:
// Sirene innen auslösen -------------------------------------------------------------------------------------------------- on({id: "javascript.0.alarmgeber.innensirene", change: "ne"}, function (obj) { if (obj.state.val === true) { var schaltsumme = getState("javascript.0.alarmgeber.alarmInnerSirenDelay").val + getState("javascript.0.alarmgeber.alarmInnerSirenDuration").val; log (schaltsumme) setStateDelayed("zwave.0.NODE12.SWITCH_BINARY.Instance_2:_Switch_2", true, getState("javascript.0.alarmgeber.alarmInnerSirenDelay").val*1000); setStateDelayed("zwave.0.NODE12.SWITCH_BINARY.Instance_2:_Switch_2", false, schaltsumme * 1000); } });
Da schaltet er nicht ein.
Wenn ich die Verzögerung auf 0 setze schaltet er. -
@stimezo SirenDuration und SirenDelay haben den richtigen Typ und kein "max" gesetzt? Debug doch mal die Werte * 1000!
-
beide sind Zahl ohne max.
Die Werte *1000 sind korrekt. -
tärrää So gehts, wenn ich zwei Timeouts verschachtel, läuft es wie geschmiert.
var timeoutisv var timeoutisd on({id: "javascript.0.alarmgeber.innensirene", change: "ne"}, function (obj) { if (obj.state.val === true) { timeoutisv = setTimeout(function () { setState("zwave.0.NODE12.SWITCH_BINARY.Instance_2:_Switch_2", true); timeoutisd = setTimeout(function () { setState("zwave.0.NODE12.SWITCH_BINARY.Instance_2:_Switch_2", false); setState("javascript.0.alarmgeber.innensirene", false); }, getState("javascript.0.alarmgeber.alarmInnerSirenDuration").val*1000); }, getState("javascript.0.alarmgeber.alarmInnerSirenDelay").val*1000); } });
@ahnungsbefreit Danke für deine Unterstützung