NEWS
[gelöst] Zeitsteuerung Javascript versus UI?
-
Ich bräuchte mal Grundverständnis bzgl. einer Zeitsteuerung eines Javascripts.
Hintergrund: Ich habe ein Javaskript, das ich (z.B. zum Testen aber auch sonst) gerne einfach manuell auslösen will ohne viel Brimborium. Ansonsten soll es aber i.d.R. automatisch zeitgesteueuert am Monatsersten ablaufen.
Jetzt sehe ich im iob UI für Javascript a) rechts oben ein Uhr-Symbol, mit dem ich einen Wizard starte für einen CRON-Job.
Der schreibt mir dann in die erste Zeile des Skriptes'{"time":{"exactTime":true,"start":"00:05"},"period":{"months":1,"dates":"[1]"}}'
rein, sonst nix.
Und ich habe links oben im UI den "play" Button, der das Skript laufen lässt.
In meinem Fall läuft nach dem Play-Button das Skript einmal durch (während dieser Zeit ändert sich der "play" Button zu einem "Pause" Button) und endet dann (man sieht wieder den "Play"-Button).
Ich kann nicht erkennen, ob die Zeitsteuerung irgendwie aktiv ist.Da ich ursprünglich schon - als die Zeitsteuerung noch nicht eingebaut sein sollte - feststellte, dass der manuelle Aufruf des Skripts, das Ding weiter sinnlos "laufen" lässt (erkennbar an dem "Pause"-Button), habe ich ein hartes Beenden des Skripts eingebaut, damit ich nicht selbst immer per Hand abbrechen muss.
function beendeSkript() { log('✅ Beende Skript jetzt...', 'info'); const maxHandles = 1000; for (let i = 1; i < maxHandles; i++) { clearTimeout(i); clearInterval(i); } if (typeof stopScript === 'function') stopScript(); if (typeof process !== 'undefined' && process.exit) process.exit(0); }
Ich mutmasse, das das jetzt verhindert, dass eine Zeitsteuerung aktiv ist.
Fragen:
- Woran erkennt man, ob ein Skript aktuell auf eine Zeitsteuerung wartet?
- Ist die eine Zeile aus dem Wizard mit den einfachen Anführungszeichen ausreichend für eine Zeitsteuerung?
- Muss das Skript "laufen", also der UI-Button als "Pause"-Version sichtbar, damit eine Zeitsteuerung greift?
- Was wäre die beste Lösung, um die von mir oben beschriebene Kombination von optional manuellem Aufruf und Zeitsteuerung hinzubekommen?
-
Der wizard erzeugt die die Konfiguration für den schedule Befehl.
Das ist der Befehl der dann auf den Zeitpunkt wartet und dann in seinem callback das aufruft was du definiert hast was passieren soll.
Das Skript muss dazu auch laufen. -
@bertderkleine sagte: Javaskript, das ich (z.B. zum Testen aber auch sonst) gerne einfach manuell auslösen will ohne viel Brimborium. Ansonsten soll es aber i.d.R. automatisch zeitgesteueuert am Monatsersten ablaufen.
Das macht man mit einer Funktion, die sowohl zu Monatsbeginn als auch bei Skriptstart aufgerufen wird.
function actions() { // Aktionen } schedule('5 0 1 * *', actions); // Ausführen zu Monatsbeginn actions(); // Ausführen bei Skriptstart
Die Funktion wird allerdings auch bei Neustart der Javascript-Instanz ausgeführt, was man verhindern kann:
function actions() { // Aktionen } schedule('5 0 1 * *', actions); // Ausführen zu Monatsbeginn if(getState('system.adapter.javascript.0.uptime').val > 60) actions(); // Ausführen bei Skriptstart
-
@paul53 sagte in Zeitsteuerung Javascript versus UI?:
@bertderkleine sagte: Javaskript, das ich (z.B. zum Testen aber auch sonst) gerne einfach manuell auslösen will ohne viel Brimborium. Ansonsten soll es aber i.d.R. automatisch zeitgesteueuert am Monatsersten ablaufen.
Das macht man mit einer Funktion, die sowohl zu Monatsbeginn als auch bei Skriptstart aufgerufen wird.
function actions() { // Aktionen } schedule('5 0 1 * *', actions); // Ausführen zu Monatsbeginn actions(); // Ausführen bei Skriptstart
Die Funktion wird allerdings auch bei Neustart der Javascript-Instanz ausgeführt, was man verhindern kann:
function actions() { // Aktionen } schedule('5 0 1 * *', actions); // Ausführen zu Monatsbeginn if(getState('system.adapter.javascript.0.uptime').val > 60) actions(); // Ausführen bei Skriptstart
Super, danke! Das hat geholfen.