ioBrokerioBroker Tutorials

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 ?

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

10 Gedanken zu „Bei Adapter-Störung Benachrichtigung per E-Mail oder Telegram

  • Ich würde so formatieren:

    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) && instance.common.enabled) {
    		createNotification(dp.common.name);
    	}
    });
    

    Bei JS, falls die Funktion mit UpperCase anfängt, dann heißt es, dass es eine Klasse ist (Namingconvention).

    Antwort
    • Matthias Korte

      Danke für den Hinweis, hatte ich übersehen. Ist berichtigt 🙂

      Antwort
  • Mario

    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

    Antwort
  • Diginix

    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?

    Antwort
    • Matthias Korte

      Moin,
      geb Dir doch mal im Script den Adapternamen aus. Dann siehst Du wie der geschrieben wird und Du kannst das Script entsprechend anpassen.

      Antwort
      • Diginix

        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?

        Antwort
        • Diginix

          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!

          Antwort
          • Matthias Korte

            Danke für die Info! 🙂

  • Patrick

    Bei mir wird die id angemeckert sowie die include und enabled. Hat jemand eine idee?

    Antwort
  • 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

    Antwort

Schreibe einen Kommentar zu Bluefox Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.