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] Code Optimierung bei 6 Timern - wie

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
9 Beiträge 2 Kommentatoren 720 Aufrufe
  • Ä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.
  • etvE Offline
    etvE Offline
    etv
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • etvE Offline
        etvE Offline
        etv
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        0
        • etvE Offline
          etvE Offline
          etv
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            0
            • etvE Offline
              etvE Offline
              etv
              schrieb am zuletzt editiert von
              #6

              wow….. :D

              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 :D :D :D

              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 Antwort Letzte Antwort
              0
              • etvE Offline
                etvE Offline
                etv
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  0
                  • etvE Offline
                    etvE Offline
                    etv
                    schrieb am zuletzt editiert von
                    #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 :D

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

                    966

                    Online

                    32.4k

                    Benutzer

                    81.5k

                    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