Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    8
    1
    895

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.5k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    5.8k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
9 Beiträge 2 Kommentatoren 823 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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

      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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

            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: Asus PN 42 / N100 / 8 GB / 500 GB; Proxmox mit 2 VM (iob / openCCU)

                  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

                    Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                    Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                    Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                    Registrieren Anmelden
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    244

                    Online

                    33.0k

                    Benutzer

                    83.5k

                    Themen

                    1.3m

                    Beiträge
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                    ioBroker Community 2014-2026
                    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