NEWS
Tipp zeitverzögert einschalten
-
Einen wunderschönen Abend !
Brauche bitte einen Tipp, denn ich verstehe nicht warum es nicht funktioniert!
Was möchte ich machen:
Ich möchte beim Verlassen der Wohnung die Verbraucher ausschalten die ich nicht brauche und mein Tablet (wo iobroker drauf läuft) dunkel schalten.
Aber wenn ich nach Hause komme möchte ich alle wieder einschalten - dadurch fliegt aber leider die Sicherung. Daher baute ich ins Script eine Zeitverzögerung ein.Also: Ich habe eine Kategorie "VerbraucherAUS" definiert - frage diese ab und schalte dann alle aus bzw. ein mit der Zeitverzögerung !
Nur die Verzögerung funktioniert nicht und ich weiß nicht warum - es schalten trotz setTimout Function immer alle gleichzeitig:Script:
const g_State = '0_userdata.0.VIS.Ebene.Gesamt.WohnungVerlassen'; on({id: g_State, change:'any'}, function(obj) { //Version2 var Licht = getObject("enum.functions.VerbraucherAUS").common.members; var LichtMax=Licht.length; for(let i = 0; i < Licht.length; i++) { const objx = getObject(Licht[i]); var Status = getState(Licht[i]).val; // Die Rolle direkt aus der common-Eigenschaft holen if (objx && objx.common && objx.common.role) { const role = objx.common.role; if (role =='button') { if (!obj.state.val) { setState(Licht[i], true); } } else { if (obj.state.val) { setTimeout(function() { setState(Licht[i], true); }, 23000); console.log ('************************** Wohnung verlassen: eingeschalten - ' + objx.common.name); } else { setTimeout(function() { setState(Licht[i], false); }, 23000); console.log ('************************** Wohnung verlassen: ausgeschalten - ' + objx.common.name); } } } } });Also falls wer einen Tipp hat wäre ich sehr dankbar!
lg
Klaus -
Einen wunderschönen Abend !
Brauche bitte einen Tipp, denn ich verstehe nicht warum es nicht funktioniert!
Was möchte ich machen:
Ich möchte beim Verlassen der Wohnung die Verbraucher ausschalten die ich nicht brauche und mein Tablet (wo iobroker drauf läuft) dunkel schalten.
Aber wenn ich nach Hause komme möchte ich alle wieder einschalten - dadurch fliegt aber leider die Sicherung. Daher baute ich ins Script eine Zeitverzögerung ein.Also: Ich habe eine Kategorie "VerbraucherAUS" definiert - frage diese ab und schalte dann alle aus bzw. ein mit der Zeitverzögerung !
Nur die Verzögerung funktioniert nicht und ich weiß nicht warum - es schalten trotz setTimout Function immer alle gleichzeitig:Script:
const g_State = '0_userdata.0.VIS.Ebene.Gesamt.WohnungVerlassen'; on({id: g_State, change:'any'}, function(obj) { //Version2 var Licht = getObject("enum.functions.VerbraucherAUS").common.members; var LichtMax=Licht.length; for(let i = 0; i < Licht.length; i++) { const objx = getObject(Licht[i]); var Status = getState(Licht[i]).val; // Die Rolle direkt aus der common-Eigenschaft holen if (objx && objx.common && objx.common.role) { const role = objx.common.role; if (role =='button') { if (!obj.state.val) { setState(Licht[i], true); } } else { if (obj.state.val) { setTimeout(function() { setState(Licht[i], true); }, 23000); console.log ('************************** Wohnung verlassen: eingeschalten - ' + objx.common.name); } else { setTimeout(function() { setState(Licht[i], false); }, 23000); console.log ('************************** Wohnung verlassen: ausgeschalten - ' + objx.common.name); } } } } });Also falls wer einen Tipp hat wäre ich sehr dankbar!
lg
Klaus@klaus88 sagte: wer einen Tipp hat
Die Timeouts starten alle fast gleichzeitig. Multipliziere die 23 s mit dem Zählwert i, um verschiede Verzögerungen zu erhalten. Außerdem lässt es sich mit nur einem Timeout programmieren:
else { setTimeout(function() { setState(Licht[i], obj.state.val); console.log ('************************** Wohnung verlassen: ' + obj.state.val ? 'ein' : 'aus' + 'geschalten - ' + objx.common.name); }, 23000 * i); } -
@klaus88 sagte: wer einen Tipp hat
Die Timeouts starten alle fast gleichzeitig. Multipliziere die 23 s mit dem Zählwert i, um verschiede Verzögerungen zu erhalten. Außerdem lässt es sich mit nur einem Timeout programmieren:
else { setTimeout(function() { setState(Licht[i], obj.state.val); console.log ('************************** Wohnung verlassen: ' + obj.state.val ? 'ein' : 'aus' + 'geschalten - ' + objx.common.name); }, 23000 * i); } -
@paul53 : Perfekt hat funktioniert - DANKE vielmals, da wäre ich nie drauf gekommen - ich dachte, wenn er die Schleife aller Verbraucher durchläuft , reicht das, dass genügend Zeitverzug bleibt ! Perfekt ! Herzlichen Dank und ein wunderschönes Wochenende! lg Klaus