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. JavaScript
  5. (gelöst) setStateDelayed und clearStateSelayed

NEWS

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

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

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

(gelöst) setStateDelayed und clearStateSelayed

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 3 Kommentatoren 440 Aufrufe 2 Watching
  • Ä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
    londo99
    schrieb am zuletzt editiert von londo99
    #1

    Hallo Zusammen

    kann mir jemand sagen warum das Clearstatedelayed nicht funktioniert.

    Beim öffnen eine Fensters wird mit einem setstatedelayed eine Lampe aktiviert und beim vorzeitigen schließen soll das clearstatedelayed die Lampe nicht mehr aktivieren.

    Die If Anweisungen funktionieren, aber egal wie die clearstatedelayed mache, mit variablen in hoch Komma oder ohne.
    Die Lampe leuchte trotzdem auf.

    
    
    var idSayIt  = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement'/*announcement*/; // Hier die entsprechende SayIt Text ID
    var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/;
    var idActor = 'hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/;
    
    on({id:'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/, change:'ne'}, function(obj)
        {
        log('Ausgelöst');
        
        if (getState('hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/).val === true)
            {
                log('If Ausgelöst');
                setStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, true, 30000);
               
       
                //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
            }
        if (getState('hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/).val === false) 
            {
                //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                log('fenster geschlossen vor delayed');
                clearStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/);
                log('fenster geschlossen nach delayed');
               
                setState('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, false);
                 
            }
     
     
     
        });
    
    T 1 Antwort Letzte Antwort
    0
    • L londo99

      Hallo Zusammen

      kann mir jemand sagen warum das Clearstatedelayed nicht funktioniert.

      Beim öffnen eine Fensters wird mit einem setstatedelayed eine Lampe aktiviert und beim vorzeitigen schließen soll das clearstatedelayed die Lampe nicht mehr aktivieren.

      Die If Anweisungen funktionieren, aber egal wie die clearstatedelayed mache, mit variablen in hoch Komma oder ohne.
      Die Lampe leuchte trotzdem auf.

      
      
      var idSayIt  = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement'/*announcement*/; // Hier die entsprechende SayIt Text ID
      var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/;
      var idActor = 'hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/;
      
      on({id:'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/, change:'ne'}, function(obj)
          {
          log('Ausgelöst');
          
          if (getState('hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/).val === true)
              {
                  log('If Ausgelöst');
                  setStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, true, 30000);
                 
         
                  //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
              }
          if (getState('hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/).val === false) 
              {
                  //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                  log('fenster geschlossen vor delayed');
                  clearStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/);
                  log('fenster geschlossen nach delayed');
                 
                  setState('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, false);
                   
              }
       
       
       
          });
      
      T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von ticaki
      #2

      @londo99

      
      var timeout = null;
      var idSayIt  = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement'/*announcement*/; // Hier die entsprechende SayIt Text ID
      var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/;
      var idActor = 'hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/;
      
      on({id:'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/, change:'ne'}, function(obj)
          {
          log('Ausgelöst');
          
          if (obj.state.val)
              {
                  log('If Ausgelöst');
                  timeout = setStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, true, 30000);
                   
                  //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
              }
          else
              {
                  //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                  log('fenster geschlossen vor delayed');
                  if timeout clearStateDelayed('hm-rpc.0.NEQ0773372.1.STATE', timeout/*Haustuer Klingel:1.STATE*/);
                  log('fenster geschlossen nach delayed');
                 
                  setState('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, false);             
              } 
          });
      

      versuche es mal so. obj.state.val beinhaltet das was du mit getState() abfragst und auch den aktuellen Wert.

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      L 1 Antwort Letzte Antwort
      0
      • T ticaki

        @londo99

        
        var timeout = null;
        var idSayIt  = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement'/*announcement*/; // Hier die entsprechende SayIt Text ID
        var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/;
        var idActor = 'hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/;
        
        on({id:'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/, change:'ne'}, function(obj)
            {
            log('Ausgelöst');
            
            if (obj.state.val)
                {
                    log('If Ausgelöst');
                    timeout = setStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, true, 30000);
                     
                    //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
                }
            else
                {
                    //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                    log('fenster geschlossen vor delayed');
                    if timeout clearStateDelayed('hm-rpc.0.NEQ0773372.1.STATE', timeout/*Haustuer Klingel:1.STATE*/);
                    log('fenster geschlossen nach delayed');
                   
                    setState('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, false);             
                } 
            });
        

        versuche es mal so. obj.state.val beinhaltet das was du mit getState() abfragst und auch den aktuellen Wert.

        L Offline
        L Offline
        londo99
        schrieb am zuletzt editiert von
        #3

        @ticaki

        var timeout = null;
        var idSayIt  = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement'/*announcement*/; // Hier die entsprechende SayIt Text ID
        var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/;
        var idActor = 'hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/;
         
        on({id:'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/, change:'ne'}, function(obj)
            {
            log('Ausgelöst');
            
            if (obj.state.val)
                {
                    log('If Ausgelöst');
                    timeout = setStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, true, 30000);
                     
                    //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
                }
            else
                {
                    //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                    log('fenster geschlossen vor delayed');
                    if (timeout) clearStateDelayed('hm-rpc.0.NEQ0773372.1.STATE', timeout/*Haustuer Klingel:1.STATE*/);
                    log('fenster geschlossen nach delayed');
                   
                    setState('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, false);             
                } 
            });
        

        Hi, also das Skript funktioniert, aber clearstatedelayed wird nicht erledigt, die Leuchte geht nach 30sec an, auch wenn das Fenster nach 10 sec geschlossen wird.
        Musste timeout nach dem if im else in Klammern setzten sonst kamen Compiler Fehler, oder läuft das bei dir ohne klammern?

        paul53P T 2 Antworten Letzte Antwort
        0
        • L londo99

          @ticaki

          var timeout = null;
          var idSayIt  = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement'/*announcement*/; // Hier die entsprechende SayIt Text ID
          var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/;
          var idActor = 'hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/;
           
          on({id:'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/, change:'ne'}, function(obj)
              {
              log('Ausgelöst');
              
              if (obj.state.val)
                  {
                      log('If Ausgelöst');
                      timeout = setStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, true, 30000);
                       
                      //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
                  }
              else
                  {
                      //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                      log('fenster geschlossen vor delayed');
                      if (timeout) clearStateDelayed('hm-rpc.0.NEQ0773372.1.STATE', timeout/*Haustuer Klingel:1.STATE*/);
                      log('fenster geschlossen nach delayed');
                     
                      setState('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, false);             
                  } 
              });
          

          Hi, also das Skript funktioniert, aber clearstatedelayed wird nicht erledigt, die Leuchte geht nach 30sec an, auch wenn das Fenster nach 10 sec geschlossen wird.
          Musste timeout nach dem if im else in Klammern setzten sonst kamen Compiler Fehler, oder läuft das bei dir ohne klammern?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @londo99 sagte: läuft das bei dir ohne klammern?

          Die Bedingung für if muss immer in Klammern gesetzt werden.

          Ich verwende ...StateDelayed() nicht, sondern nur setTimeout() und clearTimeout(), da ich so die volle Kontrolle über die Timer habe und auch noch Ressourcen schone.

          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
          • L londo99

            @ticaki

            var timeout = null;
            var idSayIt  = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement'/*announcement*/; // Hier die entsprechende SayIt Text ID
            var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/;
            var idActor = 'hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/;
             
            on({id:'hm-rpc.0.HEQ0358454.1.STATE'/*Bad Fensterkontakt Sender.STATE*/, change:'ne'}, function(obj)
                {
                log('Ausgelöst');
                
                if (obj.state.val)
                    {
                        log('If Ausgelöst');
                        timeout = setStateDelayed('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, true, 30000);
                         
                        //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
                    }
                else
                    {
                        //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                        log('fenster geschlossen vor delayed');
                        if (timeout) clearStateDelayed('hm-rpc.0.NEQ0773372.1.STATE', timeout/*Haustuer Klingel:1.STATE*/);
                        log('fenster geschlossen nach delayed');
                       
                        setState('hm-rpc.0.NEQ0773372.1.STATE'/*Haustuer Klingel:1.STATE*/, false);             
                    } 
                });
            

            Hi, also das Skript funktioniert, aber clearstatedelayed wird nicht erledigt, die Leuchte geht nach 30sec an, auch wenn das Fenster nach 10 sec geschlossen wird.
            Musste timeout nach dem if im else in Klammern setzten sonst kamen Compiler Fehler, oder läuft das bei dir ohne klammern?

            T Nicht stören
            T Nicht stören
            ticaki
            schrieb am zuletzt editiert von ticaki
            #5

            @londo99
            War ein Tippfehler, bei mir ist es ähnlich wie bei Paul. Ich nutze setTimeout().

            Versuche es mal so;

            var timeout = null;
            var idSayIt = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement' /*announcement*/ ; // Hier die entsprechende SayIt Text ID
            var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE' /*Bad Fensterkontakt Sender.STATE*/ ;
            var idActor = 'hm-rpc.0.NEQ0773372.1.STATE' /*Haustuer Klingel:1.STATE*/ ;
            
            on({
                id: idSensor /*Bad Fensterkontakt Sender.STATE*/ ,
                change: 'ne'
            }, function(obj) {
                log('Ausgelöst');
                if (timeout) {
                    clearTimeout(timeout);
                    timeout = null;
                };
                if (obj.state.val) {
                    log('If Ausgelöst');
                    timeout = setTimeout(function() {
                        setState(idActor /*Haustuer Klingel:1.STATE*/ , true);
                    }, 30 * 1000);
            
                    //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
                } else {
                    //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                    log('fenster geschlossen vor delayed');
                    log('fenster geschlossen nach delayed');
                    if (getState(idActor).val) setState(idActor /*Haustuer Klingel:1.STATE*/ , false);
                }
            });
            
            

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            L 1 Antwort Letzte Antwort
            0
            • T ticaki

              @londo99
              War ein Tippfehler, bei mir ist es ähnlich wie bei Paul. Ich nutze setTimeout().

              Versuche es mal so;

              var timeout = null;
              var idSayIt = 'alexa2.0.Echo-Devices.G090L909652112PK.Commands.announcement' /*announcement*/ ; // Hier die entsprechende SayIt Text ID
              var idSensor = 'hm-rpc.0.HEQ0358454.1.STATE' /*Bad Fensterkontakt Sender.STATE*/ ;
              var idActor = 'hm-rpc.0.NEQ0773372.1.STATE' /*Haustuer Klingel:1.STATE*/ ;
              
              on({
                  id: idSensor /*Bad Fensterkontakt Sender.STATE*/ ,
                  change: 'ne'
              }, function(obj) {
                  log('Ausgelöst');
                  if (timeout) {
                      clearTimeout(timeout);
                      timeout = null;
                  };
                  if (obj.state.val) {
                      log('If Ausgelöst');
                      timeout = setTimeout(function() {
                          setState(idActor /*Haustuer Klingel:1.STATE*/ , true);
                      }, 30 * 1000);
              
                      //setState (idSayIt, "Das Fenster im Bad wurde geöffnet. Die aktuelle Luftfeuchtigkeit beträgt" + getState("hm-rpc.0.LEQ0078217.1.HUMIDITY").val + "Prozent");
                  } else {
                      //setState (idSayIt, "Das Fenster im Bad wurde geschlossen");
                      log('fenster geschlossen vor delayed');
                      log('fenster geschlossen nach delayed');
                      if (getState(idActor).val) setState(idActor /*Haustuer Klingel:1.STATE*/ , false);
                  }
              });
              
              
              L Offline
              L Offline
              londo99
              schrieb am zuletzt editiert von
              #6

              @ticaki

              Ok funktioniert, vielen Dank ihr zwei, habe jetzt einige Skripte zu ändern, sonst geht der WAF den Berg runter :)

              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

              802

              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