DOIF/Zeitschaltuhr mit Calendar
An dieser Seite wird momentan noch gearbeitet. |
Das DOIF Modul erlaubt es, durch Ereignisse oder zeitgesteuert, wenn bestimmte Bedingungen erfüllt sind, bestimmte Aktionen auszuführen. Eine mögliche Quelle für solche Ereignisse oder Bedingungen ist das Calendar Modul, das einen Kalender repräsentiert. Die folgenden Beispiele zeigen, wie man innerhalb von DOIF auf Ereignisse, die von Calendar erzeugt werden, reagieren kann, und wie man aus Calendar Bedingungen ableiten kann, in Abhängigkeit derer sich Aktionan auslösen lassen.
Im folgenden soll angenommen werden, dass es ein Gerät von Typ Calendar namens calendar gibt, auf das reagiert werden soll.
Schalten mit Calendar Ereignissen
Calendar Ereignisse
Wenn ein Eintrag im Kalender seinen Status ändert, werden zwei Ereignisse erzeugt:
changed: <UID> <mode> <mode>: <UID>
Hier ist <UID> die UID des Kalendereintrags und <mode> der neue Status (upcoming, alarm, start oder end).
Triggern auf alle Kalendereinträge
Soll auf alle Statuswechsel von Kalendereinträgen getriggert werden, so geht dies mit
([calendar:"^changed:"])
Soll dagegen z.B. nur auf startende Kalendereinträge getriggert werden, geht dies mit
([calendar:"^start:"])
Innerhalb des Ausführungsteils lässt sich dann $EVENT auswerten, wie dies in Google-Kalender zur Steuerung von Dummies mittels Notify dargestellt ist.
Triggern auf eine bestimmte UID
Soll dagegen nur auf einen Eintrag mit einer bestimmten, bekannten UID getriggert werden, geht dies z.B. mit
([calendar:"^end: event123xyz$"])
Ist die UID dagegen nicht bekannt, wenn das DOIF programmiert wird, sondern wird z.B. in einem Reading namens uid des DOIF abgelegt, lässt sich wie folgt auf das Ende des Kalendereintrags triggern:
(["^calendar$":"^end: (.*)$":$1,""] eq [$SELF:uid])
Hier wird mittels Rückgabewert die UID des Kalendereintrags ermittelt und mit dem gespeicherten Reading verglichen.
Triggern auf Einträge mit bestimmten Eigenschaften
Soll nicht die UID überprüft werden, sondern der Inhalt eines Kalendereintrags, so lässt sich dafür die Ausgabeformatierung des DOIF Moduls nutzen, um den Inhalt abzufragen. Um z.B. zu triggern, wenn ein Event beginnt, dass in Feld summary das Wort "Erna" enthält:
(["^calendar$":"^start: (.*) end$":fhem("get calendar events filter:uid==\"$1\" format:custom=\"\$S\""),""] =~ "Erna")
Triggern beim Ende aller Einträge, die als "PUBLIC" klassifiziert sind:
(["^calendar$":"^end: (.*) end$":fhem("get calendar events filter:uid==\"$1\" format:custom=\"\$CL\""),""] eq "PUBLIC")