Skip to content
  • Home
  • 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
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

Scheduled Pinned Locked Moved JavaScript
6 Posts 3 Posters 441 Views 2 Watching
  • 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.
  • L Offline
    L Offline
    londo99
    wrote on last edited by 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 Reply Last reply
    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 Do not disturb
      T Do not disturb
      ticaki
      wrote on last edited by 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 Reply Last reply
      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
        wrote on last edited by
        #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 Replies Last reply
        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
          wrote on last edited by
          #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 Reply Last reply
          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 Do not disturb
            T Do not disturb
            ticaki
            wrote on last edited by 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 Reply Last reply
            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
              wrote on last edited by
              #6

              @ticaki

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

              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

              912

              Online

              32.4k

              Users

              81.5k

              Topics

              1.3m

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

              • Don't have an account? Register

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