Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Javascript: agressive Intervalle

    This topic has been deleted. Only users with topic management privileges can see it.
    • Rene55
      Rene55 last edited by 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}]`);
      }
      
      Codierknecht bahnuhr paul53 3 Replies Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @Rene55 last edited by 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);
        
        Rene55 1 Reply Last reply Reply Quote 1
        • bahnuhr
          bahnuhr Forum Testing Most Active @Rene55 last edited by

          @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);   
          
          
          Rene55 1 Reply Last reply Reply Quote 0
          • Rene55
            Rene55 @Codierknecht last edited by

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

            Codierknecht 1 Reply Last reply Reply Quote 0
            • Rene55
              Rene55 @bahnuhr last edited by

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

              1 Reply Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @Rene55 last edited by

                @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!!!" 😁 😁 😁

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

                Hoffentlich verprügelt Dich niemand 😉

                Rene55 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Rene55 last edited by

                  @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

                  Rene55 1 Reply Last reply Reply Quote 0
                  • Rene55
                    Rene55 @paul53 last edited by

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

                    Codierknecht paul53 2 Replies Last reply Reply Quote 0
                    • Codierknecht
                      Codierknecht Developer Most Active @Rene55 last edited by

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

                      Rene55 1 Reply Last reply Reply Quote 0
                      • Rene55
                        Rene55 @Codierknecht last edited by

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

                        1 Reply Last reply Reply Quote 0
                        • Rene55
                          Rene55 @Codierknecht last edited by

                          @codierknecht sagte in Javascript: agressive Intervalle:

                          Callbacks

                          Wie schreibt man die denn 'richtig'?

                          Codierknecht 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Rene55 last edited by 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.

                            Rene55 1 Reply Last reply Reply Quote 1
                            • Rene55
                              Rene55 @paul53 last edited by Rene55

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

                              1 Reply Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @Rene55 last edited by

                                @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');
                                    }
                                
                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @Codierknecht last edited by

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

                                  Codierknecht 1 Reply Last reply Reply Quote 0
                                  • Codierknecht
                                    Codierknecht Developer Most Active @paul53 last edited by

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

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

                                    ... auch das 😉

                                    Rene55 1 Reply Last reply Reply Quote 0
                                    • Rene55
                                      Rene55 @Codierknecht last edited by

                                      @codierknecht @paul53 Danke euch beiden - wieder was gelernt 😊

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      704
                                      Online

                                      31.7k
                                      Users

                                      79.7k
                                      Topics

                                      1.3m
                                      Posts

                                      4
                                      17
                                      357
                                      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