Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. (gelöst) setStateDelayed und clearStateSelayed

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    (gelöst) setStateDelayed und clearStateSelayed

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      londo99 last edited by 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 1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer @londo99 last edited by 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 1 Reply Last reply Reply Quote 0
        • L
          londo99 @ticaki last edited by

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

          paul53 T 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @londo99 last edited by

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

            1 Reply Last reply Reply Quote 0
            • T
              ticaki Developer @londo99 last edited by 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 1 Reply Last reply Reply Quote 0
              • L
                londo99 @ticaki last edited by

                @ticaki

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

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                749
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                3
                6
                416
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo