DOIF/Zeitspanne zwischen zwei Terminen schalten: Unterschied zwischen den Versionen

Aus FHEMWiki
 
(21 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Randnotiz|RNTyp=r|RNText='''Wichtiger Hinweis!'''<br>Dieses Beispiel funktioniert nur mit der aktuellen {{Link2Forum|Topic=58556|Message=499140|LinkText=Beta-Version}}.}}<br>
{{Randnotiz|RNTyp=g|RNText=Eine aktuelle DOIF-Version ist erforderlich}}<br>
[[Datei:Terminspanne_datetimepicker.png|mini|600px|right|]]
[[Datei:Terminspanne_datetimepicker.png|mini|600px|right|]]
[[Datei:Terminspanne_generisch.png|mini|600px|right|]]
[[Datei:Terminspanne_generisch.png|mini|600px|right|]]
Zeile 15: Zeile 15:
* '''readingList''', '''setList''', '''webCmd''', '''cmdState'''
* '''readingList''', '''setList''', '''webCmd''', '''cmdState'''
* '''$SELF''' für den Eigennamen des DOIF
* '''$SELF''' für den Eigennamen des DOIF
* '''P_''' für persistente Readings
* '''Defaultwert'''
* '''Defaultwert'''
* '''userReadings''' zur Formatierung der Widgetdaten
* '''Ausgabeformatierung: <nowiki>[<Device>:<Reading>:"<Regex>":<Output>]</nowiki>''' zur Formatierung der Widgetdaten
* '''["^global$:^MODIFIED $SELF$"]''' damit nach einem Modify DOIF in Status 2 schaltet
* '''["^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.<br>
Das DOIF schaltet zwischen den angegebenen Terminen den Status auf 1, ausserhalb der Termispanne ist der Status 0.<br>
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.<br>
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.<br>
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
Durch die Ausgabeformatierung wird die Uhrzeit und das Datum extrahiert und in das passende Vergleichsformat gebracht. Das Widget liefert Tag und Monat zweistellig und ergänzt einstellige Angaben mit einer führenden Null, diese wird duch Multiplikation mit 1 eliminiert. Der aktuelle Tag '''$mday''' und der Monat '''$month''' werden ohne führende Null geliefert.
====Readings====
====Readings====
* '''<nowiki>[[$SELF:P_bhm,"00:00"]]</nowiki>''' enthält die Beginnzeit, mit Vorgabe
* '''<nowiki>[[$SELF:P_begin:"(\d\d:\d\d)$","00:00"]]</nowiki>''' gibt die Beginnzeit zurück, mit Vorgabe
* '''<nowiki>[[$SELF:P_ehm,"00:00"]]</nowiki>''' enthält die Endzeit, mit Vorgabe
* '''<nowiki>[[$SELF:P_ende:"(\d\d:\d\d)$","00:00"]]</nowiki>''' gibt die Endzeit zurück, mit Vorgabe
* '''[?$SELF:P_dbegin]''' enthält das Beginndatum
* '''[?$SELF:P_ebegin]''' enthält das Enddatum
* '''"$year-$month-$mday"''' enthält das aktuelle Datum
* '''"$year-$month-$mday"''' enthält das aktuelle Datum
* '''P_begin''' enthält die vom Widget gelieferte Zeichenkette für Startdatum und Startuhrzeit
* '''[?$SELF:P_begin:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)]''' filtert Tag($1), Monat($2), Jahr($3) und formatiert die Ausgabe für das Startdatum
* '''P_ende''' enthält die vom Widget gelieferte Zeichenkette für Enddatum und Enduhrzeit
* '''[?$SELF:P_ende:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)]''' filtert Tag($1), Monat($2), Jahr($3) und formatiert die Ausgabe für das Enddatum


===Definition===
===Definition===
<pre>
<pre>
([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_dbegin] eq "$year-$month-$mday")\
([[$SELF:P_begin:"(\d\d:\d\d)$","00:00"]] and [?$SELF:P_begin:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday")\
   ({Log 1, "Alarmstart"})\
   {Log 1, "Alarmstart"}\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\
DOELSEIF ([[$SELF:P_ende:"(\d\d:\d\d)$","00:00"]] and [?$SELF:P_ende:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\
   ({Log 1, "Alarmstop"})
   {Log 1, "Alarmstop"}
</pre>
</pre>


Zeile 43: Zeile 40:
<pre>
<pre>
cmdState 1|0
cmdState 1|0
readingList _begin _ende
readingList P_begin P_ende
room DOIF_Labor
setList P_begin:datetime,theme:"default",step:5,inline:true P_ende:datetime,theme:"default",step:5,inline:true
setList _begin:datetime,theme:"default",step:5,inline:true _ende:datetime,theme:"default",step:5,inline:true
webCmd P_begin:P_ende
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
</pre>
</pre>


===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===
<pre>
<pre>
define datumsbereich_Labor1 DOIF ([[$SELF:_bhm,"00:00"]] and [?$SELF:_dbegin] eq "$year-$month-$mday")\
define datumsbereich_Labor1 DOIF ([[$SELF:P_begin:"(\d\d:\d\d)$","00:00"]] and [?$SELF:P_begin:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday")\
   ({Log 1, "Alarmstart"})\
   {Log 1, "Alarmstart"}\
DOELSEIF ([[$SELF:_ehm,"00:00"]] and [?$SELF:_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\
DOELSEIF ([[$SELF:P_ende:"(\d\d:\d\d)$","00:00"]] and [?$SELF:P_ende:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\
   ({Log 1, "Alarmstop"})
   {Log 1, "Alarmstop"}
attr datumsbereich_Labor1 alias Terminspanne über Jahre,Monate und Tage
attr datumsbereich_Labor1 alias Terminspanne über Jahre,Monate und Tage
attr datumsbereich_Labor1 cmdState 1|0
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 group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy
attr datumsbereich_Labor1 icon time_calendar
attr datumsbereich_Labor1 icon time_calendar
attr datumsbereich_Labor1 readingList _begin _ende
attr datumsbereich_Labor1 readingList P_begin P_ende
attr datumsbereich_Labor1 room DOIF_Labor
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 setList P_begin:datetime,theme:"default",step:5,inline:true P_ende:datetime,theme:"default",step:5,inline:true
attr datumsbereich_Labor1 userReadings _bhm:_begin.* {\
attr datumsbereich_Labor1 webCmd P_begin:P_ende
    my ($d,$m,$y,$hm) = split(/\.| /,ReadingsVal($name,"_begin","none"));;\
attr datumsbereich_Labor1 widgetOverride setList:textField-long
    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
save
</pre>
</pre>
Zeile 104: Zeile 67:
===Beschreibung===
===Beschreibung===
{{Randnotiz|RNText=Hinweis: Verwendung von
{{Randnotiz|RNText=Hinweis: Verwendung von
* readingList, setList, webCmd, cmdState
* '''readingList''', '''setList''', '''webCmd''', '''cmdState'''
* $SELF und persistente Readings
* '''$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.
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.<br>
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.<br>
In den userReadings werden Tag '''$mday''' und der Monat '''$month''' und Jahr '''$year''' in das passende Vergleichsformat gebracht.<br>
Es wird nicht geprüft, ob das angegebene Datum existiert. Es ist z.B. möglich, den 31.2.2017 einzustellen.
Es wird nicht geprüft, ob das angegebene Datum existiert. Es ist z.B. möglich, den 31.2.2017 einzustellen.


====Readings====
====Readings====
* '''<nowiki>[[$SELF:_bhm,"00:00"]]</nowiki>''' enthält die Startzeit, mit Vorgabe
* '''<nowiki>[[$SELF:P_bhm,"00:00"]]</nowiki>''' enthält die Startzeit, mit Vorgabe
* '''<nowiki>[[$SELF:_ehm,"00:00"]]</nowiki>''' enthält die Endzeit, mit Vorgabe
* '''<nowiki>[[$SELF:P_ehm,"00:00"]]</nowiki>''' enthält die Endzeit, mit Vorgabe
* '''[?$SELF:_dbegin]''' enthält das Startdatum
* '''"$year, $month, $mday"''' enthält das aktuelle Datum (Jahr, Monat, Tag)
* '''[?$SELF:_ebegin]''' enthält das Enddatum
* '''P_bday''' enthält den gewählten Starttag
* '''"$year-$month-$mday"''' enthält das aktuelle Datum
* '''P_bmon''' enthält den gewählten Startmonat
* '''_bday''' enthält den gewählten Starttag
* '''P_byear''' enthält das gewählte Startjahr
* '''_bmon''' enthält den gewählten Startmonat
* '''P_eday''' enthält den gewählten Endtag
* '''_bday''' enthält das gewählte Startjahr
* '''P_emon''' enthält den gewählten Endmonat
* '''_eday''' enthält den gewählten Endtag
* '''P_eyear''' enthält das gewählte Endjahr
* '''_emon''' enthält den gewählten Endmonat
* '''_eday''' enthält das gewählte Endjahr


===Definition===
===Definition===
<pre>
<pre>
([[$SELF:_bhm,"00:00"]] and [?$SELF:_dbegin] eq "$year-$month-$mday")\
([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_byear] == $year and [?$SELF:P_bmon] == $month and [?$SELF:P_bday] == $mday)\
   ({Log 1, "Alarmstart"})\
   ({Log 1, "Alarmstart"})\
DOELSEIF ([[$SELF:_ehm,"00:00"]] and [?$SELF:_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_eyear] == $year and [?$SELF:P_emon] == $month and [?$SELF:P_eday] == $mday)\
   ({Log 1, "Alarmstop"})</pre>
   ({Log 1, "Alarmstop"})</pre>
===wesentliche Attribute===
===wesentliche Attribute===
<pre>
<pre>
cmdState 1|0
cmdState 1|0
group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy ohne datetimepicker Widget
readingList P_bhm P_bday P_bmon P_byear P_ehm P_eday P_emon P_eyear
icon time_calendar
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
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
</pre>
</pre>


===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===
===Laborgruppe zum Import mit [[DOIF/Import von Code Snippets|Raw definition]]===
<pre>
<pre>
define datumsbereich_Labor0 DOIF ([[$SELF:_bhm,"00:00"]] and [?$SELF:_dbegin] eq "$year-$month-$mday")\
define datumsbereich_Labor0 DOIF ([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_byear] == $year and [?$SELF:P_bmon] == $month and [?$SELF:P_bday] == $mday)\
   ({Log 1, "Alarmstart"})\
   ({Log 1, "Alarmstart"})\
DOELSEIF ([[$SELF:_ehm,"00:00"]] and [?$SELF:_dende] eq "$year-$month-$mday" or ["^global$:^MODIFIED $SELF$"])\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_eyear] == $year and [?$SELF:P_emon] == $month and [?$SELF:P_eday] == $mday)\
   ({Log 1, "Alarmstop"})
   ({Log 1, "Alarmstop"})
attr datumsbereich_Labor0 alias Terminspanne
attr datumsbereich_Labor0 alias Terminspanne
Zeile 160: Zeile 109:
attr datumsbereich_Labor0 group Labor: Datumsbereich von HH:MM dd.mm.yyyy bis HH:MM dd.mm.yyyy ohne datetimepicker Widget
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 icon time_calendar
attr datumsbereich_Labor0 readingList _bhm _bday _bmon _byear _ehm _eday _emon _eyear
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 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 setList P_bhm:time\
attr datumsbereich_Labor0 userReadings _dbegin:_b(year|mon|day).* {\
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 \
  return ReadingsVal($name,"_byear","none")."-".ReadingsVal($name,"_bmon","none")."-".ReadingsVal($name,"_bday","none");;\
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 \
_dende:_e(year|mon|day).* {\
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 \
return ReadingsVal($name,"_eyear","none")."-".ReadingsVal($name,"_emon","none")."-".ReadingsVal($name,"_eday","none");;\
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 webCmd P_bhm:P_bday:P_bmon:P_byear:P_ehm:P_eday:P_emon:P_eyear
 
attr datumsbereich_Labor0 webCmd _bhm:_bday:_bmon:_byear:_ehm:_eday:_emon:_eyear
attr datumsbereich_Labor0 widgetOverride setList:textField-long
attr datumsbereich_Labor0 widgetOverride setList:textField-long


Zeile 178: Zeile 125:
==Links==
==Links==
* [[DOIF]]
* [[DOIF]]
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimetieren]]
* [[DOIF/Labor - ausführbare, praxisnahe Beispiele als Problemlösung zum Experimentieren]]




[[Kategorie:Code Snippets]]
[[Kategorie:Code Snippets]]

Aktuelle Version vom 8. März 2017, 20:06 Uhr

Info green.pngEine aktuelle DOIF-Version ist erforderlich


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 für den Eigennamen des DOIF
  • Defaultwert
  • Ausgabeformatierung: [<Device>:<Reading>:"<Regex>":<Output>] 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.
Durch die Ausgabeformatierung wird die Uhrzeit und das Datum extrahiert und in das passende Vergleichsformat gebracht. Das Widget liefert Tag und Monat zweistellig und ergänzt einstellige Angaben mit einer führenden Null, diese wird duch Multiplikation mit 1 eliminiert. Der aktuelle Tag $mday und der Monat $month werden ohne führende Null geliefert.

Readings

  • [[$SELF:P_begin:"(\d\d:\d\d)$","00:00"]] gibt die Beginnzeit zurück, mit Vorgabe
  • [[$SELF:P_ende:"(\d\d:\d\d)$","00:00"]] gibt die Endzeit zurück, mit Vorgabe
  • "$year-$month-$mday" enthält das aktuelle Datum
  • [?$SELF:P_begin:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] filtert Tag($1), Monat($2), Jahr($3) und formatiert die Ausgabe für das Startdatum
  • [?$SELF:P_ende:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] filtert Tag($1), Monat($2), Jahr($3) und formatiert die Ausgabe für das Enddatum

Definition

([[$SELF:P_begin:"(\d\d:\d\d)$","00:00"]] and [?$SELF:P_begin:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday")\
   {Log 1, "Alarmstart"}\
DOELSEIF ([[$SELF:P_ende:"(\d\d:\d\d)$","00:00"]] and [?$SELF:P_ende:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] 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
webCmd P_begin:P_ende

Laborgruppe zum Import mit Raw definition

define datumsbereich_Labor1 DOIF ([[$SELF:P_begin:"(\d\d:\d\d)$","00:00"]] and [?$SELF:P_begin:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] eq "$year-$month-$mday")\
   {Log 1, "Alarmstart"}\
DOELSEIF ([[$SELF:P_ende:"(\d\d:\d\d)$","00:00"]] and [?$SELF:P_ende:"^(\d\d).(\d\d).(\d\d\d\d)":$3."-".($2*1)."-".($1*1)] 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 webCmd P_begin:P_ende
attr datumsbereich_Labor1 widgetOverride setList:textField-long

save

Zeitspanne zwischen zwei Terminen

Beschreibung

Info green.pngHinweis: Verwendung von
  • readingList, setList, webCmd, cmdState
  • $SELF
  • ["^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.
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
  • "$year, $month, $mday" enthält das aktuelle Datum (Jahr, Monat, Tag)
  • 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_byear] == $year and [?$SELF:P_bmon] == $month and [?$SELF:P_bday] == $mday)\
   ({Log 1, "Alarmstart"})\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_eyear] == $year and [?$SELF:P_emon] == $month and [?$SELF:P_eday] == $mday)\
   ({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

Laborgruppe zum Import mit Raw definition

define datumsbereich_Labor0 DOIF ([[$SELF:P_bhm,"00:00"]] and [?$SELF:P_byear] == $year and [?$SELF:P_bmon] == $month and [?$SELF:P_bday] == $mday)\
   ({Log 1, "Alarmstart"})\
DOELSEIF ([[$SELF:P_ehm,"00:00"]] and [?$SELF:P_eyear] == $year and [?$SELF:P_emon] == $month and [?$SELF:P_eday] == $mday)\
   ({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 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

Links