Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Wertänderung im Zeitraum überwachen und Aktion ausführen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Wertänderung im Zeitraum überwachen und Aktion ausführen

    This topic has been deleted. Only users with topic management privileges can see it.
    • 0
      0018 last edited by

      Hallo zusammen,

      ich bin auf der Suche nach einer Lösung für mein Vorhaben.

      aktuell habe ich Verbindungsabrüche mit meinem WLAN AP.

      Zu Testzwecken probiere ich nun dieses Workaround. Ich pinge über den Adapter "ping" meinen Router über meinen WLAN AP an.

      Wenn diese Verbindung abbricht möchte ich gerne meinen WLAN AP über den TR-064 neustarten. Dieses soll aber nur durchgeführt werden wenn der Ping über den Zeitraum von 5 min auf false steht. Kommt der Ping innerhalb der Zeit wieder zurück, ist kein Reboot notwendig.

      Einzige Idee die ich hatte war über setTimeout zu gehen, allerdings wird dieser immer ausgeführt, auch wenn sich der Wert im Zeitraum wieder ändert.

      Zur Vereinfachung mein Testscript:

      var test = "hm-rega.0.6370"/*Testschalter*/;
      
      on(test, function (obj) {
      current_state = getState(state).val;
      if (current_state == "1") { 
          log ('Wert = true' );
          setTimeout(function() {
          log ('Timeout ausgeführt');
      }, 10000);
      }
      
      else if (current_state == "0") {
          log ("Werte = false");
      }
      });
      
      

      Kann mir jemand einen Tipp geben, wie es funktionieren könnte?

      Mfg

      1 Reply Last reply Reply Quote 0
      • arteck
        arteck Developer Most Active last edited by

        badewannenprinzip

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 last edited by

          Versuche es mal so:

          var test = "hm-rega.0.6370"/*Testschalter*/;
          var timer = null;
          
          on(test, function (obj) {
             if (obj.state.val == "1") {
                log ('Wert = true' );
                timer = setTimeout(function() {
                   log ('Timeout ausgeführt');
                }, 10000);
             } else {
                log ("Wert = false");
                if (timer) clearTimeout(timer);
             }
          });
          
          

          Liefert die SV "Testschalter" wirklich eine Zeichenkette mit den Inhalten "0" und "1" ?

          1 Reply Last reply Reply Quote 0
          • 0
            0018 last edited by

            @paul53:

            Liefert die SV "Testschalter" wirklich eine Zeichenkette mit den Inhalten "0" und "1" ? `

            Nein, Werte sind true und false.

            Woran kann erkennen um was es sich handelt und was liefert der ping-adapter?

            mfg

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              @0018:

              Woran kann erkennen um was es sich handelt und was liefert der ping-adapter? `
              Man kann den Typ abfragen:

              log('SV Typ: ' + typeof getState("hm-rega.0.6370").val);
              

              @0018:

              Werte sind true und false `
              Dann ändert sich die Abfrage in Zeile 5:

                 if (obj.state.val) {
              
              
              1 Reply Last reply Reply Quote 0
              • 0
                0018 last edited by

                @paul53:

                   if (obj.state.val) {
                
                ```` `  
                

                Das bedeutet also beim Typ boolean wird es immer ausgeführt wenn der Wert auf true geht?

                Wie müsste es dann aussehen wenn es nur bei false starten soll?

                Und warum funktioniert es dann trotzdem mit der alten Variante?

                if (obj.state.val == "1") {
                
                
                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 last edited by

                  @0018:

                  Wie müsste es dann aussehen wenn es nur bei false starten soll? `

                     if (!obj.state.val) {
                  

                  oder

                     if (obj.state.val === false) {
                  

                  @0018:

                  Und warum funktioniert es dann trotzdem mit der alten Variante?

                  if (obj.state.val == "1") {
                  ```` `  
                  

                  Keine Ahnung :? Ist es wirklich so ?

                  1 Reply Last reply Reply Quote 0
                  • 0
                    0018 last edited by

                    @paul53:

                    Keine Ahnung :? Ist es wirklich so ? `

                    laut meinem Versuch und dem Log dazu schon.

                    ! 1620_test1.png

                    Ich werde jetzt

                    if (obj.state.val === true) {
                    

                    verwenden, lässt sich leichter merken und ist auch nachhaltig leicht herbeizuführen. Kann dann auch leicht auf false umstellen, ohne nachlesen zu müssen.

                    Auf jeden Fall passt das Script soweit und funktioniert so wie es soll.

                    Danke + Mfg

                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      @0018:

                      Und warum funktioniert es dann trotzdem mit der alten Variante? `
                      Javascript nimmt eine implizite Typwandlung vor:

                      "0" bzw. 0 –> false

                      "1" bzw. 1 --> true

                      Bei der Verwendung von === muss der Typ dagegen übereinstimmen.

                      1 Reply Last reply Reply Quote 0
                      • 0
                        0018 last edited by

                        OK, danke für die Erklärung. Dann verwende ich jetzt true, dann ist es auch gleich dem state.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        853
                        Online

                        31.7k
                        Users

                        79.8k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        1005
                        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