NEWS
Schedule - Spezial Frage
-
vorab:
Ich schreibe alles in JS; Blockly nehm ich nicht.
Bei Schedule benutze ich Cron.
Handhabe Schedule per Variable und clearschedule ist mir bekannt.Sachverhalt:
Ich möchte ein Gerät für x Minuten einschalten und dann nach weiteren x Minuten ausschalten.
Beide Werte liegen per DP vor, z.B.
alle_x = 15 (alle 15 Minuten ein schalten)
für_x = 2 (dann nach 2 Minuten aus schalten)Hatte es so probiert, klappt aber verständlicher Weise nicht:
alle_x = getState("javascript.0.System.Ulanzi.alle_x_Minuten").val; fuer_x = getState("javascript.0.System.Ulanzi.fuer_x_Minuten").val; // schedule '*/15 * * * *' sched_alle_x = "*/" + alle_x + " * * * *"; sched_fuer_x = "*/" + (alle_x + fuer_x) + " * * * *"; log (sched_alle_x + " __ " + sched_fuer_x); schedule(sched_alle_x, function () { setState("awtrix-light.0.display.power",true); log ("Ulanzi ein"); }); schedule(sched_fuer_x, function () { setState("awtrix-light.0.display.power",false); log ("Ulanzi aus"); }); log ("Ulanzi wird alle " + alle_x + " Minuten für " + fuer_x + " Minuten eingeschaltet.");
Wenn ich z.B. sage alle 3 Minuten für 1 Minute ein, dann kommt ja nach meinem Script:
alle_x = 3,6,9,12,15,.....
für_x = 4,8,12,16,...Somit klappt das nur das erste mal, dann läuft es auseinander.
Hat da jemand ein Script Schnipsel für mich.
-
@bahnuhr
Also ich würde per Schedule ein- und mit 'nem Timeout ausschalten. -
Hatte ich auch schon überlegt:
sowas:
schedule(sched_alle_x, function () { setState("awtrix-light.0.display.power",true); log ("Ulanzi ein"); setTimeout(function() { setState("awtrix-light.0.display.power",false); } , fuer_x); });
Ich probiers mal.
-
das funktioniert grundsätzlich.
allerdings, wenn während der an-phase der javascript adapter neugestartet wird
oder iobroker neu gestartet wird, dann gibt es den timout nicht mehr.da du aber sehr kleinteilig schaltets, wird ja beim nächsten mal an, der timer wieder gestartet