Hallo zusammen,
ich habe das Script erweitert um alle 3 Statuswerte der Instanzen abzufragen.
Damit werden auch folgende Situationen erkannt:
- InfluxDB ist nicht erreichbar (oder User gesperrt/ungültig)
- Plex verweigert die Verbindung weil Token abgelaufen ist (passiert manchmal nach Updates
- Spotify Login-Token ist abgelaufen
- ....und viele mehr
Funktionsweise (am Beispiel von Instanz plex.0):
- "Connected to host" wird über Event system.adapter.plex.0.connected geprüft
- "Connected to device or service" wird über Event plex.0.info.connection geprüft
- "Heartbeat" wird über Event system.adapter.plex.0.alive geprüft
// Überwacht alle 3 Statuswerte der laufenden Adapter
 var G_TelegramChatId = 37342026;
function alarmMeldung(txt) {
    //txt =  txt;
    //sendeStatusPerTelegram(txt);
    sendTo('telegram.0', 'Instanzmonitoring: ' + txt);
    sendTo("telegram.0", "send", {
        text: ('Instanzmonitoring: ' + txt),
        chatId: G_TelegramChatId
    });
    log('Sende via Telegram: ' + txt);
}
 
var cnt = 0,
    timeoutZeit = 1 * 30000;
//Prüfen auf: Connected to host
//['system','adapter','plex','0','connected']
on(/^system\.adapter\..+\.connected$/, function (dp) {
    log("CONNECTED-EVENT " + ( JSON.stringify(dp)));
    var id = dp.id.split('.');
    //log(dp.id);
    //log(id);
    if (id[2] != 'admin') {
        if (dp.state.val) {
            cnt--;
            if (cnt <= 0) {
                log('"Connected to host" Adapter laufen fehlerfrei');
                cnt = 0; // falls verzählt und cnt < 0
            }
         } else { 
            log('### "Connected to host"-Fehler entdeckt. Warte auf Selbstheilung: ' + id[2]);
            var newid  = ('system.adapter.' + id[2] + '.' + id[3]);
            recheckWithIntervall(dp.common.name, newid, id[2], "Connected to host");
            cnt++;
         }
     }
});
//Prüfen auf: Connected to device or service
//plex.0.info.connection
on(/^.*info\.connection.*$/, function (dp) {
    log("INFO-EVENT " + ( JSON.stringify(dp)));
    var id = dp.id.split('.');
    //log(dp.id);
    //log(id);
    if (id[0] != 'admin') {
        if (dp.state.val) {
            cnt--;
            if (cnt <= 0) {
                log('"Connected to device or service" Adapter laufen fehlerfrei');
                cnt = 0; // falls verzählt und cnt < 0
            }
         } else { 
            log('### "Connected to device or service"-Fehler entdeckt. Warte auf Selbstheilung: ' + id[2]);
            var newid  = ('system.adapter.' + id[2] + '.' + id[3]);
            recheckWithIntervall(dp.common.name, newid, id[2], "Connected to device or service");
            
            cnt++;
         }
     }
});
//Prüfen auf: Heartbeat
on(/^system\.adapter\..+\.alive$/, function (dp) {
    //if (dp.state.val)
    //    log('trigger für Adapterüberwachung aktiv');
    var id = dp.id.split('.');
    //log(dp.id);
    //log(id);
    // Ausnahmen definieren. id[2] != 'admin' && id[2] != 'yahka'
    if (id[2] != 'admin' && id[2] != 'openweathermap') {
        if (dp.state.val) {
            cnt--;
            if (cnt <= 0) {
                log('"Heartbeat"-Adapter laufen fehlerfrei');
                cnt = 0; // falls verzählt und cnt < 0
            }
         } else { 
            log('### "Heartbeat"-Fehler entdeckt. Warte auf Selbstheilung: ' + id[2]);
            var dpname = ('system.adapter.' + id[2] + '.' + id[3] + '.' + id[4]);
            var newid  = ('system.adapter.' + id[2] + '.' + id[3]);
            recheckWithIntervall(dp.common.name, newid, id[2], "Heartbeat");
            cnt++;
         }
     }
 });
 function recheckWithIntervall(dpname, newid, adapter, eventtyp) {
    var timeout = setTimeout(function () {
        var instance = getObject(newid);
        log('### "' + eventtyp + '"-Wartezeit vorrüber. Prüfe noch mal: ' + newid);
        // nur einen Fehler melden, wenn der Adapter vorher auch mal aktiv war. Bzw. deaktivierte Adapter ignorieren
        if (!getState(dpname).val) {
            if (instance.common.enabled) {
                alarmMeldung('"' + eventtyp + '"-Fehler bei Instanz: ' + dpname);
                cnt = 0; // falls verzählt und cnt < 0
            }
        } else {
            log('### Der "' + eventtyp + '"-Fehler hat selbst geheilt: '+ newid);
        }
    }, timeoutZeit);
 }
 
		
	