Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Zeitsteuerung Javascript versus UI?

    NEWS

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    [gelöst] Zeitsteuerung Javascript versus UI?

    This topic has been deleted. Only users with topic management privileges can see it.
    • BertDerKleine
      BertDerKleine last edited by BertDerKleine

      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:

      1. Woran erkennt man, ob ein Skript aktuell auf eine Zeitsteuerung wartet?
      2. Ist die eine Zeile aus dem Wizard mit den einfachen Anführungszeichen ausreichend für eine Zeitsteuerung?
      3. Muss das Skript "laufen", also der UI-Button als "Pause"-Version sichtbar, damit eine Zeitsteuerung greift?
      4. Was wäre die beste Lösung, um die von mir oben beschriebene Kombination von optional manuellem Aufruf und Zeitsteuerung hinzubekommen?
      OliverIO paul53 2 Replies Last reply Reply Quote 0
      • OliverIO
        OliverIO @BertDerKleine last edited by

        @bertderkleine

        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.

        1 Reply Last reply Reply Quote 3
        • paul53
          paul53 @BertDerKleine last edited by paul53

          @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
          
          BertDerKleine 1 Reply Last reply Reply Quote 2
          • BertDerKleine
            BertDerKleine @paul53 last edited by

            @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.

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            644
            Online

            32.1k
            Users

            80.7k
            Topics

            1.3m
            Posts

            3
            4
            98
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo