Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Ping/Email-Überwachung tunen

    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

    Ping/Email-Überwachung tunen

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

      Hallo zusammen,

      ich mal wieder mit einer Frage 🙂 Zunächst gleich die "Entschuldigung"...bin kein guter scripter 🙂
      Habe vor längerer Zeit mit eurer Hilfe ein Script gebaut. Dieses generiert eine Email, wenn ein im PING-Adapter überwachter Host down und up geht.

      Das funktioniert soweit auch tadellos. Ich würde gerne folgende Veränderung vornehmen, habe aber keine Idee wie ich an die Sache ran gehe:

      Da ich Hosts über eine WAN-Verbindung pinge, ist dieser oft nur kurze Zeit nicht erreichbar. (Beispiel wenn die VPN-Verbindung neu aufgebaut wird). Bekomme also des öfteren down-Meldungen und kurz darauf wieder eine Up-Meldung.

      Ich möchte, dass eine Mail nur ausgelöst wird, wenn der Host Zeit X offline ist.
      Alternativ wenn der Ping-Adapter das nächste Mal scannt und der Host dann immernoch down ist.

      Hoffe das war verständlich erklärt. Hat jemand eine Idee?

      Hier der bisherige Code:

      // Überwachung für Netz für Netz 192.168.2.x
      
      on(/^ping\.0\.ioBroker\.192_168_2_\d+$/, function(dp) {
         var fritzboxintern = getState("ping.0.ioBroker.192_168_2_1").val
         if (fritzboxintern == true) {
                  if (dp.state.val == true) {
                      //Email für Online
                      sendTo("email", {
                         subject: ("Monitoring // " + dp.native.name + " -> up"),
                         text: (dp.common.name + " // " + dp.native.host + " -> Online")
                         })
                  } else if (dp.state.val == false) {
                      //Email für Offline
                      sendTo("email", {
                         subject: ("Monitoring // " + dp.native.name + " -> down"),
                         text: (dp.common.name + " // " + dp.native.host + " -> Offline")
                         })
                   }
             }
      });
      

      Beste Grüße
      Tomily

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

        @tomily sagte: wenn der Ping-Adapter das nächste Mal scannt und der Host dann immernoch down ist.

        Versuche es mal so:

        var offline = [];
        var gesendet = [];
        
        on({id: /^ping\.0\.ioBroker\.192_168_2_\d+$/}, function(dp) {
           if (getState("ping.0.ioBroker.192_168_2_1").val) {
                if (dp.state.val) {
                    if(gesendet.includes(dp.id)) {
                        //Email für Online
                        sendTo("email", {
                            subject: ("Monitoring // " + dp.native.name + " -> up"),
                            text: (dp.common.name + " // " + dp.native.host + " -> Online")
                        });
                        gesendet.splice(gesendet.indexOf(dp.id), 1);
                    } 
                } else {
                    if(offline.includes(dp.id)) {
                        if(!gesendet.includes(dp.id)) {
                            //Email für Offline
                            sendTo("email", {
                                subject: ("Monitoring // " + dp.native.name + " -> down"),
                                text: (dp.common.name + " // " + dp.native.host + " -> Offline")
                            });
                            gesendet.push(dp.id);
                            offline.splice(offline.indexOf(dp.id), 1); 
                        }
                    } else offline.push(dp.id);
                }
            }
        });
        
        T 1 Reply Last reply Reply Quote 0
        • T
          tomily @paul53 last edited by

          @paul53
          Guten Morgen,

          herzlichen Danke für die Mühe!
          Habe es ehrlich gesagt nicht verstanden :=)

          Habe es 1:1 rein kopiert und getestet. Die Mails werden aber nach wie vor beim ersten "down gehen" versendet.

          Wäre ein Timer denkbar, der den Mailversand erst verspätet generiert. Wenn dann der Status "True" wieder kommt, wird einfach der Timer resetted?

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

            @tomily sagte: Die Mails werden aber nach wie vor beim ersten "down gehen" versendet.

            Das sollte die Abfrage

                        if(offline.includes(dp.id)) {
                            ...
                        } else offline.push(dp.id);
            

            verhindern: Wenn die ID noch nicht im Array offline enthalten ist, wird nicht gesendet, sondern die ID im Array gespeichert.

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

              @paul53
              Hey zusammen,

              mir ist nochmal ein ganz anderer Ansatz eingefallen, jedoch funktioniert der nicht 😄 Habe ich da nen Denkfehler?

              Habe im Ursprünglichen Script jeweils in der Zeile 6 & 12 folgendes hinzugefügt:

              && dp.oldState.val == true
              

              Damit wollte ich erreichen, dass erst beim erneuten erreichen des gleichen Zustandes eine Email ausgelöst wird.
              Sprich: Beim ersten Scan geht der Wert auf "false". Wenn dieser beim zweiten Wert immernoch false ist, dann soll 1x die Mail ausgelöst werden.

              Ist der Denkfehler darin, dass nur bei Wertänderung getriggert wird?

              // Überwachung für Netz für Netz 192.168.2.x
              
              on(/^ping\.0\.ioBroker\.192_168_2_\d+$/, function(dp) {
                 var fritzboxintern = getState("ping.0.ioBroker.192_168_2_1").val
                 if (fritzboxintern == true) {
                          if (dp.state.val == true && dp.oldState.val == true) {
                              //Email für Online
                              sendTo("email", {
                                 subject: ("Monitoring // " + dp.native.name + " -> up"),
                                 text: (dp.common.name + " // " + dp.native.host + " -> Online")
                                 })
                          } else if (dp.state.val == false && dp.oldState.val == false) {
                              //Email für Offline
                              sendTo("email", {
                                 subject: ("Monitoring // " + dp.native.name + " -> down"),
                                 text: (dp.common.name + " // " + dp.native.host + " -> Offline")
                                 })
                           }
                     }
              });
              
              T 1 Reply Last reply Reply Quote 0
              • T
                tomily @tomily last edited by

                Hätte da noch nen Ansatz:

                Kann ich den Teil "Email senden" in einen Timer packen, der etwas länger ist, als das Ping-Interval?
                Sollte in der Zwischenzeit eine UP-Meldung kommen, könnte der Timer zurückgesetzt werden?

                Hat jemand ne Idee, wie ich das Sinnvoll einbauen kann?

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

                Support us

                ioBroker
                Community Adapters
                Donate

                823
                Online

                31.9k
                Users

                80.1k
                Topics

                1.3m
                Posts

                2
                6
                286
                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