NEWS
Überleben Timeouts einen Restart?
-
In Blockly setze ich dynamisch Timer. Mir ist klar, das Cron Timer einen restart überleben,
wie sieht das aber mit dynamischen Timern aus (Ausführen alle xx Minuten)? -
Innerhalb eines Triggere muss der Trigger den timeout neustarten.
Außerhalb startet er automatisch durch den Start der Javascript Instanz und dem Start des Scripts.
-
@simplyclever sagte in Überleben Timeouts einen Restart?:
dynamisch
variablen überleben keine neustarts
wenn du etwas absichern willst, musst du es in einen dp schreiben -
@simplyclever sagte in Überleben Timeouts einen Restart?:
Mir ist klar, das Cron Timer einen restart überleben,
wieso das?
sie werden beim Neustart neu abonniert.@simplyclever sagte in Überleben Timeouts einen Restart?:
wie sieht das aber mit dynamischen Timern aus (Ausführen alle xx Minuten)?
entsprechend genau so.
Aber was ist daran dynamisch? -
@homoran Dynamisch ist daran, dass die Timeouts in abhängigkeit von DatenPunkten aktiviert bzw. deaktiviert werden.
Z.B. Wenn die Haustür geöffnet wird starte einen Timer. Nach 5 Minuten gibt es eine Warnung an mein Handy, dass die Tür
seit 5 Minuten offen steht. Wird die Tür vor Ablauf des Timers geschlossen, wird der Timer gestoppt.
Ziel ist also sicherzustellen, dass bei einen Restart (Stromausfall, etc) aktive Timer wieder gestartet werden (wenn sie denn den
Restart nicht überleben). -
@simplyclever sagte in Überleben Timeouts einen Restart?:
Ziel ist also sicherzustellen, dass bei einen Restart (Stromausfall, etc) aktive Timer wieder gestartet werden (wenn sie denn den
Restart nicht überleben).dann müsstest du statt Timeout einen Timestamp in einen DP schreiben.
Diesen bei Neustart wieder auslesen.Was nutzt dir ein gelöschter 5 Minuten Timeout, wenn er nach einer Stunde Stromausfall genau da weitermachen würde wo er abgebrochen worden ist.
-
@homoran Ja, dass ist klar. Nach restart gucken, welcher Timer aktiv ist, wie viel Zeit vergangen ist und Timer evtl. neu aktivieren, falls der Auslöser auch noch wahr ist.
Puh, klingt doch nach mehr Aufwand, da ich natürlich nicht nur 1 Timer habe und diese auch unterschiedliche Wartezeiten.
Dann muss ich das ganze etwas generischer Implementieren.
Oder ganz simpel: Nach Neustart alle Trigger checken, die Timer aktivieren. -
@simplyclever
um es kurz zu machen,
alle timer, die mit setinterval oder settimeout gestartet worden sind (wie die blöcke in blockly da genau heißen weiß ich nicht) sind nach neustart des javascript-adapters weg.
wahrscheinlich auch nach stop und start des skriptes, da der javascript adapter die timer dann wieder aufräumt.
d.h. du musst diese art der timer immer irgendwo in einem datenpunkt speichern und dann nach skriptstart wieder erneut starten. -
Oder es nicht bis zur perfektion treiben.
Wie oft wird der iobroker denn neugestartet?Ob zu diesem Zeitpunkt grad wirklich eine Türe offen war? Und man dann alle x Monate mal eine Meldung verpasst?
Ich starte mein System ca jeden Monat einmal gezielt neu wenn Updates etc eingespielt werden.
EDIT
Und wenn das System mal ungewollt neustartet, warum auch immer werde ich benachrichtigt und gut ist. -
@simplyclever ist doch nicht so wild:
-du hast für jeden timer einen dp
- wenn der timer auslöst schreibst du 0 rein
- wenn ein timer gesetzt wird nimmst du den jetzt-zeittempel + x-minuten und schreibst diesen wert
- beim script start checkst du den dp - ist er 0 ist nix zu tun hat er einen wert, der kleiner wie die jetztzeit ist, ist er abgelaufen - dann gibt's alarm
- ist er größer als jetzt setzt du den timer wieder neu
deine timer datenpunkte setzt du in ein array, dann kannst du durch eine schleife laufen und abfragen
ist doch ein interessantes script
-
@liv-in-sky genau so!
aber ob das
@liv-in-sky sagte in Überleben Timeouts einen Restart?:
doch nicht so wild:
ist, lasse ich jetzt mal offen.