Die Idee ist super. Es fehlt wirklich eine Script Bibliothek.
Hier ein Script um Datenpunkte von z.B. Funksensoren auf Lebendigkeit zu testen. Meine Zigbee Sensoren schmierten früher immer gerne ab und ich habe es nie erkannt.
//Das Script überprüft regelmässig die Datenpunkte auf Aktualisierung
//Angabe des Datenpunkts= Datenpunkt der Überwacht werden soll
//StateBezeichnung= Unter pfad_javascript.StateBezeichung wird ein State angelegt; True = Daten sind aktuell / False = Daten veraltet
//Zeit in Sekunden = Zeit die vergangen sein darf seit der letzen Aktualisierung des Datenpunkts (0 = default Zeit wird genommen).
schedule("*/3 * * * *" , function () {
// Angabe des Datenpunkts;StateBezeichnung;Zeit in Sekunden
var ueberwachung = ['fritzdect.0.Comet_119610277592.temp;Heizung;400',
'mqtt.0.zigbee2mqtt.Kuehlschrank;Temp_Kuehlschrank;7000',
'mqtt.0.zigbee2mqtt.gefrierfach;Temp_Gefrierschrank;7000',
'mqtt.0.zigbee2mqtt.TemperaturBad;Bad_Feuchtigkeit;7000',
'mqtt.0.zigbee2mqtt.Fenster_1;Fenster_1;7000',
'mqtt.0.zigbee2mqtt.Fenster_2;Fenster_2;7000',
'mqtt.0.zigbee2mqtt.Fenster_3;Fenster_3;7000',
'mqtt.0.zigbee2mqtt.Fenster_4;Fenster_4;7000',
'mqtt.0.zigbee2mqtt.Fenster_5;Fenster_5;7000',
'mqtt.0.zigbee2mqtt.Fenster_6;Fenster_6;7000',
'mqtt.0.zigbee2mqtt.Fenster_7;Fenster_7;7000',
'mqtt.0.zigbee2mqtt.Fenster_8;Fenster_8;7000'];
var default_zeit = 240;
var pfad_javascript ='javascript.0.watchdog.'; // Beispiel: 'javascript.0.watchdog.' !Punkt nicht vergessen am Ende!
//------------------------------------------------------------------
//Ab hier nichts mehr Ändern
//------------------------------------------------------------------
var zeit= Math.floor(Date.now() / 1000);
var differenz, lchange;
var daten, tchange;
ueberwachung.forEach(function(item, index, array)
{
// Array Splitten
daten = item.split(";");
//Datenpunkt erstellen wenn nicht vorhanden
createState(pfad_javascript + daten[1], { read: true, write: false, name: "Watchdog " + daten[1], type: "boolean", role: " ", def: "false"});
//Differenz Zeit default oder manuell?
differenz = parseInt(daten[2]);
if (differenz == 0) differenz=default_zeit;
//Zeitstempel abfragen in Sekunden
tchange=parseInt(getState(daten[0]).ts / 1000);
//Vergleichen der Zeitstempel
if ((zeit-tchange)>differenz)
{
setState(pfad_javascript + daten[1], false);
//console.log(daten[1] + " ist älter als " + differenz + " Sekunden");
}
else
{
setState(pfad_javascript + daten[1], true);
//console.log(daten[1] + " ist jünger als " + differenz + " Sekunden");
}
});
});