Bei Adapter-Störung Benachrichtigung per E-Mail oder Telegram
In diesem Artikel zeige ich Dir, wie Du Dir bei einer Störung eines Adapters eine Benachrichtigung senden kannst.
Gerade in meiner Anfangszeit von ioBroker haben sich manchmal Adapter verabschiedet. Diese Abstürze waren häufig auf Fehlkonfigurationen zurückzuführen. Eigentlich nichts schlimmes, da sich der Adapter dann automatisch wieder neu startet. Um den Problemen auf den Grund zu gehen und eben gleich über eine solche Störung informiert zu werden, habe ich mir ein Skript erstellt, welches den Zustand aller Adapter überwacht und bei einer Änderung auf „inaktiv“ eine Benachrichtigung versendet. Hier können im Skript auch Adapter definiert werden, welche nicht überwacht werden sollen, da dieses sich regelmäßig standardmäßig neu starten.
Im folgenden Skript habe ich eine solche Überwachung implementiert:
function createNotification(NotificationText) { sendTo("telegram", "send", { text: NotificationText }); } on({id: /^system\.adapter\..+\.alive$/, change: 'ne', val: false}, function(dp) { var id = dp.id.split('.'); id = 'system.adapter.' + id[2] + '.' + id[3]; var instance = getObject(id); var ignoreList= ["dwd.0.alive","yr.0.alive","ical.0.alive"]; if ( !ignoreList.includes(dp.common.name)) { if(instance.common.enabled) { createNotification(dp.common.name); } }});
Über das Array ignoreList können Adapter definiert werden, welche ignoriert werden sollen. Das Skript überwacht die Datenpunkte der Adapter alive Zustände und versendet dann eine Benachrichtigung per Telegram, wenn der Adapter nicht ignoriert wird.
Alternativ zur Benachrichtigung via Telegram können natürlich auch E-Mails versendet werden. Hierfür muss einfach die Funktion CreateNotification auf den E-Mail Versand umgeschrieben werden. Hier der entsprechende Artikel zum Thema E-Mails: E-Mails mit ioBroker versenden
Ich hoffe euch gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer ?
Ich würde so formatieren:
Bei JS, falls die Funktion mit UpperCase anfängt, dann heißt es, dass es eine Klasse ist (Namingconvention).
Danke für den Hinweis, hatte ich übersehen. Ist berichtigt 🙂
Hallo Mathias,
ich denke, dass ein kleiner Fehler vorhanden ist.
Die ignoreliste funktioniert nur bei mir, wenn z.Bsp. der String wie folgt lautet
ical.0 alive
In Deinem Beispiel steht es mit „punkt“ ical.0.alive
Ich nutze den text2command Adapter und wenn man in diesem etwas pflegt, wird bei jeder Änderung das alive kurz auf false/true gesetzt. Das führt zu unzähligen unnötigen Emails. Leider funktioniert kein Syntax für die Ignorlist bei diesem Adapter. Bei anderen Adaptern die per Cron neugestartet werden, funktioniert die Ignorlist.
So sieht meine Variable aktuell aus:
var ignoreList= [„text2command.0 alive“, „text2command.0.alive“, „yeelight-2.0.alive“, „mihome.0.alive“, „ical.0.alive“];
Irgend eine Idee warum das mit text2command nicht funktioniert?
Moin,
geb Dir doch mal im Script den Adapternamen aus. Dann siehst Du wie der geschrieben wird und Du kannst das Script entsprechend anpassen.
Der Name vom gestörten Adapter wird mir doch per Email/Telegram gesendet. Das ist doch genau die Schreibweise oder nicht?
Imho heißt der vom Skript geprüfte Datenpunkt:
text2command.0.alive
Als Inhalt der Meldung steht statt dem Punkt vor alive ein Leerzeichen.
text2command.0 alive
Beide Schreibweisen sind in der Ignorliste. Gleiches hat bei dem yeelight und mihome Adapter ja auch funktioniert.
Wie lasse ich mir denn den Namen ausgeben der noch anders zu sein scheint?
Habe nun noch mal direkt das was in der Meldung steht „text2command.0 alive“ auf die Ignorliste und nun scheint es zu funktionieren. Merkwürdig, aber entspricht dem was Mario weiter oben geschrieben hat.
btw: Danke für das Skript!
Danke für die Info! 🙂
Bei mir wird die id angemeckert sowie die include und enabled. Hat jemand eine idee?
Hi,
ja bei mir ebenso.
Leider kann ich auch nicht nachvollziehen, ob am Skript noch etwas individuell angepasst werden muss. Oder einfach ein JS Skript anlegen und den Text reinkopieren?
Wie kann ich bei telegram z.B. nur einen bestimmten Empfänger adressieren?
Danke für euer Feedback.
Flo