NEWS
Suche "ausfallsicheren" Timer (Blockly)
-
Moin. ich möchte für verschiedene Anwendungen einen Timer realisieren. Ansich nicht das Problem...
nur stoppen alle Timer, falls ioBroker oder der javascript-Adapter neustarten. (z.B. auch beim täglichen Backup)...
Zuerst hatte ich einen einfachen Timer über eine Schleife realisiert, da ist es klar das der abbricht bei einem Neustart...
Jetzt hab ich einen Timer über einen CRON-Job versucht... aber sobald ich den js-Adapter neu starte, ist auch der CRON-Job weg und der Timer wird nicht ausgeführt...Gibts da ne ausfallsichere Lösung? Also einen Timer, der auch nach einem eventuellen Neustart noch zuverlässig läuft?
-
warum nimmst du den cron nicht als trigger im script?
-
Schreibe den timer Zeitpunkt in einen eigenen Datenpunkt und frage den dann per Script ab.
Datenpunkte bleiben auch über System-Neustarts hinweg erhalten.
-
@Supermicha sagte:
sobald ich den js-Adapter neu starte, ist auch der CRON-Job weg und der Timer wird nicht ausgeführt...
Der CRON-Job wird neu gestartet.
Was willst Du erreichen und wie sieht Dein Versuch mit dem CRON-Job aus ? Soll der Timer weiter laufen ? Wenn ja, gibt es beim Backup aber eine längere Unterbrechung. -
@Supermicha sagte:
beim täglichen Backup
Wenn man den Endzeitpunkt der Verzögerung berechnet und in einem Datenpunkt speichert, kann man auch Unterbrechungen (Backup) überwinden.
-
mein Timer sah bisher so aus...
der Hinweis mit dem CRON als Trigger war schon gut.. denke ich..
so wie ich es habe, das der da irgendwo verschachtelt drin ist, wird wohl nicht klappen...@paul53 ich nutze das aktuell um mein Handyladegerät nach 3 Stunden auszuschalten...
Problem ist nur, wenn ich zwischenzeitlich an meinem ioBroker rumbastel, "vergisst" er auszuschalten...
Oder wenn ich nachts um 1 das Ladegerät anschalte und ioBroker um 3 sein Backup macht, ist der Timer auch futsch...Ich guck mir dein Blockly jetzt erstmal genauer an
-
@paul53 ich dachte ich kenn mich mit Blockly schon ganz gut aus... bis ich versucht habe deins zu verstehen...
Du benutzt eine Funktion als Trigger? Damit hab ich noch nie gearbeitet...
hättest du die Muse mir das kurz zu erklären? -
@Supermicha sagte in Suche "ausfallsicheren" Timer (Blockly):
ch dachte ich kenn mich mit Blockly schon ganz gut aus... bis ich versucht habe deins zu verstehen...
Das war 100%ig was mir auch durch den Kopf ging
-
@BBTown wie genau meinst du das mit CRON als Trigger?
Ich muss ja, falls der Timer geändert/aktiviert wird, den CRON entsprechend ändern lassen...
-
@Supermicha sagte:
Du benutzt eine Funktion als Trigger?
Nein, eine Funktion ist kein Trigger. Ich benutze eine Funktion immer dann, wenn die gleiche Befehlsfolge mehrfach benötigt wird: Hier bei Skriptstart und im Triggerbaustein. An die Funktion verzoegerung(stop) wird der Stop-Zeitpunkt in ms (Linux-Zeit) übergeben.
-
Ich glaube zu verstehen was du meinst....
Hast du dir mein Blockly mal angesehen? Das läuft super.. auch der CRON-Job wird richtig aktualisiert, aber er überlegt keinen Adapter-Neustart...
Liegt das irgendwie daran, das er im Falls Objekt drin steckt? Aber anders kriege ich den bei Änderung ja nicht neu gestartet.... -
@Supermicha sagte:
aber er überlegt keinen Adapter-Neustart
Das kann er auch nicht, da der CRON Job nur im Trigger gesetzt wird und nicht auch bei Skriptstart.
Übrigens: timeout ist überflüssig und die letzte Stelle im CRON ist nicht das Jahr, sondern der Wochentag.
-
Den Timeout brauche ich, weil sonst das der CRON bei mir nicht aktualisiert wird.. wahrscheinlich wird der Datenpunkt schneller eingelesen als er aktualisiert wird? Ohne Timeout gehts bei mir nicht.. mit klappts wie es soll....
stimmt, das mit den Wochentag hatte ich verdrängt...
-
@Supermicha sagte:
wahrscheinlich wird der Datenpunkt schneller eingelesen als er aktualisiert wird?
Das stimmt, wird er. Deshalb macht man das Einlesen in der Callback-Funktion von setState(), aber das bietet Blockly leider nicht; oder man verwendet eine Variable.
-
@Supermicha sagte in Suche "ausfallsicheren" Timer (Blockly):
mein Timer sah bisher so aus...
der Hinweis mit dem CRON als Trigger war schon gut.. denke ich..
so wie ich es habe, das der da irgendwo verschachtelt drin ist, wird wohl nicht klappen...@paul53 ich nutze das aktuell um mein Handyladegerät nach 3 Stunden auszuschalten...
Problem ist nur, wenn ich zwischenzeitlich an meinem ioBroker rumbastel, "vergisst" er auszuschalten...
Oder wenn ich nachts um 1 das Ladegerät anschalte und ioBroker um 3 sein Backup macht, ist der Timer auch futsch...Ich guck mir dein Blockly jetzt erstmal genauer an
mal ein anderer vorschlag:
mit tasker (wenn android handy) kann man sehr einfach den batteriestand an iobroker übersenden - ich schalte meine wireless station auch nach diesem batterie stand ein und aus - bei hundert wird ausgeschaltet und bei bei kleiner 35% wird das laden eingeschaltet. mit normaler stromversorgung geht das natürlich auch mit entsprechendem script
falls man tasker nicht mag, ginge auch fullybrowser - da bekommt man denn batt stand auch in iobroker. -
So ich hab die Ausfallsichere Variante hingekriegt...
Ich nutze 2 Scripte...Das Erste läuft immer und schreibt, wenn es getriggert wird, einen Zeitpunkt in einen Datenpunkt und aktiviert Script Nummer 2
Das Zweite vergleicht jetzt jede Minute die aktuelle Zeit mit der Zeit aus dem Datenpunkt (und berechnet die Differenz für VIS-Anzeige) nachdem die Zeit abgelaufen ist, führt es die gewünschte Aktion aus und deaktiviert sich selbst...
Das bleibt endlich auch über einen ioBroker oder Raspi Neustart erhalten.