NEWS
Script für autom. Benachrichtigung bei low Batteriestand
-
Hi, ich habe viele Xiaomi Sensoren über Zigbee eingebunden.
Diese werden ja über eine CR2032 Batterie betrieben, welche auch irgendwann mal ausgetauscht werden muss.
Damit ich rechtzeitig bemerke, habe ich mir ein Script gebaut das den Batteriestand überwacht und bei <=20% eine E-Mail an mich versendet.
Ich habe im Moment 14 Sensoren eingebunden, es werden aber demnächst noch mal ca.16 Stück dazukommen.
Für jedes Gerät habe ich ein "eigenes Script laufen".
Es funktioniert zwar wunderbar, aber das geht doch bestimmt auch etwas übersichtlicher vom Code her oder?on({id: 'zigbee.0.00158d000421e240.battery', change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("zigbee.0.00158d000421e240.battery").val <= 20) { sendTo("email", "send", { text: 'Batterien bei Zigbee-Geräten prüfen, eine Batterie ist fast leer.', to: 'xxx@t-online.de', subject: 'Batterien bei Zigbee-Geräten prüfen, eine Batterie ist fast leer.' }); } }); on({id: 'zigbee.0.00158d0004445915.battery', change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("zigbee.0.00158d0004445915.battery").val <= 20) { sendTo("email", "send", { text: 'Batterien bei Zigbee-Geräten prüfen, eine Batterie ist fast leer.', to: 'xxx@t-online.de', subject: 'Batterien bei Zigbee-Geräten prüfen, eine Batterie ist fast leer.' }); } });
-
-
Hi, Danke für den Tipp, das ist aber wenn ich das richtig sehe ein Script für eine visuelle Darstellung als Tabelle in einer VIS. Das ist was anderes als das was ich möchte.
-
@Atifan sagte:
das geht doch bestimmt auch etwas übersichtlicher vom Code her oder?
Ja.
const ids = $('zigbee.0.*.battery'); ids.on(function(dp) { if (dp.state.val <= 20 && dp.oldState.val > 20) { sendTo("email", "send", { text: 'Batterien bei Zigbee-Geräten prüfen, eine Batterie ist fast leer: ' + dp.id, to: 'xxx@t-online.de', subject: 'Batterien bei Zigbee-Geräten prüfen, eine Batterie ist fast leer.' }); } });
-
@Atifan Mit Aqara Sensoren habe ich das in Blockly so gemacht
Die Trigger Liste wird mit Deinen >30 Sensoren dabei zwar sehr lang, aber ich wüsste nicht, wie man die Lösung von paul53 in Blockly realisieren könnte. Da musst Du dann im JS Code Hand anlegen. -
Hi, ja das ist genau das was ich gesucht hab, Danke!
Klar wird die Liste relativ lang, aber das ist immer noch viel übersichtlicher als das was ich hab -
-
@paul53 ach das ist ja cool. Und auf regexp kann man triggern?
Kann man womöglich auf alle System Bausteine triggern, die sich an dem Trigger andocken lassen? -
@buggybeast sagte:
auf alle System Bausteine triggern, die sich an dem Trigger andocken lassen?
Nein, laut Doku kann man triggern auf
- ID-String
- Array of IDs
- RegExp, dessen Ausdruck auf IDs verweist.
-
@buggybeast sagte in Script für autom. Benachrichtigung bei low Batteriestand:
@Atifan Mit Aqara Sensoren habe ich das in Blockly so gemacht
Die Trigger Liste wird mit Deinen >30 Sensoren dabei zwar sehr lang, aber ich wüsste nicht, wie man die Lösung von paul53 in Blockly realisieren könnte. Da musst Du dann im JS Code Hand anlegen.Bei mir funktioniert das Script so nicht, worauf bezieht sich denn deine Variable "Wert" ?
-
@Atifan
Wert und Gerätename findet man unter "Trigger". -
Super vielen Dank! Jetzt funktioniert es Und sieht gleich viel übersichtlicher aus als meine 14x bzw. später 30x Blöcke.
-
@Atifan
Die Objekt ID ist ein String. Da Du ausführliche Namen vergeben hast, sollten besser die Namen gesendet werden. -
Ja thx, habe es noch etwas angepasst. Jetzt ist es optimal Thx
-
-
@Atifan außerdem würde ich auf „wurde geändert“ prüfen. Zumindest meine Aqara Sensoren aktualisieren sich alle paar Sekunden, dann würde dein Skript auch alle paar Sekunden einmal kurz laufen, auch wenn keine Nachricht versendet wird.
Das ist unnötig. -
Hi, ja ich weiß Effizienter wäre es mit "geändert". Ich nutze aber absichtlich irgendwie lieber "aktualisiert". Klar wird viel öfter getriggert, aber mein NUC langweilt sich sowieso.
Ich möchte damit einfach vermeiden, dass aufgrund von ungünstigen Konstellationen evtl. mal nicht getriggert wird Wie gesagt effizienter wäre es anders
Und ich hab versucht bei "Wert" und "Name" ohne in String zu konvertieren, dann funktioniert das Script irgendwie nicht. -
OK habe bei "Name" die Stringumwandlung entfernt, das ging