NEWS
Ping/Email-Überwachung tunen
-
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 -
@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); } } });
-
@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?
-
@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.
-
@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") }) } } });
-
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?