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 -
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
-
@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?
-
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
-
@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. -
@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
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. -
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!
-
@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. -
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
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login