NEWS
Datenpunkte Monitor
-
Suche Adapter oder Script um Datenpunkte zu monitoren (z.B. auf Änderungen). Konkrete Anwendung: Healthcheck von Sensoren. Habe im Forum bzw. in den Adaptern nichts gefunden.
-
Suche Adapter oder Script um Datenpunkte zu monitoren (z.B. auf Änderungen). Konkrete Anwendung: Healthcheck von Sensoren. Habe im Forum bzw. in den Adaptern nichts gefunden.
@ocio das hab ich mal irgendwann im Einsatz gehabt.
//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 = ['mqtt.0.Sensoren.Sensor03.Feuchtigkeit;Bodenfeuchte_Hinten;400', 'mqtt.0.Sensoren.Sensor02.Feuchtigkeit;Bodenfeuchte_Vorne;400']; //var ueberwachung = ['mqtt.0.Sensoren.Sensor03.Feuchtigkeit;Bodenfeuchte_Hinten;400']; var default_zeit = 240; var pfad_userdata ='0_userdata.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_userdata + 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_userdata + daten[1], false); //console.log(daten[1] + " ist älter als " + differenz + " Sekunden", 'warn'); //Telegramm // setState("telegram.0.communicate.response", "Info: Gerät nicht erreicht"); // setState("telegram.0.communicate.response", daten[1]); } else { setState(pfad_userdata + daten[1], true); //console.log(daten[1] + " ist jünger als " + differenz + " Sekunden"); } }); });Vielleicht hilft das als Einstieg. Es sollte immer noch funktionieren, ich hab es jedoch im moment nicht im Einsatz
-
@ocio das hab ich mal irgendwann im Einsatz gehabt.
//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 = ['mqtt.0.Sensoren.Sensor03.Feuchtigkeit;Bodenfeuchte_Hinten;400', 'mqtt.0.Sensoren.Sensor02.Feuchtigkeit;Bodenfeuchte_Vorne;400']; //var ueberwachung = ['mqtt.0.Sensoren.Sensor03.Feuchtigkeit;Bodenfeuchte_Hinten;400']; var default_zeit = 240; var pfad_userdata ='0_userdata.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_userdata + 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_userdata + daten[1], false); //console.log(daten[1] + " ist älter als " + differenz + " Sekunden", 'warn'); //Telegramm // setState("telegram.0.communicate.response", "Info: Gerät nicht erreicht"); // setState("telegram.0.communicate.response", daten[1]); } else { setState(pfad_userdata + daten[1], true); //console.log(daten[1] + " ist jünger als " + differenz + " Sekunden"); } }); });Vielleicht hilft das als Einstieg. Es sollte immer noch funktionieren, ich hab es jedoch im moment nicht im Einsatz
@htrecksler
Danke für das script, sieht gut aus, reicht für ein Sensor Ok/Nicht Ok.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden