DOIF/Zeitspanne im DOIF und disabledForIntervals im Vergleich
Der FHEM-Server stellt eine Zeitbehandlung über das Attribut disabledForIntervals zur Vefügung. Das ist für viele Module hilfreich, da dort keine eigene Zeitbehandlung implementiert werden muss.
DOIF stellt das Attribut disabledForIntervals nicht zur Verfügung, da im DOIF selbst eine Zeitbehandlung eingebaut ist.
Dennoch kann disabledForIntervals mit DOIF verwendet werden, wenn disabledForIntervals mit dem Attribut userattr im DOIF verfügbar gemacht wird. Allerdings sind die Möglichkeiten der Zeitfunktionen im DOIF vielfältiger als die durch disabledForIntervals bereitgestellten Möglichkeiten, die originären Zeitangaben sollten daher die erste Wahl sein.
Nutzung einer Zeitspanne zur zeitlichen Befehlseinschränkung, die originäre DOIF Funktionalität
Grundsätzlich wird eine Bedingung, die innerhalb einer Zeitspann inaktiv werden soll, so formuliert
(<Bedingung> and ![?<Anfangszeit>-<Endzeit>]) (<Befehle>)
Beschreibung
- $SELF, dem Eigennamen des DOIF
- [Zeitspanne] zur Angabe einer Zeitspanne in der Bedingung
- ! zur Negation der Zeitspanne
- ? um die Zeitspanne als nicht auslösend zu Kennzeichnen
Die Bedingungsteile, wie [$SELF:mybutton] == 1 sind im Beispiel nur zur Veranschaulichung eingebaut. Sie stehen für eine beliebige Bedingung.
Die Bedingungen 1 und 2 können zwischen 13:00 und 14:00 nicht wahr werden, da ![13:00-14:00] unwahr ist.
Definition
## 1 ([$SELF:mybutton] == 1 and ![?13:00-14:00]) ({Log 1, "Befehl 1"}) ## 2 DOELSEIF ([$SELF:mybutton] == 2 and ![?13:00-14:00]) ({Log 1, "Befehl 2"})
Verwendung von disabledForIntervals im DOIF
Mit der internen FHEM-Funktion IsDisabled lässt sich für Bedingungszweige die Befehlsausführung deaktivieren.
Grundsätzlich wird eine Bedingung, die inaktiv werden soll, so formuliert
(<Bedingung> and !IsDisabled("$SELF")) (<Befehle>)
Ist das Attribut disabledForIntervals gesetzt, dann wird IsDisabled("$SELF") wahr und liefert den Wert 2 zurück.
Daher wird jede Bedingung, die !(IsDisabled("$SELF") == 2) enthält nicht wahr, wenn der Zeitpunkt der Bedingungsprüfung einem Intervall liegt, dass im Attribut disabledForIntervals angegeben ist.
Eine Abfrage des Rückgabewertes von IsDisabled ist nicht notwendig, wenn der Grund für den Deaktivierungszustand keine Rolle spielt.
Beschreibung
- $SELF, dem Eigennamen des DOIF
- userattr um DOIF mit disabledForIntervals zu ergänzen
- disabledForIntervals um Zeitspannen der Inaktivität festzulegen
- IsDisabled zum Abfragen der Inaktivität
- ! zur Negation von IsDisabled
Die Bedingungsteile, wie [$SELF:mybutton] == 1 sind im Beispiel nur zur Veranschaulichung eingebaut. Sie stehen für eine beliebige Bedingung.
Die Bedingungen 1 und 2 können zwischen 13:00 und 14:00 nicht wahr werden, da !IsDisabled("$SELF") unwahr ist.
Definition
## 1 ([$SELF:mybutton] == 1 and !IsDisabled("$SELF")) ({Log 1, "Befehl 1"}) ## 2 DOELSEIF ([$SELF:mybutton] == 2 and !IsDisabled("$SELF")) ({Log 1, "Befehl 2"})
wesentliche Attribute
userattr disabledForIntervals disabledForIntervals 13:00-14:00
Einige Unterschiede
- DOIF benötigt keine zusätzlichen Attribute.
- Bei Verwendung der originären Zeitspannen können in verschiedenen Bedingungen des DOIF unterschiedliche Zeitspannen verwendet werden.
- Im DOIF müssen die Tagesgrenze überschreitende Zeitspannen nicht gesplittet werden.
- Originäre Zeitspannen im DOIF können auslösen.
Laborgruppe zum Import mit Raw definition
define using_disabledForIntervals_Labor DOIF ## 1\ ([$SELF:mybutton] == 1 and !IsDisabled("$SELF")) \ ({Log 1, "Befehl 1"})\ ## 2\ DOELSEIF ([$SELF:mybutton] == 2 and !IsDisabled("$SELF"))\ ({Log 1, "Befehl 2"}) attr using_disabledForIntervals_Labor userattr disabledForIntervals attr using_disabledForIntervals_Labor alias Nutzung von Attribut disabledForIntervals und IsDisabled-Funktion attr using_disabledForIntervals_Labor cmdState Befehl 1|Befehl 2 attr using_disabledForIntervals_Labor disabledForIntervals 13:00-14:00 attr using_disabledForIntervals_Labor group Labor: state inactive Funktion IsDisabled und disabledForIntervals attr using_disabledForIntervals_Labor readingList mybutton attr using_disabledForIntervals_Labor room DOIF_Labor attr using_disabledForIntervals_Labor setList mybutton:0,1,2 attr using_disabledForIntervals_Labor webCmd mybutton setstate using_disabledForIntervals_Labor 2016-12-08 20:26:55 mybutton 0 define using_time_spanpan_Labor DOIF ## 1\ ([$SELF:mybutton] == 1 and ![?13:00-14:00]) \ ({Log 1, "Befehl 1"})\ ## 2\ DOELSEIF ([$SELF:mybutton] == 2 and ![?13:00-14:00])\ ({Log 1, "Befehl 2"}) attr using_time_spanpan_Labor alias Nutzung einer Zeitspanne zur zeitlichen Befehlseinschränkung,<br> die ursprüngliche DOIF Funktionalität attr using_time_spanpan_Labor cmdState Befehl 1|Befehl 2 attr using_time_spanpan_Labor group Labor: state inactive Funktion IsDisabled und disabledForIntervals attr using_time_spanpan_Labor readingList mybutton attr using_time_spanpan_Labor room DOIF_Labor attr using_time_spanpan_Labor setList mybutton:0,1,2 attr using_time_spanpan_Labor webCmd mybutton setstate using_time_spanpan_Labor 2016-12-08 23:33:47 mybutton 0 save