Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Code Optimierung bei 6 Timern - wie

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    12
    2
    251

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

[gelöst] Code Optimierung bei 6 Timern - wie

[gelöst] Code Optimierung bei 6 Timern - wie

Scheduled Pinned Locked Moved Skripten / Logik
9 Posts 2 Posters 720 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • etvE Offline
    etvE Offline
    etv
    wrote on last edited by
    #1

    Liebe Leute,

    ich hab wiedermal einen "einfach gestrickten" Code von mir, der mit einer neuen Anwendung nun an seine Grenzen stößt und ich nicht mehr weiter weiß.

    Der unten angeführte Code macht nichts anderes, als nach 5, 6,7 8, 9 und 10 Minuten die Rollläden immer ein Stück weiter nach obenm zu stellen iund so im Zimmer langsam hell zu machen.

    ! if ((getState(idLuxmeter).val >= 10 ) && (getState(idRollladenSZ).val === 0)){ var timer1 = null; var timer2 = null; var timer3 = null; var timer4 = null; var timer5 = null; var timer6 = null; if(timer1) clearTimeout(timer1); timer1 = setTimeout(function() {setState(idRollladenSZ, 13)}, 300000); if(timer2) clearTimeout(timer2); timer2 = setTimeout(function() {setState(idRollladenSZ, 23)}, 360000); if(timer3) clearTimeout(timer3); timer3 = setTimeout(function() {setState(idRollladenSZ, 35)}, 420000); if(timer4) clearTimeout(timer4); timer4 = setTimeout(function() {setState(idRollladenSZ, 52)}, 480000); if(timer5) clearTimeout(timer5); timer5 = setTimeout(function() {setState(idRollladenSZ, 70)}, 540000); if(timer6) clearTimeout(timer6); timer6 = setTimeout(function() {setState(idRollladenSZ, 100)}, 600000); } !

    Nun möchte ich das einerseits vereinfachen und wieder a bisserl was lernen, andererseits aber eine Funktion einführen, die die Timer alle stoppt, sodern die Rollladen NICHT auf der eigentlich nun vorgegebenen Position stehen.

    Also, z.B: es startet mit dem ersten Timer und der Rollladen geht ein Stück auf - nun möchte ich das aber nicht und stoppe die Bewegung am Schalter + stelle ihn wieder runter auf geschlossen.

    Der nächste Timer soll somit immer nur dann ausgeführt werden, wenn der Rollladen an der Position des vorigen Timers steht, sonst nicht….

    :?: :?: :?: wie geht das sinnvoll?

    Ich würde die einzelnen Timer verschachteln und so immer nur den nächsten Starten wenn der vorige abgelaufen ist, aber dann hab ich ja mit dem If's 6 Co "Hunderte" Verschachtelungen in geschwungenen Klammern...das muss ja irgendwie einfacher gehen, oder?

    Liebe Grüße

    tom

    …ist schon sehr lange begeisterter ioBroker Nutzer! 1x zu Hause und 1x auf der Alm. ioBroker ist das 'Hirn' des Smarthome und steuert HomeMatic und Shellys, loggt was so passiert, zeigt es auf Tabletts schön an und ermöglicht mir via Cloud Adapter den Fernzugriff...

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      Dafür sind die Funktionen setInterval() und clearInterval() in Zusammenhang mit einer Zählvariablen besser geeignet.

      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

      1 Reply Last reply
      0
      • etvE Offline
        etvE Offline
        etv
        wrote on last edited by
        #3

        @paul53:

        Dafür sind die Funktionen setInterval() und clearInterval() in Zusammenhang mit einer Zählvariablen besser geeignet. `

        …perfekt, danke! Werd' ich mir anschauen.

        Liebe Grüße

        Tom

        …ist schon sehr lange begeisterter ioBroker Nutzer! 1x zu Hause und 1x auf der Alm. ioBroker ist das 'Hirn' des Smarthome und steuert HomeMatic und Shellys, loggt was so passiert, zeigt es auf Tabletts schön an und ermöglicht mir via Cloud Adapter den Fernzugriff...

        1 Reply Last reply
        0
        • etvE Offline
          etvE Offline
          etv
          wrote on last edited by
          #4

          Liebe Leute,

          irgendwie kappier ich die Funktion von setInterval nicht ganz - ich versuche die Dauer variabel zu gestalten, aber egal was für einen Wert ich im Objekt stehen hab, er macht immer den ersten Wert = 60 Sekunden….

          ! ````
          setInterval(function(Anwesenheit_Timer_Tom) {

          helper  = getState(id_Tom_count).val;
          .......
          
          .......
          
          .......
          
          .......
                  setState(id_Tom_Intervall, Intervall);
              }
          });
          

          }, getState("javascript.0.Anwesenheit.Tom.Telefon_Tom_Intervall"/Telefon_Tom_Intervall/).val);

          ! ````

          Wie bringe ich ihn dazu diesen Wert in der letzten Zeile auch tatsächlich immer auszulesen?

          Liebe Grüße

          tom

          …ist schon sehr lange begeisterter ioBroker Nutzer! 1x zu Hause und 1x auf der Alm. ioBroker ist das 'Hirn' des Smarthome und steuert HomeMatic und Shellys, loggt was so passiert, zeigt es auf Tabletts schön an und ermöglicht mir via Cloud Adapter den Fernzugriff...

          1 Reply Last reply
          0
          • paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #5

            @etv:

            nach 5, 6,7 8, 9 und 10 Minuten die Rollläden immer ein Stück weiter nach obenm zu stellen `
            Die Funktion kann man mit einer festen Intervallzeit von 1 Minute realisieren.

            var timer = null;
            var cnt = 0;
            var pos = 0;
            
            function rollosHoch() {
               cnt = 0;
               pos = getState(idRollladenSZ).val;
               if (getState(idLuxmeter).val >= 10 && pos === 0) {
                  timer = setInterval(function() {
                     cnt++;
                     if(cnt === 5) pos = 13;
                     if(cnt === 6) pos = 23;
                     if(cnt === 7) pos = 35;
                     if(cnt === 8) pos = 52;
                     if(cnt === 9) pos = 70;
                     if(cnt === 10) {
                        pos = 100;
                        clearInterval(timer);
                        timer = null;
                     }
                     if(pos) setState(idRollladenSZ, pos);  
                  }, 60000); // 1 Minute
               }
            }
            

            @etv:

            stoppe die Bewegung am Schalter + stelle ihn wieder runter auf geschlossen. `
            Beim Stopp per Schalter wird auch der Timer gestoppt.

               if(timer) {
                  clearInterval(timer);
                  timer = null;
               }
            

            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

            1 Reply Last reply
            0
            • etvE Offline
              etvE Offline
              etv
              wrote on last edited by
              #6

              wow….. 😄

              Es ist immer ein Wahnsinn, wenn ich eure Scripte sehe - da muss ich dann erst mal 5 Minuten drüber nachdenken warum das überhaupt geht 😄 😄 😄

              Danke für den Input - bau ich gleich um!

              Liebe Grüße

              tom

              …ist schon sehr lange begeisterter ioBroker Nutzer! 1x zu Hause und 1x auf der Alm. ioBroker ist das 'Hirn' des Smarthome und steuert HomeMatic und Shellys, loggt was so passiert, zeigt es auf Tabletts schön an und ermöglicht mir via Cloud Adapter den Fernzugriff...

              1 Reply Last reply
              0
              • etvE Offline
                etvE Offline
                etv
                wrote on last edited by
                #7

                Liebe Leute,

                jetzt muss ich da nochmal was nachfragen zu dem Thema setInterval.

                Wie muss der Aufbau der Funktion setInterval korrekt aussehen, wenn das Script bei jedem Ablauf des Intervalls die vorige setInterval Funktion wieder löscht und "sich selbst" erneut startet.

                Also in etwa so:

                timer = setInterval(function() {

                ….die Funktion läuft

                ...

                ...

                clearInterval(timer);

                timer = null;

                }, 60000);

                ...und jetzt wieder von vorne starten aber mit anderem Intervall???

                Liebe Grüße

                tom

                …ist schon sehr lange begeisterter ioBroker Nutzer! 1x zu Hause und 1x auf der Alm. ioBroker ist das 'Hirn' des Smarthome und steuert HomeMatic und Shellys, loggt was so passiert, zeigt es auf Tabletts schön an und ermöglicht mir via Cloud Adapter den Fernzugriff...

                1 Reply Last reply
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by
                  #8

                  @etv:

                  wenn das Script bei jedem Ablauf des Intervalls die vorige setInterval Funktion wieder löscht und "sich selbst" erneut startet. `
                  Nach jeder Intervalldauer stoppen entspricht der Funktion setTimeout(). setIntervall() verwendet man, wenn mehrere gleich lange Intervalle bis zu einer Abbruchbedingung ausgeführt werden sollen.

                  function mache_verzoegert(delay) { // delay in s
                    setTimeout(function() {
                       // Hier die Aktion
                       let delay_neu = // Berechnung neue Verzögerungszeit;
                       if(!Abbruchbedingung) mache_verzoegert(delay_neu); // Schleife soll nicht ewig laufen !
                    }, 1000 * delay);
                  }
                  
                  // Erster Aufruf mit 1 Minute Verzögerung
                  mache_verzoegert(60);
                  
                  

                  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

                  1 Reply Last reply
                  0
                  • etvE Offline
                    etvE Offline
                    etv
                    wrote on last edited by
                    #9

                    @paul53:

                    @etv:

                    wenn das Script bei jedem Ablauf des Intervalls die vorige setInterval Funktion wieder löscht und "sich selbst" erneut startet. `
                    Nach jeder Intervalldauer stoppen entspricht der Funktion setTimeout(). setIntervall() verwendet man, wenn mehrere gleich lange Intervalle bis zu einer Abbruchbedingung ausgeführt werden sollen.

                    function mache_verzoegert(delay) { // delay in s
                      setTimeout(function() {
                         // Hier die Aktion
                         let delay_neu = // Berechnung neue Verzögerungszeit;
                         if(!Abbruchbedingung) mache_verzoegert(delay_neu); // Schleife soll nicht ewig laufen !
                      }, 1000 * delay);
                    }
                    
                    // Erster Aufruf mit 1 Minute Verzögerung
                    mache_verzoegert(60);
                    
                    ```` `  
                    

                    herzlichen Dank, dann hab ich da Äpfel und Birnen vermischt 😄

                    Liebe Grüße

                    tom

                    PS: warum gibt's im Forum keine "DANKE"-Button mehr oder find' ich ihn nur nicht mehr?? :?:

                    …ist schon sehr lange begeisterter ioBroker Nutzer! 1x zu Hause und 1x auf der Alm. ioBroker ist das 'Hirn' des Smarthome und steuert HomeMatic und Shellys, loggt was so passiert, zeigt es auf Tabletts schön an und ermöglicht mir via Cloud Adapter den Fernzugriff...

                    1 Reply Last reply
                    0
                    Reply
                    • Reply as topic
                    Log in to reply
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    99

                    Online

                    32.4k

                    Users

                    81.3k

                    Topics

                    1.3m

                    Posts
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    ioBroker Community 2014-2025
                    logo
                    • Login

                    • Don't have an account? Register

                    • Login or register to search.
                    • First post
                      Last post
                    0
                    • Recent
                    • Tags
                    • Unread 0
                    • Categories
                    • Unreplied
                    • Popular
                    • GitHub
                    • Docu
                    • Hilfe