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
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden