Im Smarthome werden häufig Komponenten mit Batterien betrieben, deren aktueller Ladungsstand eine wichtige Information darstellt. Häufig werden Batteriewarnungen bei niedrigem Ladungsstand über eigene APPs, z.B. bei nuki, erzeugt, schön wäre es, wenn wir über eine zentrale Funktion bei niedrigem Ladungsstand uns per pushover benachrichtigen lassen könnten.
Wir haben bereits in einem Artikel beschrieben, wie wir ein Blocklyscript für jede Komponente individuell anlegen. In diesem Artikel möchten wir einen weiteren Weg aufzeigen, der über eine Liste aller relevanten Batterie-betriebenen Komponenten mithilfe eines einzelnen Scripts funktioniert.
Im ersten Schritte legen wir im Bereich Aufzählungen eine neue Funktion an. Durch Klick auf „+“ können wir aus bestehenden Funktionen auswählen, hier gibt es auch eine Funktion für den Batteriestatus, alternativ kann eine individuelle Funktion angelegt werden. Im Anschluss editieren wir in den Eigenschaften der Funktion die ID, die wir später für das Blockly-Script benötigen.
Über die definierte ID werden wir in den weiteren Schritten auf die der Liste zugeordneten Objekte bzw. Komponenten zugreifen. Zunächst müssen wir aber definieren, welche Objekte, die in ioBroker über die verschiedenen Instanzen, z.B. HUE oder zigbee oder Homematic, eingebunden sind und eine Information zum Batteriezustand in den Objekten bereitstellen, am besten als %-Angabe.
Hierzu wechseln wir in den ioBroker-Objektbereich und suchen im Objektbaum die entsprechenden Komponenten mit dem %-Batterie-Objekt. Im den hinteren Spalten lässt sich die Funktion eines Objekts auswählen, hier wählen wir die in den Aufzählungen angelegte Funktion „Batteriestatus“. Wichtig ist, dass der Name des Objekts so gewählt ist, dass wir das Gerät eindeutig erkennen. Bei Objekten im zigbee-Adapter wird der Batteriestatus mit dem Namen „battery percent“ angelegt, hier macht es Sinn, dass wir den Namen z.B. auf „Außentemperatur battery percent“ setzen. Im nächsten Schritt wird dieser Name genutzt, um die Warnung per Pushover für dieses Gerät zu generieren.
Wenn wir alle Objekte der Funktion zugewiesen haben, können wir uns um das entsprechende Blockls-Script kümmern. Die Logik des Scripts ist einfach: Wenn ein Objektwert in der Liste der zugewiesenen Objekte sich verändert und kleiner wird, dann prüfen wir, ob der Wert unter einen Schwellenwert, z.B. 30% Ladung, fällt und können per pushover eine Nachricht generieren:
Wichtig ist hierbei, dass im Baustein „IDs vom Selektor“ die korrekte Funktion mit der Objektliste definiert ist, in unserem Fall „state[id=*](functions=battery_status)„.
Wir aktivieren das Script und können die Funktionsweise testen, in dem wir manuell einen Objektwert in der Liste von Hand unter den definierten Schwellenwert setzen.
Hinweis: Die Meldung wird für jede Zustandsveränderung unter dem Schwellenwert ausgeführt, das Script „merkt“ sich nicht, ob bereits zu einem Objekt eine Alarmmeldung nach erstmaligem Unterschreiten des Schwellwerts gesendet wurde.
Hallo Florian,
was steckt hinter den Variablen „Wert“ und „Name“/ woher bekommen diese Ihren Wert zugewiesen?
Daraus werde ich nicht schlau… :(
Viele Grüße
Sören
Wert und Name werden automatisch vom entsprechenden Objekt aus der Liste ausgelesen und entspricht den Daten, die in der Objekt-Übersicht in ioBroker angezeigt werden.
Hallo, tolles Skript funktioniert super! Danke dafür!
Kann ich auch alle Werte über diese Funktion setzen? Ich möchte z.B für alle Rollershutter einen Wert schreiben. “
state[id=*](functions=battery_status)=true“ als Beispiel.