DOIF/Zeitspanne zwischen zwei Terminen schalten

Aus FHEMWiki
Version vom 19. November 2016, 15:13 Uhr von Trelle (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „{{Randnotiz|RNTyp=r|RNText='''Wichtiger Hinweis!'''<br>Dieses Beispiel funktioniert nur mit der aktuellen {{Link2Forum|Topic=58556|Message=499140|LinkText=Beta…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
X mark.svgWichtiger Hinweis!
Dieses Beispiel funktioniert nur mit der aktuellen Beta-Version.


Terminspanne datetimepicker.png
Terminspanne generisch.png

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

Info green.pngHinweis: Verwendung von
  • DateTimePicker
  • readingList, setList, webCmd, cmdState
  • $SELF und persistente Readings mit Vorgabewert
  • userReadings zur Formatierung der Widgetdaten

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:_bhm,"00:00"]] enthält die Beginnzeit, mit Vorgabe
  • [[$SELF:_ehm,"00:00"]] enthält die Endzeit, mit Vorgabe
  • [?$SELF:_dbegin] enthält das Beginndatum
  • [?$SELF:_ebegin] enthält das Enddatum
  • "$year-$month-$mday" enthält das aktuelle Datum
  • _begin enthält die vom Widget gelieferte Zeichenkette für Startdatum und Startuhrzeit
  • _ende enthält die vom Widget gelieferte Zeichenkette für Enddatum und Enduhrzeit

Definition

([[$SELF:_bhm,"00:00"]] and [?$SELF:_dbegin] eq "$year-$month-$mday")\
   ({Log 1, "Alarmstart"})\
DOELSEIF ([[$SELF:_ehm,"00:00"]] and [?$SELF:_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\
   ({Log 1, "Alarmstop"})

wesentliche Attribute

cmdState 1|0
readingList _begin _ende
room DOIF_Labor
setList _begin:datetime,theme:"default",step:5,inline:true _ende:datetime,theme:"default",step:5,inline:true
userReadings _bhm:_begin.* {\
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_begin","none"));;\
    return $hm;;\
},\
_dbegin:_begin.* {\
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_begin","none"));;\
    return $y."-".int($m)."-".int($d);;\
},\
_ehm:_ende.* {\
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_ende","none"));;\
    return $hm;;\
},\
_dende:_ende.* {\
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_ende","none"));;\
    return $y."-".int($m)."-".int($d);;\
}\

webCmd _begin:_ende

Laborgruppe zum Import mit Raw definition

define datumsbereich_Labor1 DOIF ([[$SELF:_bhm,"00:00"]] and [?$SELF:_dbegin] eq "$year-$month-$mday")\
   ({Log 1, "Alarmstart"})\
DOELSEIF ([[$SELF:_ehm,"00:00"]] and [?$SELF:_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 _begin _ende
attr datumsbereich_Labor1 room DOIF_Labor
attr datumsbereich_Labor1 setList _begin:datetime,theme:"default",step:5,inline:true _ende:datetime,theme:"default",step:5,inline:true
attr datumsbereich_Labor1 userReadings _bhm:_begin.* {\
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_begin","none"));;\
    return $hm;;\
},\
_dbegin:_begin.* {\
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_begin","none"));;\
    return $y."-".int($m)."-".int($d);;\
},\
_ehm:_ende.* {\
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_ende","none"));;\
    return $hm;;\
},\
_dende:_ende.* {\
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_ende","none"));;\
    return $y."-".int($m)."-".int($d);;\
}\

attr datumsbereich_Labor1 webCmd _begin:_ende
attr datumsbereich_Labor1 widgetOverride setList:textField-long
save

Zeitspanne zwischen zwei Terminen

Beschreibung

Info green.pngHinweis: Verwendung von
  • readingList, setList, webCmd, cmdState
  • $SELF und persistente Readings
  • userReadings zur Formatierung der Widgetdaten

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:_bhm,"00:00"]] enthält die Startzeit, mit Vorgabe
  • [[$SELF:_ehm,"00:00"]] enthält die Endzeit, mit Vorgabe
  • [?$SELF:_dbegin] enthält das Startdatum
  • [?$SELF:_ebegin] enthält das Enddatum
  • "$year-$month-$mday" enthält das aktuelle Datum
  • _bday enthält den gewählten Starttag
  • _bmon enthält den gewählten Startmonat
  • _bday enthält das gewählte Startjahr
  • _eday enthält den gewählten Endtag
  • _emon enthält den gewählten Endmonat
  • _eday enthält das gewählte Endjahr

Definition

([[$SELF:_bhm,"00:00"]] and [?$SELF:_dbegin] eq "$year-$month-$mday")\
   ({Log 1, "Alarmstart"})\
DOELSEIF ([[$SELF:_ehm,"00:00"]] and [?$SELF:_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\
   ({Log 1, "Alarmstop"})

wesentliche Attribute

cmdState 1|0
group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy ohne datetimepicker Widget
icon time_calendar
readingList _bhm _bday _bmon _byear _ehm _eday _emon _eyear
room DOIF_Labor
setList _bhm:time _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 _bmon:1,2,3,4,5,6,7,8,9,10,11,12 _byear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026 _ehm:time _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 _emon:1,2,3,4,5,6,7,8,9,10,11,12 _eyear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026
userReadings _dbegin:_b(year|mon|day).* {\
   return ReadingsVal($name,"_byear","none")."-".ReadingsVal($name,"_bmon","none")."-".ReadingsVal($name,"_bday","none");;\
}, \
_dende:_e(year|mon|day).* {\
return ReadingsVal($name,"_eyear","none")."-".ReadingsVal($name,"_emon","none")."-".ReadingsVal($name,"_eday","none");;\
}\

webCmd _bhm:_bday:_bmon:_byear:_ehm:_eday:_emon:_eyear

Laborgruppe zum Import mit Raw definition

define datumsbereich_Labor0 DOIF ([[$SELF:_bhm,"00:00"]] and [?$SELF:_dbegin] eq "$year-$month-$mday")\
   ({Log 1, "Alarmstart"})\
DOELSEIF ([[$SELF:_ehm,"00:00"]] and [?$SELF:_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 _bhm _bday _bmon _byear _ehm _eday _emon _eyear
attr datumsbereich_Labor0 room DOIF_Labor
attr datumsbereich_Labor0 setList _bhm:time _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 _bmon:1,2,3,4,5,6,7,8,9,10,11,12 _byear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026 _ehm:time _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 _emon:1,2,3,4,5,6,7,8,9,10,11,12 _eyear:2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026
attr datumsbereich_Labor0 userReadings _dbegin:_b(year|mon|day).* {\
   return ReadingsVal($name,"_byear","none")."-".ReadingsVal($name,"_bmon","none")."-".ReadingsVal($name,"_bday","none");;\
}, \
_dende:_e(year|mon|day).* {\
return ReadingsVal($name,"_eyear","none")."-".ReadingsVal($name,"_emon","none")."-".ReadingsVal($name,"_eday","none");;\
}\

attr datumsbereich_Labor0 webCmd _bhm:_bday:_bmon:_byear:_ehm:_eday:_emon:_eyear
attr datumsbereich_Labor0 widgetOverride setList:textField-long

save

Links