Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. "entprellen" eines States

    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

    "entprellen" eines States

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

      Hi,

      danke für den Tip.

      So habe ich es nun gelöst:

      var PingProblemSchedule;
      on({id: "ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/, change: "ne"}, function (obj) {    
          if (getState("ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/).val === false)
          {        
              PingProblemSchedule = setTimeout(function () {sendTo('telegram', 'Fehler: Homepilot 192.168.178.49 nicht erreichbar');}, 3*60*1000);
          }
          else
          {
              //Wenn OK Zustand nach länger als 3 Minuten, sende: Alles OK
              if ((dp.state.lc - dp.oldState.lc) > 3*60*1000)
                  sendTo('telegram', 'Homepilot 192.168.178.49 wieder erreichbar');
              //Ansonsten, OK Zustand nach weniger als 3 Minuten hergestellt, Fehlernachricht abbrechen
              else
                  clearTimeout(PingProblemSchedule);
          }
      });
      
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Das geht einfacher, da Ping zyklisch aktualisiert wird.

        const idPing = "ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/;
        
        var timer = null;
        
        on({id: idPing, val: true}, function() {
           sendTo('telegram', 'Homepilot 192.168.178.49 wieder erreichbar');
           clearTimeout(timer);
           timer = setTimeout(function() {
              sendTo('telegram', 'Fehler: Homepilot 192.168.178.49 nicht erreichbar');
           }, 3*60*1000);
        });
        
        P 1 Reply Last reply Reply Quote 0
        • P
          passuff @paul53 last edited by passuff

          @paul53 sagte in "entprellen" eines States:

          Das geht einfacher, da Ping zyklisch aktualisiert wird.

          const idPing = "ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/;
          
          var timer = null;
          
          on({id: idPing, val: true}, function() {
             sendTo('telegram', 'Homepilot 192.168.178.49 wieder erreichbar');
             clearTimeout(timer);
             timer = setTimeout(function() {
                sendTo('telegram', 'Fehler: Homepilot 192.168.178.49 nicht erreichbar');
             }, 3*60*1000);
          });
          

          Dieses Script schickt mir minütlich (ping adapter intervall?): xyz wieder erreichbar.
          Kann jemand helfen wie es richtig geht?

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

            @passuff

            const idPing = "ping.0.ioBroker-RasPi.192_168_178_49"/*HomePilot*/;
            
            var timer = null;
            
            on({id: idPing, val: true}, function() {
               if(!timer) sendTo('telegram', 'Homepilot 192.168.178.49 wieder erreichbar');
               else clearTimeout(timer);
               timer = setTimeout(function() {
                  sendTo('telegram', 'Fehler: Homepilot 192.168.178.49 nicht erreichbar');
                  timer = null;
               }, 3*60*1000);
            });
            
            1 Reply Last reply Reply Quote 1
            • P
              passuff last edited by passuff

              Danke für das Update. Leider springt er jetztj wild zwischen "nicht erreichbar" und "wieder erreichbar" hin und her. Der ping Status ist aber konstat auf true... Hier der verwendete code:

              const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/*Rainyman*/;
               
              var timer = null;
               
              on({id: idPing, val: true}, function() {
                  if(!timer) //sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar');
                  console.log('Rainyman 192.168.178.50 wieder erreichbar');
                  else clearTimeout(timer);
                  timer = setTimeout(function() {
                    //sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                    console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                    timer = null;
                 }, 1*5*1000);
              });
              
              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @passuff last edited by paul53

                @passuff sagte:

                Hier der verwendete code:

                Ja, bei nur 5 s Verzögerung muss das so sein. Die Verzögerung muss auf jeden Fall größer sein, als das Intervall, in dem der Ping-Status aktualisiert wird.

                1 Reply Last reply Reply Quote 0
                • P
                  passuff last edited by

                  Sorry, mein Fehler. Funktioniert tadellos.

                  Danke dafür!

                  1 Reply Last reply Reply Quote 0
                  • P
                    passuff last edited by

                    Ich bekomme im Schnitt alle 2-3 Tage eine "wieder erreichbar" Meldung. Laut Aufzeichnung kannn ich aber nicht erkennen, dass sich am PingStatus etwas geändert hat.
                    Jemand eine Idee?

                    Code:


                    const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/Rainyman/;

                    var timer = null;

                    on({id: idPing, val: true}, function() {
                    if(!timer) sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar') + setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, true)
                    + console.log('Rainyman 192.168.178.50 wieder erreichbar');
                    else clearTimeout(timer);
                    timer = setTimeout(function() {
                    sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                    setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, false);
                    setState("hm-rpc.0.OEQ1301523.1.LEVEL"/HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL/, 0);
                    //console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                    timer = null;
                    }, 5601000);
                    });

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

                      @passuff sagte in "entprellen" eines States:

                      if(!timer) {sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar') + setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, true)

                      • console.log('Rainyman 192.168.178.50 wieder erreichbar');

                      else clearTimeout(timer);

                      Was soll das für Code sein ? Javascript ist es nicht.

                      if(!timer) {
                         sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar');
                         setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, true);
                         console.log('Rainyman 192.168.178.50 wieder erreichbar');
                      } else clearTimeout(timer);
                      
                      1 Reply Last reply Reply Quote 0
                      • P
                        passuff last edited by passuff

                        @paul53 sagte in "entprellen" eines States:

                        Was soll das für Code sein ? Javascript ist es nicht.

                        ja, da kannst du recht haben. Ich hatte es auch so wie du proiert, doch dann bekam ich einen Fehler beim compile:

                        javascript.0 script.js.common.Sonstige.Überwachung_Rainyman_Kopieren compile failed:
                         at script.js.common.Sonstige.Überwachung_Rainyman_Kopieren:8
                        
                        


                        const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/Rainyman/;

                        var timer = null;

                        on({id: idPing, val: true}, function() {
                        if(!timer) {
                        sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar');
                        setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, true);
                        console.log('Rainyman 192.168.178.50 wieder erreichbar');
                        } else clearTimeout(timer);
                        else clearTimeout(timer);
                        timer = setTimeout(function() {
                        sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                        setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, false);
                        setState("hm-rpc.0.OEQ1301523.1.LEVEL"/HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL/, 0);
                        //console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                        timer = null;
                        }, 5601000);
                        });

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

                          @passuff sagte in "entprellen" eines States:

                          } else clearTimeout(timer);
                          else clearTimeout(timer);
                          

                          Das zweite else ... muss raus.
                          Bitte Jacascript-Code in Code tags posten !

                          1 Reply Last reply Reply Quote 0
                          • P
                            passuff last edited by

                            Sorry, da komme ich nicht weiter:

                            const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/*Rainyman*/;
                             
                            var timer = null;
                             
                            on({id: idPing, val: true}, function() {
                                if(!timer) {
                                sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar');
                                setState("CalcVal.0.Szenen.Dachfensterautomatik"/Dachfensterautomatik/, true);
                                console.log('Rainyman 192.168.178.50 wieder erreichbar');
                            } else clearTimeout(timer);
                                   timer = setTimeout(function() {
                                   sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                                   setState("CalcVal.0.Szenen.Dachfensterautomatik"/*Dachfensterautomatik*/, false);
                                   setState("hm-rpc.0.OEQ1301523.1.LEVEL"/*HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL*/, 0);
                                   //console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                                   timer = null;
                                }, 5*60*1000);
                             });
                            
                            paul53 1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @passuff last edited by paul53

                              @passuff
                              Funktioniert es so nicht ? Sollte eigentlich. Damit die Struktur zu erkennen ist:

                              const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/*Rainyman*/;
                               
                              var timer = null;
                               
                              on({id: idPing, val: true}, function() {
                                 if(!timer) {
                                     sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar');
                                     setState("CalcVal.0.Szenen.Dachfensterautomatik"/*Dachfensterautomatik*/, true);
                                     console.log('Rainyman 192.168.178.50 wieder erreichbar');
                                 } else clearTimeout(timer);
                                 timer = setTimeout(function() {
                                     sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                                     setState("CalcVal.0.Szenen.Dachfensterautomatik"/*Dachfensterautomatik*/, false);
                                     setState("hm-rpc.0.OEQ1301523.1.LEVEL"/*HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL*/, 0);
                                     //console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                                     timer = null;
                                 }, 5*60*1000);
                              });
                              
                              P 1 Reply Last reply Reply Quote 0
                              • P
                                passuff @paul53 last edited by

                                @paul53

                                Nein, funktioniert leider nicht:

                                00:00:23.053	error	javascript.0 script.js.common.Sonstige.Überwachung_Rainyman_Kopieren compile failed:
                                 at script.js.common.Sonstige.Überwachung_Rainyman_Kopieren:8
                                
                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @passuff last edited by paul53

                                  @passuff
                                  In Zeile 8 ist der Kommentar(Name) falsch eingebaut. Ich habe es oben korrigiert.

                                  1 Reply Last reply Reply Quote 0
                                  • P
                                    passuff last edited by

                                    Super, vielen Dank!

                                    1 Reply Last reply Reply Quote 0
                                    • P
                                      passuff last edited by

                                      @paul53 Bei neustart des Skripts wird einmalig die Bedingung " if(!timer)" wahr un somit eine pushover abgesetzt. Hast du eine Lösung dafür?

                                      const idPing = "ping.0.IoBroker-VM-Debian.192_168_178_50"/*Rainyman*/;
                                       
                                      var timer = null;
                                       
                                      on({id: idPing, val: true}, function() {
                                         if(!timer) {
                                             sendTo('pushover.0', 'Rainyman 192.168.178.50 wieder erreichbar');
                                             console.log('Rainyman 192.168.178.50 wieder erreichbar');
                                         } else clearTimeout(timer);
                                         timer = setTimeout(function() {
                                             sendTo('pushover.0', 'Fehler: Rainyman 192.168.178.50 nicht erreichbar');       setState("hm-rpc.0.OEQ1301523.1.LEVEL"/*HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL*/, 0);
                                             //console.log('Fehler: Rainyman 192.168.178.50 nicht erreichbar');
                                             timer = null;
                                         }, 5*60*1000);
                                      });
                                      
                                      paul53 1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 @passuff last edited by

                                        @passuff
                                        In Zeile 3 den Timer setzen

                                        var timer = setTimeout(function() {}, 0);
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • P
                                          passuff last edited by

                                          Das ging schnell. Danke!

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

                                            @passuff
                                            Was macht das

                                            setState("hm-rpc.0.OEQ1301523.1.LEVEL"/*HM-LC-Bl1PBU-FM OEQ1301523:1.LEVEL*/, 0);
                                            

                                            in dem Skript ?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            520
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            23
                                            1768
                                            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