Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Ping/Email-Überwachung tunen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    864

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Ping/Email-Überwachung tunen

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 2 Kommentatoren 392 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    tomily
    schrieb am zuletzt editiert von
    #1

    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

    paul53P 1 Antwort Letzte Antwort
    0
    • T tomily

      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

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @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);
              }
          }
      });
      

      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

      T 1 Antwort Letzte Antwort
      0
      • paul53P 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 Offline
        T Offline
        tomily
        schrieb am zuletzt editiert von
        #3

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

        paul53P 1 Antwort Letzte Antwort
        0
        • T tomily

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

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

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

          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

          T 1 Antwort Letzte Antwort
          0
          • paul53P 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 Offline
            T Offline
            tomily
            schrieb am zuletzt editiert von
            #5

            @paul53
            Hey zusammen,

            mir ist nochmal ein ganz anderer Ansatz eingefallen, jedoch funktioniert der nicht :-D 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 Antwort Letzte Antwort
            0
            • T tomily

              @paul53
              Hey zusammen,

              mir ist nochmal ein ganz anderer Ansatz eingefallen, jedoch funktioniert der nicht :-D 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 Offline
              T Offline
              tomily
              schrieb am zuletzt editiert von
              #6

              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 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              717

              Online

              32.6k

              Benutzer

              82.1k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe