NEWS
Zigbee Überwachung letzer empfangener Wert
-
Hallo,
ich suche eine script vorlage JS oder Blockly egal, welche meine Zigbee Geräte Überwacht.
Ich will einen Wert angeben z.b letzte 12 Stunden keinen Wert geändert = meldung Telegram ..
Würde dies anhand der Batterie / Signal /wert ausmachen.Hat hier jemand schon mal was gemacht worauf ich aufbauen könnte ? Danke
-
Du kannst auch ein Javascript schreiben:
(getState("DEINOBJECT.state).lc
lc ist last changed also zuletzt geändert... einfach mit aktueller Zeit vergleichen, wenn Differenz größer als X -> Telegram
-
@Zandrial said in Zigbee Überwachung letzer empfangener Wert:
Du kannst auch ein Javascript schreiben:
(getState("DEINOBJECT.state).lc
lc ist last changed also zuletzt geändert... einfach mit aktueller Zeit vergleichen, wenn Differenz größer als X -> Telegram
Okay Danke aber in Javascript bin ich leider nicht so fitt.
Würde das auch per Blockly klappen? -
@ChrisXY
Prinzipiell ja, aber du musst dann eine Liste aller zu überwachenden Geräte manuell im Blockly eintragen.in JS kannst du das ganze über einen Selektor lösen. Ist einfacher / besser wartbar.
-
@ChrisXY ich hab noch was gefunden im forum:
https://forum.iobroker.net/topic/25854/zigbee-geräte-überwachen
EDIT:
Da ich anscheinend zu viel Zeit habe und ich das auch gebrauchen konnte:var zigbees = 0; //zigbees sind unsere zigbee sensoren var OFFLINE = []; //das array enthält unsere geräte die offline sind $('channel[id=^zigbee.0.*]').each(function(id, i) { //der selector holt erstmal alles was unter zigbee.0. steht if(id.endsWith("link_quality")){ //wenn es link_quality kanal ist haben wir nen sensor ++zigbees; //sensoren hochzählen if(Math.round((new Date() - new Date(getState(id).ts)) / 1000 / 60) > 60){ //wenn über ne minute nicht gemeldet ist er offline var offLineOBJ = getObject(id.split(".").slice(0,-1).join(".")).common.name; //wir splitten den string um unser object zu erhalten OFFLINE.push(offLineOBJ); //Objektname ins OFFLINE-Array schieben } } }); log("Es sind " + OFFLINE.length + " von " + zigbees + " Geräte Offline:"); //Ausgabe OFFLINE.forEach(element => log("-" +element)); //Geräte aus Offline-Array ausgeben
Ausgabe ist dann so:
18:55:26.531 info javascript.0 (1319) script.js.ZigbeeTest: Es sind 2 von 3 Geräte Offline:
18:55:26.531 info javascript.0 (1319) script.js.ZigbeeTest: -Vibrationssensor Briefkasten
18:55:26.531 info javascript.0 (1319) script.js.ZigbeeTest: -Fenstersensor Bad -
Super das geht Danke
Das aus dem Post geht bei mir leider nicht .. steht anzahl Geräte 0 ..
Deins klappt. Wie bekomm ich das den gespeichert in einem Wert?
Im Log gibt er es aus.Edit: Hab bei dem Script aus dem anderen Post nur ein . hinzugefügt dann geht es auch...
aus const zigbee = $('zigbee.0*.link_quality');
habe ich:
const zigbee = $('zigbee.0.*.link_quality');
gemachtcreateState('zigbeestatus.Anzahl_Geräte', 0, {type: 'number'}); createState('zigbeestatus.offline', 0, {type: 'number'}); createState('zigbeestatus.Gerät', " ", {type: 'string'}); const zigbee = $('zigbee.0*.link_quality'); const loggen = true; var arrOFFLINE; function offline(id){ var obj = getObject(id); arrOFFLINE.push(obj.common.name); if(loggen) log("Gerät: " + obj.common.name); } function countOffline() { var moeglicheOFFLINE = 0; arrOFFLINE =[]; zigbee.each(function (id, i){ if(Math.round((new Date() - new Date(getState(id).ts)) / 1000 / 60) > 60) offline(id); ++moeglicheOFFLINE; }); if(loggen) log("Text: "+arrOFFLINE.join(', ')); if(loggen) log("Anzahl Geräte: " + moeglicheOFFLINE + " // davon offline: " + arrOFFLINE.length); setState("zigbeestatus.Gerät", arrOFFLINE.join(',<br>')); setState("zigbeestatus.offline", arrOFFLINE.length); setState("zigbeestatus.Anzahl_Geräte", moeglicheOFFLINE); } countOffline();
-
Tolle Sache! Und wie bekomme ich das Ergebnis von Java in Telegram?
-
gibt es sowas für den Deconz Adapter auch ?
-
Hi,
hatte so ein Skript vor einiger Zeit schon gepostet. Telegram meldung müsste ja einfach sein:// setState("telegram.0.communicate.response", "Info: Gerät nicht erreicht");
mal auskomentieren.
Vielleicht Hilfts - Gruß Martin
@charakterkopf said in [Aufruf] Welche guten JavaScripts setzt ihr ein?:
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"); //Telegramm // setState("telegram.0.communicate.response", "Info: Gerät nicht erreicht"); // setState("telegram.0.communicate.response", daten[1]); } else { setState(pfad_javascript + daten[1], true); //console.log(daten[1] + " ist jünger als " + differenz + " Sekunden"); } }); });