Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Schedule

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Schedule

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

      Hallo,

      Kleiner Hinweis für "unbedarfte javascript-Programmierer", wie ich einer bin.

      Beim Programmieren der Skripte sind mir bei der Verwendung von "schedule" ein paar Fehler unterlaufen, die - warum auch immer - dazu geführt haben, dass anschliessend gar keine Skripte mehr ausgeführt wurden (Status der Instanz javascript blieb aber "grün")

      A) schedule ruft die Funktion auf, in der es selber enthalten ist. Wenn das oft genug durchgeführt wurde (bei mir jede Sekunde), ist irgendwann Schluss. War also eine schlechte Idee…
      ` > function test()

      {

      if (xyz) schedule(….,function(){test();});

      else log("Ende");

      } `

      Ich hab das jetzt durch ein schedule("*/x *..",function(){test();}) in einer anderen Funktion gelöst. Der Abruch erfolgt nun ebenfalls durch clearSchedule() von ausserhalb test();.

      B) hier bin ich noch nicht sicher, warum das heute zum kompletten Absturz geführt hat. Ich musste den RASPI zweimal neu starten, bis Skripte wieder ausgeführt wurden.
      ` > var startzeit ="2017-04-01 15:15:00";

      var dt = startzeit.split(" ");

      var datum = dt[0].split("-");

      var uhrzeit = dt[1].split(":");

      schedule({year: datum[0], month: datum[1], day: datum[2], hour: uhrzeit[0], minute: uhrzeit[1]}, function….}; `
      Hier bin ich nicht sicher, ob

      a) der string typ der Übergabeparameter,

      b) die leider in der Vergangenheit liegende Uhrzeit oder

      c) die Parameter "year", "month", "day" mir den ärger gemacht haben

      Vielleicht kann mir zu B) jemand einen Hinweis geben?

      Danke !

      Georg

      1 Reply Last reply Reply Quote 0
      • AlCalzone
        AlCalzone Developer last edited by

        Kurzer Hinweis, warum A) probleme macht:

        schedule wird üblicherweise verwendet, wiederkehrende Aufgaben regelmäßig auszuführen (jede Sekunde, etc). Ich vermute, du verwendest die Funktion ähnlich wie setTimeout, das nur einmalig die Funktion ausführt. schedule ist aber zu vergleichen mit setInterval, das bis zum Stop regelmäßig die Funktion immer wieder aufruft.

        Daher erstellst du sozusagen in einer Schleife endlos neue schedules. Jeder Aufruf von Test erzeugt einen neuen, der zusätzlich zu den alten aufgerufen wird, jeder * steht für einen Funktionsaufruf:

        außerhalb
        * | Test (1)
        * | * | Test (2)
        * | * | * | Test (3)
        * | * | * | * | Test (4)
        ...
        
        

        Korrekt wäre: Außerhalb der Funktion einmalig den schedule erstellen und bei Bedarf beenden. Oder du weichst auf setTimeout aus und machst es wie in deinem Code oben.

        Zu B kann ich dir ohne Test-Code und ioBroker leider gerade nicht helfen. Vielleicht sieht ja jemand anders das Rroblem

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo,

          ich bekomme vom Editor immer die Warnmeldung "Do not put a function in a function" oder ähnlich, wenn ich schedule in eine Funktion packe. Auf diese Meldungen achten (kommen links von der entsprechenden Zeile)!

          Pix

          1 Reply Last reply Reply Quote 0
          • AlCalzone
            AlCalzone Developer last edited by

            Eigentlich spricht da erst mal nichts dagegen. Anynome Funktionen sind bei Callbacks, setTimeout, etc. recht gängig.

            1 Reply Last reply Reply Quote 0
            • Goersch
              Goersch last edited by

              ich war auch etwas überrascht. Den Fall A) hab ich 2 mal nachgestellt und es war reproduzierbar. Im Fall B hab ich nicht weiter gesucht.

              1 Reply Last reply Reply Quote 0
              • frankjoke
                frankjoke last edited by

                Wenn du einen bestimmten Termin, und nicht stündliche oder menütliche Ereignisse vewenden willst würd ich eher mit setTimeout arbeiten.

                Schaut ca so aus:

                var startzeit =new Date("2017-04-06 15:15:00");
                setTimeout(function() {}, startzeit.getTime()-Date.now());
                
                

                Startzeit muss nur in der Zukunft liegen.

                1 Reply Last reply Reply Quote 0
                • Goersch
                  Goersch last edited by

                  ja, danke 🙂

                  setTimeout müsste ich mit setInterval verwenden, da ich den Aufruf zyklisch brauche (muss ich noch ausprobieren)

                  schedule hat für meinen Anwendungsfall noch eine andere schwäche: Wenn man eine Funktion alle 15 Minuten aufrufen will (also schedule("*/15 * * * *", function () ….") dann wird die Funktion immer um xx:00, xx:15, xx:30, xx:45 aufgerufen.

                  Ich will aber eine Funktion von "jetzt" an alle 2 Minuten auszuführen. Mit schedule passiert es, dass die Funktion dann im schlechtesten Fall 1 Sekunde später aufgerufen wird.

                  1 Reply Last reply Reply Quote 0
                  • AlCalzone
                    AlCalzone Developer last edited by

                    @Goersch:

                    Ich will aber eine Funktion von "jetzt" an alle 2 Minuten auszuführen. Mit schedule passiert es, dass die Funktion dann im schlechtesten Fall 1 Sekunde später aufgerufen wird. `

                    Dann ist setInterval dein Freund.

                    1 Reply Last reply Reply Quote 0
                    • Goersch
                      Goersch last edited by

                      OK - danke!

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      508
                      Online

                      31.7k
                      Users

                      79.8k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      2035
                      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