DOIF/do always Alternative am Beispiel einer Batteriewarnung via Telegram
DOIF führt die Anweisungen einer Bedingung nur 1x aus. Das kann durch Setzen des Attributes 'do' mit dem Wert 'always' geändert werden, doch manchmal ist eine Mix aus beiden Situationen interessant, wie dieses Beispiel zeigen soll.
Alarm bei Battery low eines Homematic-Gerätes
Würde ohne das Attribut do always gearbeitet werden, so würde das DOIF genau eine Meldung verschicken. Selbst, wenn die Batterie getauscht wurde und eine eine andere Batterie zur Neige geht, käme keine Meldung mehr, da DOIF noch auf ein 'Rücksetzen' der Meldung wartet. Das Attribut do always würde jedoch wiederum bei jedem Event eine Meldung erzeugen (z.B. alle 30 Min.), was doch etwas zu sehr nerven könnte. Das Ziel ist es also, 1x täglich die Meldung zu versenden.
Beschreibung
Mittels einer strikten Namensvergabe der Devices kann man sehr einfach alle HomeMatic-Geräte greifen. Hierbei ist es auch erst einmal unerheblich, ob sie eine Batterie haben, denn netzbetriebene Geräte werden nie das passende Event schicken. Im Beispiel wird nun davon ausgegangen, dass alle HomeMatic-Geräte mit dem Namenspräfix HM_ beginnen.
Der reguläre Ausdruck sichert alle Events, unabhängig davon, ob der Battery groß oder klein geschrieben ist, oder auch Batterie dort steht.
Zum täglichen 'Rücksetzen' des DOIF wird eine 2., zeitbasierte Bedingung definiert, welche das DOIF von state cmd1 (nach einer ausgelösten Warnung) auf cmd2 wechseln lässt. So wird führt das nächste Event wieder zu einer Warnung.
Definition
define di_HM_Batt_Warn DOIF (["HM_.*:[Bb]atte.*[Ll]ow"]) (set telegramBot message @xxxxxxx Batterie eines Homematic-Gerätes leer!) DOELSEIF ([10:00]) attr di_HM_Batt_Warn room CUL_HM