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] Loeschen von setStateDelayed Ausschaltplanung moeglich ?

NEWS

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

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

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

[gelöst] Loeschen von setStateDelayed Ausschaltplanung moeglich ?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
15 Beiträge 6 Kommentatoren 3.6k 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.
  • L Offline
    L Offline
    looxer01
    schrieb am zuletzt editiert von
    #1

    Hi,

    ich habe ein Problem mit SetDelay. Ich versuche eine Planung fuer das Ausschalten einer Lampe zu loeschen.

    Der Delay scheint aber nur fuer die Einschaltverzoegerung loeschbar zu sein und nicht fuer das Ausschalten der Lampe.

    Hier ist der Case:

      setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",true, 0);    // Schalte ohne Verzoegerung ein
      setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",false,30000);   // schalte nach 30 Sekunden aus
      setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",true,0,true);    // Schalte die  Lampe sofort an und loesche die Planung
    
    

    Wenn das Script abläuft, dann wird die Lampe nach 30 Sekunden ausgeschaltet, egal was ich im dritten Statement schreibe.

    Gibt es evt noch eine andere Möglichkeit das Ausschalten zu verhindern ?

    vG Looxer

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      Hallo Looxer,

      ~~@[url=https://github.com/iobroker/ioBroker.javascript/blob/master/README.md#setstatedelayed:~~

      Javascript Doku"]

      setStateDelayed('Kitchen.Light.Lamp', true,  1000);// Switch ON the light in the kitchen in one second
      setStateDelayed('Kitchen.Light.Lamp', false, 5000, false, function () { // Switch OFF the light in the kitchen in 5 seconds and let first timeout run. 
          log('Lamp is OFF');
      });
      ```` `  
      

      wenn ich die Doku hier richtig verstehe, dann ist das zweite 'false' in Zeile 2 für das Beenden des Timeouts aus Zeile 1 verantwortlich.

      Also müsste Dein Code doch so sein:

      setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",true, 0);    // Schalte ohne Verzoegerung ein
       setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",false,30000);   // schalte nach 30 Sekunden aus
       setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",true,0,false);    // Schalte die  Lampe sofort an und loesche die Planung
      
      

      Gruß,

      Pix

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • L Offline
        L Offline
        looxer01
        schrieb am zuletzt editiert von
        #3

        Hi Pix,

        der Hinweis sagt "let timeout run" also vermute ich, dass der timeout nicht gelöscht wird, wenn in Zeile 2 der Docu ein false steht.

        Aber egal wie -true oder false - hab alles probiert. Die Lampe geht aus, was sie doch eigentlich nicht tun sollte ?

        Eigenartig ist auch, dass das ganze mit setState auch nicht funzt:

        setState(IDGruppe12,true);    // Schalte ein
        setTimeout(function (){                                                                             
             setState(IDGruppe12,false);   }, 30000);                                                    
        clearTimeout (IDGruppe12);   / loesche den timeout
        
        

        Könnte es ein Problem mit der JS implementierung geben ?

        vG Looxer

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          clearTimeout muss auf eine Timer-Variable angewendet werden:

          setState(IDGruppe12,true);    // Schalte ein
          var timer = setTimeout(function (){                                                                             
               setState(IDGruppe12,false);   }, 30000);                                                   
          clearTimeout (timer);   / loesche den timeout
          
          

          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
          • blauholstenB Offline
            blauholstenB Offline
            blauholsten
            Developer
            schrieb am zuletzt editiert von
            #5

            @looxer01:

            Hi Pix,

            der Hinweis sagt "let timeout run" also vermute ich, dass der timeout nicht gelöscht wird, wenn in Zeile 2 der Docu ein false steht.

            Aber egal wie -true oder false - hab alles probiert. Die Lampe geht aus, was sie doch eigentlich nicht tun sollte ?

            Eigenartig ist auch, dass das ganze mit setState auch nicht funzt:

            setState(IDGruppe12,true);    // Schalte ein
            setTimeout(function (){                                                                             
                 setState(IDGruppe12,false);   }, 30000);                                                    
            clearTimeout (IDGruppe12);   / loesche den timeout
            
            

            Könnte es ein Problem mit der JS implementierung geben ?

            vG Looxer `

            bin zwar Anfänger, aber ich denke du musst eine Variable dafür verwenden bzw übergeben.

            EDIT: War jemand schneller!

            Entwickler vom: - Viessman Adapter
            - Alarm Adapter

            1 Antwort Letzte Antwort
            0
            • L Offline
              L Offline
              looxer01
              schrieb am zuletzt editiert von
              #6

              jo und so stehts in der Docu:

              myVar = setTimeout(function, milliseconds);
              clearTimeout(myVar);
              
              

              Hab ich wohl nicht ernst genug genommen :o

              Danke euch

              1 Antwort Letzte Antwort
              0
              • L Offline
                L Offline
                looxer01
                schrieb am zuletzt editiert von
                #7

                …also ich möchte gerne ncohmal auf das Thema zurückkommen.

                Ich habe jetzt versucht setStateDelayed und setTimeout miteinander zu verbinden was auch funktioniert.

                z.B.

                Schalte Lampe ein in 10 Sekunden.

                setStateDelayed(IDGruppe12,true, 10000);
                
                

                Schalte Lampe aus in 30 Sekunden

                var timer = setTimeout(function (){                                                                             
                   setState(IDGruppe12,false);   }, 30000);  
                
                

                Ich kann die Ausschaltzeit killen durch

                clearTimeout (timer);
                
                

                Allerdings schaffe ich es nicht die Einschaltverzoergerung zu loeschen. Nach Doku und wie Pix ja auch sagt sollte das mit false moeglich sein.

                Ich habe true and false getestet mit dem Coding unten. Die Einschaltverzoegerung wird aber nicht gelöscht.

                setStateDelayed(IDGruppe12,true, 15000);   		// Licht an in  15 Sekunden
                setStateDelayed(IDGruppe12,true, 10000,false);		// Licht an in 10 Sekunden und loesche 15 Sekunden
                setStateDelayed(IDGruppe12,false,11000);			// Licht aus in 11 Sekunden
                
                

                bei dem code könnte man erwarten, dass das Licht nach dem Ausschalten nicht mehr eingeschaltet wird.

                Leider ist das so nicht Das Licht wird nach 15 Sekunden wieder eingeschaltet.

                Mache ich da noch was falsch ?

                Oder gibt es noch einen anderen Weg ?

                vG Looxer

                1 Antwort Letzte Antwort
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  schrieb am zuletzt editiert von
                  #8

                  @looxer01:

                  Hi,

                  ich habe ein Problem mit SetDelay. Ich versuche eine Planung fuer das Ausschalten einer Lampe zu loeschen.

                  Der Delay scheint aber nur fuer die Einschaltverzoegerung loeschbar zu sein und nicht fuer das Ausschalten der Lampe.

                  Hier ist der Case:

                    setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",true, 0);    // Schalte ohne Verzoegerung ein
                    setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",false,30000);   // schalte nach 30 Sekunden aus
                    setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",true,0,true);    // Schalte die  Lampe sofort an und loesche die Planung
                  
                  

                  Wenn das Script abläuft, dann wird die Lampe nach 30 Sekunden ausgeschaltet, egal was ich im dritten Statement schreibe.

                  Gibt es evt noch eine andere Möglichkeit das Ausschalten zu verhindern ?

                  vG Looxer `
                  Ich denke, das ist ein Bug und es sollte gehen. Muss schauen.

                  Ich kann noch zusätzlich noch so machen, dass die Funktion Händler auf timer zurück gibt und man kann die einfach mit clearTimer löschen.

                  1 Antwort Letzte Antwort
                  0
                  • L Offline
                    L Offline
                    looxer01
                    schrieb am zuletzt editiert von
                    #9

                    Hi Bluefox,

                    @looxer01:

                    ch kann noch zusätzlich noch so machen, dass die Funktion Händler auf timer zurück gibt und man kann die einfach mit clearTimer löschen. `

                    ich bin nicht sicher, ob ich das richtig verstanden habe aber ich denke du meinst die javascript Funktion clearTimeout() ?.

                    Die löscht aber nicht die Einschaltverzögerung - oder doch ?

                    vG Looxer

                    1 Antwort Letzte Antwort
                    0
                    • BluefoxB Offline
                      BluefoxB Offline
                      Bluefox
                      schrieb am zuletzt editiert von
                      #10

                      @looxer01:

                      Hi,

                      ich habe ein Problem mit SetDelay. Ich versuche eine Planung fuer das Ausschalten einer Lampe zu loeschen.

                      Der Delay scheint aber nur fuer die Einschaltverzoegerung loeschbar zu sein und nicht fuer das Ausschalten der Lampe.

                      Hier ist der Case:

                        setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",true, 0);    // Schalte ohne Verzoegerung ein
                        setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",false,30000);   // schalte nach 30 Sekunden aus
                        setStateDelayed("hm-rpc.0.IEQ0xxxxxx.1.STATE",true,0,true);    // Schalte die  Lampe sofort an und loesche die Planung
                      
                      

                      Wenn das Script abläuft, dann wird die Lampe nach 30 Sekunden ausgeschaltet, egal was ich im dritten Statement schreibe.

                      Gibt es evt noch eine andere Möglichkeit das Ausschalten zu verhindern ?

                      vG Looxer `
                      War tatsächlich ein Fehler drin. Habe gefixt.

                      Es gibt jetzt auch clearStateDelayed funktion

                      https://github.com/ioBroker/ioBroker.ja … atedelayed
                      5652_ausgabe.jpg
                      5652_html_widget.jpg
                      5652_log.jpg
                      5652_objekte.jpg
                      5652_script.jpg

                      1 Antwort Letzte Antwort
                      0
                      • L Offline
                        L Offline
                        looxer01
                        schrieb am zuletzt editiert von
                        #11

                        Hi,

                        vielen Dank für den Fix. clearStateDelayed hilft mir richtig weiter.

                        Allerdings habe ich jetzt noch ein Problem mit dem verzoegerten Einschalten, wenn anschliessend eine Ausschaltplanung folgt.

                        Dann wird nämlich gar nicht erst eingeschaltet. Ich denke, dass das ein Fehler ist

                        Beispiel:

                        setStateDelayed(IDGruppe13,true, 10000); // Schalte ein

                        setStateDelayed(IDGruppe13,false,30000); // schalte nach 30 Sekunden aus

                        • In diesem Fall wird die Lampe gar nicht erst eingeschaltet.

                        • Falls die Lampe eingeschaltet war, dann wird wie erwartet ausgeschaltet.

                        • Eine Einschaltverzoegerung ohne Ausschaltplanung funktioniert wie erwartet.

                        Es scheint also so, dass mit der Ausschaltplanung die Einschaltplanung geloescht wird.

                        vG Looxer

                        1 Antwort Letzte Antwort
                        0
                        • BluefoxB Offline
                          BluefoxB Offline
                          Bluefox
                          schrieb am zuletzt editiert von
                          #12

                          @looxer01:

                          Hi,

                          vielen Dank für den Fix. clearStateDelayed hilft mir richtig weiter.

                          Allerdings habe ich jetzt noch ein Problem mit dem verzoegerten Einschalten, wenn anschliessend eine Ausschaltplanung folgt.

                          Dann wird nämlich gar nicht erst eingeschaltet. Ich denke, dass das ein Fehler ist

                          Beispiel:

                          setStateDelayed(IDGruppe13,true, 10000); // Schalte ein

                          setStateDelayed(IDGruppe13,false,30000); // schalte nach 30 Sekunden aus

                          • In diesem Fall wird die Lampe gar nicht erst eingeschaltet.

                          • Falls die Lampe eingeschaltet war, dann wird wie erwartet ausgeschaltet.

                          • Eine Einschaltverzoegerung ohne Ausschaltplanung funktioniert wie erwartet.

                          Es scheint also so, dass mit der Ausschaltplanung die Einschaltplanung geloescht wird.

                          vG Looxer > You can clear all running delay for this ID (by default). `

                          
                           setStateDelayed(IDGruppe13,true,  10000);          // Schalte  ein
                           setStateDelayed(IDGruppe13,false, 30000, false);   // schalte nach 30 Sekunden aus
                          
                          
                          1 Antwort Letzte Antwort
                          0
                          • L Offline
                            L Offline
                            looxer01
                            schrieb am zuletzt editiert von
                            #13

                            na, super, das hatte ich gewusst aber irgendwie ausversehen das false geloescht und dann uebersehen.

                            Du hast natürlich recht. Danke dir.

                            vG Looxer

                            1 Antwort Letzte Antwort
                            0
                            • F Offline
                              F Offline
                              Fitti
                              schrieb am zuletzt editiert von
                              #14

                              @paul53:

                              clearTimeout muss auf eine Timer-Variable angewendet werden:

                              setState(IDGruppe12,true);    // Schalte ein
                              var timer = setTimeout(function (){                                                                             
                                   setState(IDGruppe12,false);   }, 30000);                                                   
                              clearTimeout (timer);   / loesche den timeout
                              
                              ```` `  
                              

                              Ich bekomme den clearTimeout nicht hin. Kann es sein, dass es auf zwei unterschiedliche "on" nicht funktioniert?

                              Bei mir läuft trotz eines clears braf weiter. Das sehe ich daran, dass ich einen Zähler um 2 verringere. Ändere ich mein ZählerObject, läuft es doppelt so schnell - manchmal sieht es aus, als ob er dann um 4 reduziert. Ist aber immer nur um 2 , nur zweimal kurz hintereinander

                              Das mache ich:

                              deleteState("javascript.0.EcklichtTimer");  //Aufräumen beim Start: überschreibt dummerweise immer mit null und ist dann keine Zahl mehr.
                              createState("javascript.0.EcklichtTimer", 0, {
                                  type: 'number',
                                  name: 'Ecklicht Timer Rückzähler'
                              });
                              
                              var el1_timer=0;  //extra global definiert
                              
                              // Wenn Bewegung, dann schalte Ecklicht ein, aber nur wenn Ecklicht an war und setzte Timer
                              on({id:"hm-rpc.0.LEQ0112345.1.MOTION"/*Bewegungsmelder Küche NEU:1.MOTION*/,
                                  change: 'ge'
                              }, function () {
                                  clearTimeout(el1_timer);  //Beende späteren Timer, damit die nicht doppelt laufen.
                                  log("Bewegung");
                                  // aber nur wenn Ecklicht auch an war/angehen soll
                                  if (getState("hm-rega.0.3416"/*kueche_Ecklicht_war_an*/).val)  { 
                                      log("Ecklicht war an => Licht wird aktualisiert");
                                      meindingsbums.zone(4).on();  //hier schalte ich was ein -geht
                                      setTimeout(function () {setState("javascript.0.EcklichtTimer",199);},200);   //setze Timer auf 199, 200ms verzögert
                                  }
                              });
                              
                              // Wenn der EcklichTimer gesetzt wurde, dann starte mit dem Runterzählen
                              var mySubscription = on({id:"javascript.0.EcklichtTimer"/*EcklichtTimer*/,
                                  change: 'any'
                              }, function () {
                                  log("Trigger:EcklichtTimer triggerte: " + getState("javascript.0.EcklichtTimer").val);
                                  if (getState("javascript.0.EcklichtTimer").val > 2){
                                      log("Subtrahiere 2: " + getState("javascript.0.EcklichtTimer").val + "-> " + (getState("javascript.0.EcklichtTimer").val-2));
                                      el1_timer = setTimeout(function () {setState("javascript.0.EcklichtTimer", (getState("javascript.0.EcklichtTimer").val-2));}, 2000);
                                  } else {
                                      // Der Timer ist abgelaufen. Schalte Licht aus...
                                      meindingsbums.zone(4).off();  //und aus damit
                                      log("AUs!")
                                  }
                              });
                              

                              Danke wieder im Voraus!

                              Fitti.

                              PS: die var mySubscription = on … habe ich nur noch drinnen, da ich vorher vor hatte die subscription zu beenden. Ist mittlerweile obsolet.

                              "Es wird die Zeit kommen, da ihr euch entscheiden müsst zwischen dem, was richtig ist, und dem, was bequem ist."
                              Plural von Status ist auch Status!

                              1 Antwort Letzte Antwort
                              0
                              • paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #15

                                Timer sind Objekte:

                                var el1_timer=null;
                                

                                Timer sollten vor Wiederverwendung gelöscht werden:

                                ...
                                    log("Bewegung");
                                    // aber nur wenn Ecklicht auch an war/angehen soll
                                    if (getState("hm-rega.0.3416"/*kueche_Ecklicht_war_an*/).val)  {
                                        log("Ecklicht war an => Licht wird aktualisiert");
                                        meindingsbums.zone(4).on();  //hier schalte ich was ein -geht
                                        if(el1_timer) clearTimeout(el1_timer);  //Beende späteren Timer, damit die nicht doppelt laufen.
                                        el1_timer = setTimeout(function () {setState("javascript.0.EcklichtTimer",199);},200);   //setze Timer auf 199, 200ms verzögert
                                    }
                                });
                                
                                // Wenn der EcklichTimer gesetzt wurde, dann starte mit dem Runterzählen
                                var mySubscription = on({id:"javascript.0.EcklichtTimer"/*EcklichtTimer*/,
                                    change: 'any'
                                }, function (dp) {
                                    log("Trigger:EcklichtTimer triggerte: " + dp.state.val);
                                    if (dp.state.val > 2){
                                        log("Subtrahiere 2: " + dp.state.val + "-> " + dp.state.val-2));
                                        if(el1_timer) clearTimeout(el1_timer);
                                        el1_timer = setTimeout(function () {setState("javascript.0.EcklichtTimer", dp.state.val-2));}, 2000);
                                    } else {
                                        // Der Timer ist abgelaufen. Schalte Licht aus...
                                        meindingsbums.zone(4).off();  //und aus damit
                                        log("AUs!")
                                    }
                                });    
                                
                                

                                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
                                Antworten
                                • In einem neuen Thema antworten
                                Anmelden zum Antworten
                                • Älteste zuerst
                                • Neuste zuerst
                                • Meiste Stimmen


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                765

                                Online

                                32.4k

                                Benutzer

                                81.6k

                                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