Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Scheduling / Timing in Java Script

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    815

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Scheduling / Timing in Java Script

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 2 Kommentatoren 451 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • O Online
    O Online
    opöl
    schrieb am zuletzt editiert von opöl
    #1

    Hallo zusammen,

    ich habe mal eine Frage im Zusammenhang mit dem Scheduling / Timing in Java Script.
    Vielleicht kann mir jemand einmal einen Schubs geben.

    Ich habe eine Funktion "abfrageTasmota", die alle 6 Sekunden ausgeführt wird und nach einer Minute (also nach 10 Aufrufen) ein Ergebnis liefert. So wie unten dargestellt klappt das auch problemlos per Scheduler.

    schedule('59,05,11,17,23,29,35,41,47,53 * * * * *', abfrageTasmota); // Alle 6 Sekunden ausführen
    

    Ich würde allerdings gerne das Ergebnis immer zur (bzw. kurz vor) jeder vollen Minute erhalten, unabhängig davon, wann das Script mal gestartet wurde. Daher würde ich das gerne mit dem Scheduler einmal in der Minute starten und dann alle 6 Sekunden erneut ausführen. Leider klappt das nicht so, wie ich mir das vorgestellt habe:

    schedule('59 * * * * *', abfrageTasmota); // Alle 6 Sekunden ausführen
    setTimeout(abfrageTasmota, 6000)
    

    Welchen Denkfehler mache ich und wie kann ich das Problem lösen?

    Vielen Dank und Gruß

    paul53P 1 Antwort Letzte Antwort
    0
    • O opöl

      Hallo zusammen,

      ich habe mal eine Frage im Zusammenhang mit dem Scheduling / Timing in Java Script.
      Vielleicht kann mir jemand einmal einen Schubs geben.

      Ich habe eine Funktion "abfrageTasmota", die alle 6 Sekunden ausgeführt wird und nach einer Minute (also nach 10 Aufrufen) ein Ergebnis liefert. So wie unten dargestellt klappt das auch problemlos per Scheduler.

      schedule('59,05,11,17,23,29,35,41,47,53 * * * * *', abfrageTasmota); // Alle 6 Sekunden ausführen
      

      Ich würde allerdings gerne das Ergebnis immer zur (bzw. kurz vor) jeder vollen Minute erhalten, unabhängig davon, wann das Script mal gestartet wurde. Daher würde ich das gerne mit dem Scheduler einmal in der Minute starten und dann alle 6 Sekunden erneut ausführen. Leider klappt das nicht so, wie ich mir das vorgestellt habe:

      schedule('59 * * * * *', abfrageTasmota); // Alle 6 Sekunden ausführen
      setTimeout(abfrageTasmota, 6000)
      

      Welchen Denkfehler mache ich und wie kann ich das Problem lösen?

      Vielen Dank und Gruß

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @opöl sagte: Ergebnis immer zur (bzw. kurz vor) jeder vollen Minute erhalten

      function abfrageTasmota() {
          // Abfrage
          if(new Date().getSeconds() == 59) {
              // Auswertung
          }
      }
      
      schedule('59,05,11,17,23,29,35,41,47,53 * * * * *', abfrageTasmota); // Alle 6 Sekunden ausführen
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      O 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @opöl sagte: Ergebnis immer zur (bzw. kurz vor) jeder vollen Minute erhalten

        function abfrageTasmota() {
            // Abfrage
            if(new Date().getSeconds() == 59) {
                // Auswertung
            }
        }
        
        schedule('59,05,11,17,23,29,35,41,47,53 * * * * *', abfrageTasmota); // Alle 6 Sekunden ausführen
        
        O Online
        O Online
        opöl
        schrieb am zuletzt editiert von
        #3

        @paul53 ,

        Danke, das wäre ein denkbarer Ansatz, dazu müsste ich aber das Script umbauen. Sonst passen die Berechnungen nicht mehr zur Ausgabe. Die stehen erst nach den 10 Durchläufen zur Verfügung. Wenn ich Deinen Ansatz richtig verstehe, dann verhält sich die Ausgabe dazu asynchron. Ich würde lieber bei einem Aufruf per Scheduler und einem Delay mit sleep oder Timeout arbeiten.
        Vielleicht hat jemand dazu eine Idee?

        Gruß

        paul53P 1 Antwort Letzte Antwort
        0
        • O opöl

          @paul53 ,

          Danke, das wäre ein denkbarer Ansatz, dazu müsste ich aber das Script umbauen. Sonst passen die Berechnungen nicht mehr zur Ausgabe. Die stehen erst nach den 10 Durchläufen zur Verfügung. Wenn ich Deinen Ansatz richtig verstehe, dann verhält sich die Ausgabe dazu asynchron. Ich würde lieber bei einem Aufruf per Scheduler und einem Delay mit sleep oder Timeout arbeiten.
          Vielleicht hat jemand dazu eine Idee?

          Gruß

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @opöl sagte: verhält sich die Ausgabe dazu asynchron.

          Nein, die Auswertung der 10 zuvor abgefragten Werte erfolgt in der 59. Sekunde synchron.
          Asynchron wäre die Auswertung zur 59. Sekunde mit einem Abfrage-Intervall von 6 s.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          O 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @opöl sagte: verhält sich die Ausgabe dazu asynchron.

            Nein, die Auswertung der 10 zuvor abgefragten Werte erfolgt in der 59. Sekunde synchron.
            Asynchron wäre die Auswertung zur 59. Sekunde mit einem Abfrage-Intervall von 6 s.

            O Online
            O Online
            opöl
            schrieb am zuletzt editiert von
            #5

            @paul53 ,

            mein Script sammelt bei jeder Runde Werte ein, bildet daraus durch Addition und Division durch 10 die Mittelwerte und führt noch weitere Berechnungen aus und zählt einen Zähler von 1 bis 10 hoch. Damit das stimmt, müssen alle 10 Durchläufe zur 59. Sekunde abgeschlossen sein.
            Bei dem gegebenen Zeitplan (59,05....) ist aber nicht sichergestellt, dass zur 59 Sekunde alle Durchläufe erfolgt sind. Was ist, wenn das Script z.B. zur 30. Sekunde gestartet wird?

            Gruß

            paul53P 1 Antwort Letzte Antwort
            0
            • O opöl

              @paul53 ,

              mein Script sammelt bei jeder Runde Werte ein, bildet daraus durch Addition und Division durch 10 die Mittelwerte und führt noch weitere Berechnungen aus und zählt einen Zähler von 1 bis 10 hoch. Damit das stimmt, müssen alle 10 Durchläufe zur 59. Sekunde abgeschlossen sein.
              Bei dem gegebenen Zeitplan (59,05....) ist aber nicht sichergestellt, dass zur 59 Sekunde alle Durchläufe erfolgt sind. Was ist, wenn das Script z.B. zur 30. Sekunde gestartet wird?

              Gruß

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #6

              @opöl sagte: Was ist, wenn das Script z.B. zur 30. Sekunde gestartet wird?

              Dann werden beim ersten Durchlauf nur 5 Werte eingesammelt, danach aber jede Minute 10 Werte. Das kann man prüfen.

              var cnt = 0;
              var sum = 0;
              function abfrageTasmota() {
                  // Abfrage
                  sum += wert;
                  cnt++;
                  if(new Date().getSeconds() == 59) {
                      if(cnt == 10) {
                          // Auswertung
                      }
                      cnt = 0;
                      sum = 0;
                  }
              }
              
              schedule('59,05,11,17,23,29,35,41,47,53 * * * * *', abfrageTasmota); // Alle 6 Sekunden ausführen
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              O 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @opöl sagte: Was ist, wenn das Script z.B. zur 30. Sekunde gestartet wird?

                Dann werden beim ersten Durchlauf nur 5 Werte eingesammelt, danach aber jede Minute 10 Werte. Das kann man prüfen.

                var cnt = 0;
                var sum = 0;
                function abfrageTasmota() {
                    // Abfrage
                    sum += wert;
                    cnt++;
                    if(new Date().getSeconds() == 59) {
                        if(cnt == 10) {
                            // Auswertung
                        }
                        cnt = 0;
                        sum = 0;
                    }
                }
                
                schedule('59,05,11,17,23,29,35,41,47,53 * * * * *', abfrageTasmota); // Alle 6 Sekunden ausführen
                
                O Online
                O Online
                opöl
                schrieb am zuletzt editiert von
                #7

                @paul53 ,

                hat geklappt. Danke.
                Ich musste noch ein paar Variablen umbauen und mit Denkfehlern kämpfen, aber jetzt funktioniert alles so wie es soll.

                Gruß

                1 Antwort Letzte Antwort
                0
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                706

                Online

                32.6k

                Benutzer

                82.0k

                Themen

                1.3m

                Beiträge
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Anmelden

                • Du hast noch kein Konto? Registrieren

                • Anmelden oder registrieren, um zu suchen
                • Erster Beitrag
                  Letzter Beitrag
                0
                • Home
                • Aktuell
                • Tags
                • Ungelesen 0
                • Kategorien
                • Unreplied
                • Beliebt
                • GitHub
                • Docu
                • Hilfe