DOIF/Zeitspanne zwischen zwei Terminen schalten
Die hier gezeigten DOIF schalten eine Zeitspanne zwischen zwei Terminen.
Zeitspanne zwischen zwei Terminen mit DateTimePicker
Voraussetzung
Das erste DOIF nutzt das DateTimePicker-Widget. Dieses Widget muss vor der Nutzung des DOIF installiert werden.
Die Installation ist hier beschrieben: DateTimePicker: Download und Installation
Beschreibung
- DateTimePicker
- readingList, setList, webCmd, cmdState
- $SELF für den Eigennamen des DOIF
- Defaultwert
- userReadings zur Formatierung der Widgetdaten
- ["^global$:^MODIFIED $SELF$"] damit nach einem Modify DOIF in Status 2 schaltet
Das DOIF schaltet zwischen den angegebenen Terminen den Status auf 1, ausserhalb der Termispanne ist der Status 0.
Die Bedingung des DOIF wird täglich zur angegebenen Uhrzeit geprüft und es wird die vom Widget erzeugte Datumszeichenkette mit der Zeichenkette des aktuellen Datums verglichen. Wenn die Zeichenketten identisch sind wird der entsprechende Zweig geschaltet und ein Logeintrag erzeugt.
In den userReadings wird die Uhrzeit extrahiert und es wird das Datum extrahiert und in das passende Vergleichsformat gebracht. Das Widget liefert Tag und Monat mit zweistellig und ergänzt einstellige Angaben mit einer führenden Null. Der aktuelle Tag $mday und der Monat $month werden ohne führende Null geliefert, daher ist eine Formatanpassung notwendig
Readings
- [[$SELF:P_bhm,"00:00"]] enthält die Beginnzeit, mit Vorgabe
- [[$SELF:P_ehm,"00:00"]] enthält die Endzeit, mit Vorgabe
- [?$SELF:P_dbegin] enthält das Beginndatum
- [?$SELF:P_ebegin] enthält das Enddatum
- "$year-$month-$mday" enthält das aktuelle Datum
- P_begin enthält die vom Widget gelieferte Zeichenkette für Startdatum und Startuhrzeit
- P_ende enthält die vom Widget gelieferte Zeichenkette für Enddatum und Enduhrzeit
Definition
([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_dbegin] eq "$year-$month-$mday")\ ({Log 1, "Alarmstart"})\ DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\ ({Log 1, "Alarmstop"})
wesentliche Attribute
cmdState 1|0 readingList P_begin P_ende setList P_begin:datetime,theme:"default",step:5,inline:true P_ende:datetime,theme:"default",step:5,inline:true userReadings P_bhm:P_begin.* {\ my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"P_begin","none"));;\ return $hm;;\ },\ P_dbegin:P_begin.* {\ my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"P_begin","none"));;\ return $y."-".int($m)."-".int($d);;\ },\ P_ehm:P_ende.* {\ my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"P_ende","none"));;\ return $hm;;\ },\ P_dende:P_ende.* {\ my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"P_ende","none"));;\ return $y."-".int($m)."-".int($d);;\ }\ webCmd P_begin:P_ende
Laborgruppe zum Import mit Raw definition
define datumsbereich_Labor1 DOIF ([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_dbegin] eq "$year-$month-$mday")\ ({Log 1, "Alarmstart"})\ DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\ ({Log 1, "Alarmstop"}) attr datumsbereich_Labor1 alias Terminspanne über Jahre,Monate und Tage attr datumsbereich_Labor1 cmdState 1|0 attr datumsbereich_Labor1 group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy attr datumsbereich_Labor1 icon time_calendar attr datumsbereich_Labor1 readingList P_begin P_ende attr datumsbereich_Labor1 room DOIF_Labor attr datumsbereich_Labor1 setList P_begin:datetime,theme:"default",step:5,inline:true P_ende:datetime,theme:"default",step:5,inline:true attr datumsbereich_Labor1 userReadings P_bhm:P_begin.* {\ my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"P_begin","none"));;\ return $hm;;\ },\ P_dbegin:P_begin.* {\ my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"P_begin","none"));;\ return $y."-".int($m)."-".int($d);;\ },\ P_ehm:P_ende.* {\ my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"P_ende","none"));;\ return $hm;;\ },\ P_dende:P_ende.* {\ my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"P_ende","none"));;\ return $y."-".int($m)."-".int($d);;\ }\ attr datumsbereich_Labor1 webCmd P_begin:P_ende attr datumsbereich_Labor1 widgetOverride setList:textField-long save
Zeitspanne zwischen zwei Terminen
Beschreibung
- readingList, setList, webCmd, cmdState
- $SELF
- userReadings zur Formatierung der Widgetdaten
- ["^global$:^MODIFIED $SELF$"] damit nach einem Modify DOIF in Status 2 schaltet
Das DOIF schaltet zwischen den angegebenen Terminen den Status auf 1, ausserhalb der Termispanne ist der Status 0.
Die Bedingung des DOIF wird täglich zur angegebenen Uhrzeit geprüft und es wird die vom Widget erzeugte Datumszeichenkette mit der Zeichenkette des aktuellen Datums verglichen. Wenn die Zeichenketten identisch sind wird der entsprechende Zweig geschaltet und ein Logeintrag erzeugt.
In den userReadings werden Tag $mday und der Monat $month und Jahr $year in das passende Vergleichsformat gebracht.
Es wird nicht geprüft, ob das angegebene Datum existiert. Es ist z.B. möglich, den 31.2.2017 einzustellen.
Readings
- [[$SELF:P_bhm,"00:00"]] enthält die Startzeit, mit Vorgabe
- [[$SELF:P_ehm,"00:00"]] enthält die Endzeit, mit Vorgabe
- [?$SELF:P_dbegin] enthält das Startdatum
- [?$SELF:P_ebegin] enthält das Enddatum
- "$year-$month-$mday" enthält das aktuelle Datum
- P_bday enthält den gewählten Starttag
- P_bmon enthält den gewählten Startmonat
- P_byear enthält das gewählte Startjahr
- P_eday enthält den gewählten Endtag
- P_emon enthält den gewählten Endmonat
- P_eyear enthält das gewählte Endjahr
Definition
([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_dbegin] eq "$year-$month-$mday")\ ({Log 1, "Alarmstart"})\ DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\ ({Log 1, "Alarmstop"})
wesentliche Attribute
cmdState 1|0 readingList P_bhm P_bday P_bmon P_byear P_ehm P_eday P_emon P_eyear setList P_bhm:time P_bday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 P_bmon:1,2,3,4,5,6,7,8,9,10,11,12 P_byear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026 P_ehm:time P_eday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 P_emon:1,2,3,4,5,6,7,8,9,10,11,12 P_eyear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026 userReadings P_dbegin:P_b(year|mon|day).* {\ return ReadingsVal($name,"P_byear","none")."-".ReadingsVal($name,"P_bmon","none")."-".ReadingsVal($name,"P_bday","none");;\ }, \ P_dende:P_e(year|mon|day).* {\ return ReadingsVal($name,"P_eyear","none")."-".ReadingsVal($name,"P_emon","none")."-".ReadingsVal($name,"P_eday","none");;\ }
Laborgruppe zum Import mit Raw definition
define datumsbereich_Labor0 DOIF ([[$SELF:P_bhm,"00:00"]|8] and [?$SELF:P_dbegin] eq "$year-$month-$mday")\ ({Log 1, "Alarmstart"})\ DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\ ({Log 1, "Alarmstop"}) attr datumsbereich_Labor0 alias Terminspanne attr datumsbereich_Labor0 cmdState 1|0 attr datumsbereich_Labor0 group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy ohne datetimepicker Widget attr datumsbereich_Labor0 icon time_calendar attr datumsbereich_Labor0 readingList P_bhm P_bday P_bmon P_byear P_ehm P_eday P_emon P_eyear attr datumsbereich_Labor0 room DOIF_Labor attr datumsbereich_Labor0 setList P_bhm:time P_bday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 P_bmon:1,2,3,4,5,6,7,8,9,10,11,12 P_byear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026 P_ehm:time P_eday:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 P_emon:1,2,3,4,5,6,7,8,9,10,11,12 P_eyear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026 attr datumsbereich_Labor0 userReadings P_dbegin:P_b(year|mon|day).* {\ return ReadingsVal($name,"P_byear","none")."-".ReadingsVal($name,"P_bmon","none")."-".ReadingsVal($name,"P_bday","none");;\ }, \ P_dende:P_e(year|mon|day).* {\ return ReadingsVal($name,"P_eyear","none")."-".ReadingsVal($name,"P_emon","none")."-".ReadingsVal($name,"P_eday","none");;\ } attr datumsbereich_Labor0 webCmd P_bhm:P_bday:P_bmon:P_byear:P_ehm:P_eday:P_emon:P_eyear attr datumsbereich_Labor0 widgetOverride setList:textField-long save