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. [gelöst] Javascript: agressive Intervalle

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    149

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

[gelöst] Javascript: agressive Intervalle

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
17 Beiträge 4 Kommentatoren 1.0k Aufrufe 2 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.
  • Rene55R Offline
    Rene55R Offline
    Rene55
    schrieb am zuletzt editiert von Rene55
    #1

    Ich brauche/suche ein Script (evtl. auch Blockly) mit dem ich folgendes erreichen kann: Es wird ein Loop zu einer bestimmten Uhrzeit angestossen. Dann soll sofort etwas getan (Ansage, Nachricht, etc) werden, nach 9 Sekunden soll das wiederholt werden, dann nach 6 Sekunden und dann nach 3 Sekunden (=> aggresiv). Das Script ist im Prinzip lauffähig, jedoch sind die Intervalle gleich. Kennt da jemand eine Vorgehensweise, den Intervall zu verändern?

    function loop1(){
        doAnything(counter);
        Intervall = setInterval(async () => {
            if (counter > 0) {
                counter = (typeof counter === 'number' ? counter : 0) -1;
                //log(counter);
                doAnything(counter);
                } else {
                    (() => { if (Intervall) { clearInterval(Intervall); Intervall = null; }})();
                    log('Fertig');
                }
        }, counter * 3000);
        //
    }
    // 
    function doAnything(nr){
        log(`Moep [${nr}]`);
    }
    

    Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
    ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
    Wetterstation: Froggit WH3000SE V1.6.6

    CodierknechtC bahnuhrB paul53P 3 Antworten Letzte Antwort
    0
    • Rene55R Rene55

      Ich brauche/suche ein Script (evtl. auch Blockly) mit dem ich folgendes erreichen kann: Es wird ein Loop zu einer bestimmten Uhrzeit angestossen. Dann soll sofort etwas getan (Ansage, Nachricht, etc) werden, nach 9 Sekunden soll das wiederholt werden, dann nach 6 Sekunden und dann nach 3 Sekunden (=> aggresiv). Das Script ist im Prinzip lauffähig, jedoch sind die Intervalle gleich. Kennt da jemand eine Vorgehensweise, den Intervall zu verändern?

      function loop1(){
          doAnything(counter);
          Intervall = setInterval(async () => {
              if (counter > 0) {
                  counter = (typeof counter === 'number' ? counter : 0) -1;
                  //log(counter);
                  doAnything(counter);
                  } else {
                      (() => { if (Intervall) { clearInterval(Intervall); Intervall = null; }})();
                      log('Fertig');
                  }
          }, counter * 3000);
          //
      }
      // 
      function doAnything(nr){
          log(`Moep [${nr}]`);
      }
      
      CodierknechtC Online
      CodierknechtC Online
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von Codierknecht
      #2

      @rene55
      Vielleicht so?

      function doSomething(delay) {
          if (delay > 0) {
              setTimeout(function() {
                  console.log('Leg los ...');
                  delay -= 3000;
                  doSomething(delay);
              }, delay);
          };
      }
      
      console.log('Leg los ...');
      doSomething(9000);
      

      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

      Proxmox 9.1.1 LXC|8 GB|Core i7-6700
      HmIP|ZigBee|Tasmota|Unifi
      Zabbix Certified Specialist
      Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

      Rene55R 1 Antwort Letzte Antwort
      1
      • Rene55R Rene55

        Ich brauche/suche ein Script (evtl. auch Blockly) mit dem ich folgendes erreichen kann: Es wird ein Loop zu einer bestimmten Uhrzeit angestossen. Dann soll sofort etwas getan (Ansage, Nachricht, etc) werden, nach 9 Sekunden soll das wiederholt werden, dann nach 6 Sekunden und dann nach 3 Sekunden (=> aggresiv). Das Script ist im Prinzip lauffähig, jedoch sind die Intervalle gleich. Kennt da jemand eine Vorgehensweise, den Intervall zu verändern?

        function loop1(){
            doAnything(counter);
            Intervall = setInterval(async () => {
                if (counter > 0) {
                    counter = (typeof counter === 'number' ? counter : 0) -1;
                    //log(counter);
                    doAnything(counter);
                    } else {
                        (() => { if (Intervall) { clearInterval(Intervall); Intervall = null; }})();
                        log('Fertig');
                    }
            }, counter * 3000);
            //
        }
        // 
        function doAnything(nr){
            log(`Moep [${nr}]`);
        }
        
        bahnuhrB Online
        bahnuhrB Online
        bahnuhr
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #3

        @rene55

        Mach doch einfach 3 x timeout.
        Oder ich habe dich nicht verstanden.

        setTimeout(function() {
                        // tue was 1
        }, 9000);   
        setTimeout(function() {
                        // tue was 2
        }, 15000);   
        setTimeout(function() {
                        // tue was 3
        }, 18000);   
        
        

        Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
        Danke.
        gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
        ScreenToGif :https://www.screentogif.com/downloads.html

        Rene55R 1 Antwort Letzte Antwort
        0
        • CodierknechtC Codierknecht

          @rene55
          Vielleicht so?

          function doSomething(delay) {
              if (delay > 0) {
                  setTimeout(function() {
                      console.log('Leg los ...');
                      delay -= 3000;
                      doSomething(delay);
                  }, delay);
              };
          }
          
          console.log('Leg los ...');
          doSomething(9000);
          
          Rene55R Offline
          Rene55R Offline
          Rene55
          schrieb am zuletzt editiert von
          #4

          @codierknecht Könnte klappen, ist schon mal dynamisch.

          Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
          ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
          Wetterstation: Froggit WH3000SE V1.6.6

          CodierknechtC 1 Antwort Letzte Antwort
          0
          • bahnuhrB bahnuhr

            @rene55

            Mach doch einfach 3 x timeout.
            Oder ich habe dich nicht verstanden.

            setTimeout(function() {
                            // tue was 1
            }, 9000);   
            setTimeout(function() {
                            // tue was 2
            }, 15000);   
            setTimeout(function() {
                            // tue was 3
            }, 18000);   
            
            
            Rene55R Offline
            Rene55R Offline
            Rene55
            schrieb am zuletzt editiert von
            #5

            @bahnuhr Ja schon richtig verstanden. Ich wollte es nur 'elegant' haben.

            Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
            ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
            Wetterstation: Froggit WH3000SE V1.6.6

            1 Antwort Letzte Antwort
            0
            • Rene55R Rene55

              @codierknecht Könnte klappen, ist schon mal dynamisch.

              CodierknechtC Online
              CodierknechtC Online
              Codierknecht
              Developer Most Active
              schrieb am zuletzt editiert von
              #6

              @rene55
              Ich rate mal: Du willst damit etwas ausgeben und Deine Familie terrorisieren?
              Nach dem Motto: "Hömma du Vollhorst, mach endlich datt Fenster zu!!!" :grin: :grin: :grin:

              Die Differenz (3000) könnte man auch noch dynamisch der Funktion als Parameter mitgeben.

              Hoffentlich verprügelt Dich niemand ;-)

              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

              Proxmox 9.1.1 LXC|8 GB|Core i7-6700
              HmIP|ZigBee|Tasmota|Unifi
              Zabbix Certified Specialist
              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

              Rene55R 1 Antwort Letzte Antwort
              0
              • Rene55R Rene55

                Ich brauche/suche ein Script (evtl. auch Blockly) mit dem ich folgendes erreichen kann: Es wird ein Loop zu einer bestimmten Uhrzeit angestossen. Dann soll sofort etwas getan (Ansage, Nachricht, etc) werden, nach 9 Sekunden soll das wiederholt werden, dann nach 6 Sekunden und dann nach 3 Sekunden (=> aggresiv). Das Script ist im Prinzip lauffähig, jedoch sind die Intervalle gleich. Kennt da jemand eine Vorgehensweise, den Intervall zu verändern?

                function loop1(){
                    doAnything(counter);
                    Intervall = setInterval(async () => {
                        if (counter > 0) {
                            counter = (typeof counter === 'number' ? counter : 0) -1;
                            //log(counter);
                            doAnything(counter);
                            } else {
                                (() => { if (Intervall) { clearInterval(Intervall); Intervall = null; }})();
                                log('Fertig');
                            }
                    }, counter * 3000);
                    //
                }
                // 
                function doAnything(nr){
                    log(`Moep [${nr}]`);
                }
                
                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                @rene55 sagte: soll sofort etwas getan (Ansage, Nachricht, etc) werden, nach 9 Sekunden soll das wiederholt werden, dann nach 6 Sekunden und dann nach 3 Sekunden

                Da es nach Blockly generiertem Code aussieht, eine Blockly-Version:

                Blockly_temp.JPG

                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

                Rene55R 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @rene55 sagte: soll sofort etwas getan (Ansage, Nachricht, etc) werden, nach 9 Sekunden soll das wiederholt werden, dann nach 6 Sekunden und dann nach 3 Sekunden

                  Da es nach Blockly generiertem Code aussieht, eine Blockly-Version:

                  Blockly_temp.JPG

                  Rene55R Offline
                  Rene55R Offline
                  Rene55
                  schrieb am zuletzt editiert von
                  #8

                  @paul53 Das wird wohl der richtige Ansatz für mich werden! Danke.
                  Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                  Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                  ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                  Wetterstation: Froggit WH3000SE V1.6.6

                  CodierknechtC paul53P 2 Antworten Letzte Antwort
                  0
                  • Rene55R Rene55

                    @paul53 Das wird wohl der richtige Ansatz für mich werden! Danke.
                    Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                    CodierknechtC Online
                    CodierknechtC Online
                    Codierknecht
                    Developer Most Active
                    schrieb am zuletzt editiert von
                    #9

                    @rene55 sagte in Javascript: agressive Intervalle:

                    Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                    Weil z.B. die Callbacks von kaum jemandem so geschrieben würden ;-)

                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                    Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                    HmIP|ZigBee|Tasmota|Unifi
                    Zabbix Certified Specialist
                    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                    Rene55R 1 Antwort Letzte Antwort
                    0
                    • CodierknechtC Codierknecht

                      @rene55
                      Ich rate mal: Du willst damit etwas ausgeben und Deine Familie terrorisieren?
                      Nach dem Motto: "Hömma du Vollhorst, mach endlich datt Fenster zu!!!" :grin: :grin: :grin:

                      Die Differenz (3000) könnte man auch noch dynamisch der Funktion als Parameter mitgeben.

                      Hoffentlich verprügelt Dich niemand ;-)

                      Rene55R Offline
                      Rene55R Offline
                      Rene55
                      schrieb am zuletzt editiert von
                      #10

                      @codierknecht Fast gut geraten. Es soll eine Ansage werden dass ICH die Einnahme von Tabletten nicht vergesse. Die drei Sekunden sind hier natürlich zu Testzwecken. Werden dann wohl so ca. 6 Minuten werden. Hinzu kommt dannnoch die Möglichkeit (irgendein Taster), die Ansagen abzubrechen, wenn ich meine Pillen genommen habe.

                      Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                      ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                      Wetterstation: Froggit WH3000SE V1.6.6

                      1 Antwort Letzte Antwort
                      0
                      • CodierknechtC Codierknecht

                        @rene55 sagte in Javascript: agressive Intervalle:

                        Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                        Weil z.B. die Callbacks von kaum jemandem so geschrieben würden ;-)

                        Rene55R Offline
                        Rene55R Offline
                        Rene55
                        schrieb am zuletzt editiert von
                        #11

                        @codierknecht sagte in Javascript: agressive Intervalle:

                        Callbacks

                        Wie schreibt man die denn 'richtig'?

                        Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                        ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                        Wetterstation: Froggit WH3000SE V1.6.6

                        CodierknechtC 1 Antwort Letzte Antwort
                        0
                        • Rene55R Rene55

                          @paul53 Das wird wohl der richtige Ansatz für mich werden! Danke.
                          Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

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

                          @rene55 sagte: Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                          Im ursprünglichen Code sind Zeilen 5 und 9 typische Blockly-Konstrukte, die man als Javascript-Programmierer i.d.R. so nicht schreiben würde.

                          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

                          Rene55R 1 Antwort Letzte Antwort
                          1
                          • paul53P paul53

                            @rene55 sagte: Woran kannst du erkennen, dass es ein von Blockly erzeugter Code ist?

                            Im ursprünglichen Code sind Zeilen 5 und 9 typische Blockly-Konstrukte, die man als Javascript-Programmierer i.d.R. so nicht schreiben würde.

                            Rene55R Offline
                            Rene55R Offline
                            Rene55
                            schrieb am zuletzt editiert von Rene55
                            #13

                            @paul53 Ja, besonders Zeile 9 hätte ich aus meinem Hirn so nicht hinbekommen!

                            Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                            ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                            Wetterstation: Froggit WH3000SE V1.6.6

                            1 Antwort Letzte Antwort
                            0
                            • Rene55R Rene55

                              @codierknecht sagte in Javascript: agressive Intervalle:

                              Callbacks

                              Wie schreibt man die denn 'richtig'?

                              CodierknechtC Online
                              CodierknechtC Online
                              Codierknecht
                              Developer Most Active
                              schrieb am zuletzt editiert von
                              #14

                              @rene55 sagte in [gelöst] Javascript: agressive Intervalle:

                              Wie schreibt man die denn 'richtig'?

                              Die sind ja nicht falsch. Aber die würden die meisten (oder zumindest so einige) Programmierer wohl etwas anders formulieren.
                              Wie @paul53 schon schreibt, ist auch gerade das Dekrimieren des Counter so "typisch Blockly".

                                  if (counter) {
                                      counter--;
                                      doAnything(counter);
                                  } else {
                                      if (Intervall) { clearInterval(Intervall); Intervall = null; };
                                      log('Fertig');
                                  }
                              

                              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                              Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                              HmIP|ZigBee|Tasmota|Unifi
                              Zabbix Certified Specialist
                              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                              paul53P 1 Antwort Letzte Antwort
                              0
                              • CodierknechtC Codierknecht

                                @rene55 sagte in [gelöst] Javascript: agressive Intervalle:

                                Wie schreibt man die denn 'richtig'?

                                Die sind ja nicht falsch. Aber die würden die meisten (oder zumindest so einige) Programmierer wohl etwas anders formulieren.
                                Wie @paul53 schon schreibt, ist auch gerade das Dekrimieren des Counter so "typisch Blockly".

                                    if (counter) {
                                        counter--;
                                        doAnything(counter);
                                    } else {
                                        if (Intervall) { clearInterval(Intervall); Intervall = null; };
                                        log('Fertig');
                                    }
                                
                                paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #15

                                @codierknecht
                                Da der Teil innerhalb der Intervall-Callback-Funktion ausgeführt wird, kann man sich die Prüfung und das Rücksetzen auf null sparen.

                                    if (counter > 0) {
                                        counter--;
                                        doAnything(counter);
                                    } else {
                                        clearInterval(Intervall);
                                        log('Fertig');
                                    }
                                

                                Die Prüfung "counter > 0" ist sinnvoll, wenn nicht garantiert werden kann, dass counter mit einer positiven ganzen Zahl initialisiert wurde.

                                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

                                CodierknechtC 1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @codierknecht
                                  Da der Teil innerhalb der Intervall-Callback-Funktion ausgeführt wird, kann man sich die Prüfung und das Rücksetzen auf null sparen.

                                      if (counter > 0) {
                                          counter--;
                                          doAnything(counter);
                                      } else {
                                          clearInterval(Intervall);
                                          log('Fertig');
                                      }
                                  

                                  Die Prüfung "counter > 0" ist sinnvoll, wenn nicht garantiert werden kann, dass counter mit einer positiven ganzen Zahl initialisiert wurde.

                                  CodierknechtC Online
                                  CodierknechtC Online
                                  Codierknecht
                                  Developer Most Active
                                  schrieb am zuletzt editiert von
                                  #16

                                  @paul53 sagte in [gelöst] Javascript: agressive Intervalle:

                                  kann man sich die Prüfung und das Rücksetzen auf null sparen

                                  ... auch das ;-)

                                  "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                                  Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                                  HmIP|ZigBee|Tasmota|Unifi
                                  Zabbix Certified Specialist
                                  Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                  Rene55R 1 Antwort Letzte Antwort
                                  0
                                  • CodierknechtC Codierknecht

                                    @paul53 sagte in [gelöst] Javascript: agressive Intervalle:

                                    kann man sich die Prüfung und das Rücksetzen auf null sparen

                                    ... auch das ;-)

                                    Rene55R Offline
                                    Rene55R Offline
                                    Rene55
                                    schrieb am zuletzt editiert von
                                    #17

                                    @codierknecht @paul53 Danke euch beiden - wieder was gelernt :blush:

                                    Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
                                    ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
                                    Wetterstation: Froggit WH3000SE V1.6.6

                                    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

                                    773

                                    Online

                                    32.5k

                                    Benutzer

                                    81.7k

                                    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