NEWS
[GELÖST] clear schedule?
-
Hallo,
gibt es eine Möglichkeit in einem iobroker javascript ein scheduled Funktionion abzumelden? Etwas wie clearSchedule(callback).
Ich versuche eine Zustandsmaschine für meine Wohnung zu schreiben, wo der Zustand zu gewissen Zeiten geändert wird. Die Zeiten würde ich gerne in javascript Variablen speicher, die dann mit dem VIS UI geändert werden können.
var state; var awakeTime={hour: 07, minute: 00} on(awakeTime, cb(function (timer){ #Awake time! #TBD: clear stateChanged schedule(timer.val, cb(function (){ state = "awake"; }))
Ich könnte vermutlich auch setTimeout und clearTimeout benutzen oder eine Funktion schedulen, die jede Minute gerufen wird und dann pruft ob Zeit==awakeTime aber beider scheinen nicht so elegant zu sein…
Für Ideen wäre ich dankbar!
-
-
Danke pix,
in den Bespiele für isTimeInRange() wird immer ein Datepunkt als trigger benutzt. Das habe ich nicht, wenn ich nicht ein eigenes addiere:
var awakteTimeStart='07:00:00'; var awakeTimeEnd='22:00:00'; schedule("* * * * *", function () { //Triggered every minute if (isTimeInRange(awakteTimeStart,awakeTimeEnd) state = "awake"; } }
Dieser Funktion würde dann jeder Minute angerufen, um zu prufen ob die state zu "awake" gestzt werden muss. Vielleicht geht es aber naja, ich finde es nicht so elegant.
-
Habe eingefügt:
### 1.0.3 (2015-10-30) * (bluefox) add clearSchedule function (only for non astro function)
### clearSchedule If **no** "astro" function used you can cancel the schedule later. To allow this the schedule object must be saved: ``` var sch = schedule("*/2 * * * *", function () {...}); clearSchedule(sch); ```
-
Habe eingefügt:
### 1.0.3 (2015-10-30) * (bluefox) add clearSchedule function (only for non astro function) ```` `
Cool! Das war schnell!
Jetzt bin ich dran! Ich melde mich später, wenn ich das stateUpdate Script fertig habe.
Dein ioBroker.vis-timeandweather wird auch dabei helfen
-
BlueFox,
leider gibt es noch ein Problem mit clearSchedule: wenn man das Script beendet, dass clearSubscribe verwendet, gibt es errors:
javascript.0 2015-10-31 09:58:52 error TypeError: Cannot read property 'name' of undefined at stop (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1510:55) at Object.utils.adapter.objectChange (/opt/iobroker/node_modules/ javascript.0 2015-10-31 09:58:52 error message script.js.test [object Object] Cannot read property 'name' of undefined javascript.0 2015-10-31 09:58:52 info javascript.0 Stop script script.js.test javascript.0 2015-10-31 09:58:30 info javascript.0 script.js.test: registered 0 subscriptions and 2 schedules javascript.0 2015-10-31 09:58:30 info javascript.0 Start javascript script.js.test javascript.0 2015-10-31 09:58:19 info javascript.0 Stop script script.js.Script1
Dafür habe ich dieses Testcase geschrieben:
createState("test"); sch = schedule("0 0 * * *", cb(function(){ log("schedule called"); })); clearSchedule(sch); sch = schedule("0 1 * * *", cb(function(){ log("schedule 2 called"); }));
Ich vermute, dass bei dem javascript stop alle schedulers gelöscht werden aber jetzt gibt es einige die nicht mehr gültig sind, weil sie in Programm schon gelöscht sind.
Nach dieses Error, muss ich das javascript Instanz neue starten, damit es wieder sauber funktioniert.
-
Hi, ich habe ein andese Problem, einen variablen Scheduler:
schedule({hour: getState(idMyTime).val.substring(0,2), minute: getState(idMyTime).val.substring(3,5), second: 0}, function () { //Do something..... });
Damit das funktioniert, muss das Script bei einer Änderung am Object, neu gestartet werden. Gibt es eine Möglichkeit
einen Scheduler zu resetten oder zu refreshen? Oder übersehe ich eine andere Möglichkeit so etwas zu realisieren?
Gruß
Jo -
@androiddev du antwortest tatsächlich auf einen Thread von 2015??
Herzlichen Glückwunsch zum Schliemann des Jahrzehnts! -
Eine sehr hilfreiche Antwort von einer sehr intelligenten Person.
Was ist das denn denn für eine ulkige Gesellschaft hier
Deinen Schliemann kannst du dir sonst wo hinschieben....