NEWS
Script starten nach start der Javascript Instanz
-
Liebes Forum,
ich habe da mal mit Sicherheit eine Anfängerfrage. Ich habe diverse Scripts die bei Eventänderungen agieren, zb. bei Änderung einer Wechzeit wird die alte Wechzeit gelöscht und eine neue Zeit als Scheduleevent eingetragen.
Wenn nun die Scriptinstanz neu starten sind die Schedulejobs alle weg. Ich suche daher einen Weg nach dem Start des Scriptadapters dies dann initial einmal anzuschieben.Hat da jemand eine Idee?
Viele Güße
Helmut -
@hschief Du musst in deinem Skript diesen Neustart-Fall vorsehen. (Super Aussage, ich weis).
Ich hab da zum Beispiel einige Skripte die z.B. Tageswerte summieren oder Anzeigen ob etwas im Briefkasten liegt.
Bei meinem Summen läuft das zwar in Variablen, er speichert sich den Tageswert aber auch jedes Mal in einen Datenpunkt ab. Beim Start des Skriptes lädt sich die Variable den Wert einmalig aus den Datenpunkt.
Und wenn ich um Mitternacht die Variable wieder auf 0 setze mache ich das auch mit dem Datenpunkt.Du müsstest also jedes Mal wenn du eine neue "Wechzeit" (Weckzeit?) setzt dir diese auch in einen Datenpunkt speichern. Wird diese erreicht setzt du den Datenpunkt auf etwas unverfängliches, z.B.
0
.
Beim Start des Skriptes holst du dir den Inhalt des Datenpunktes - und wenn der nicht0
ist setzt du gleich das Event.Hinweis am Rande: In Eventtriggern Schedules zu setzen kann böse enden. Löst der Trigger 10 mal aus hast du auch 10 Schedules, also bitte schön darauf achten wie du das machst so dass es auch wirklich nur ein bzw. die beabsichtigte Menge an Schedule gibt.
-
@hschief sagte: nach dem Start des Scriptadapters dies dann initial einmal anzuschieben.
Packe den Wecker in eine Funktion und rufe diese bei Skriptstart und bei Änderung der Uhrzeit auf.
const idWeckzeit = 'abc'; // Weckzeit in hh:mm var sched1; function wecker(uhrzeit) { let t = uhrzeit.split(':'); sched1 = schedule(t[1] + ' ' + t[0] + ' * * *', function() { // Aktionen zur Weckzeit }); } wecker(getState(idWeckzeit).val); // Skriptstart on(idWeckzeit, function(dp) { clearSchedule(sched1); wecker(dp.state.val); });
-
@paul53 Hallo Paul, vielen Dank, ich werde dies in dieser Form machen.
Ich hatte mir gestern auch noch die Funktion ListSchedules angesehen um die laufenden Schedules auszuwerten und dann zu starten wenn der Schedule für den Tag nicht gesetzt ist.Mit deiner Lösung ist es aber deutlich effizienter.