Die CheckAll-Funktionalität wird immer mal wieder nachgefragt, hier wird ein Weg aufgezeigt wie CheckAll nachgebildet werden kann.
Das nachstehende DOIF prüft bei einem Trigger alle Bedingungen und führt die zugehörigen Befehle aus, wenn die Bedingung wahr ist.
(["^(du1|du2|du3)$"] and $cmd =~ "0|8") ## Starttrigger: alle im DOIF triggernden Geräte, initialized oder Endzustand
##Erster CheckAll-Abschnitt
DOELSEIF ([$SELF:cmd] =~ "1" and [du1] eq "on" ) ## Zustand 1 und Bedingung ist wahr, triggert
DOELSEIF ([$SELF:cmd] =~ "1" and !([du1] eq "on")) ##Zustand 1 und Bedingung ist unwahr, triggert
##Zweiter CheckAll-Abschnitt
DOELSEIF ([$SELF:cmd] =~ "2|3" and [du2] eq "x1" ) ##Zustand 2 o. 3 und Bedingung ist wahr, triggert
DOELSEIF ([$SELF:cmd] =~ "2|3" and !([du2] eq "x1")) ##Zustand 2 o. 3 und Bedingung ist unwahr, triggert
##Dritter CheckAll-Abschnitt
DOELSEIF ([$SELF:cmd] =~ "4|5" and [du3] eq "x1" ) ##Der vorhergehende Zustand des CheckAll-Abschnitts für wahr o. unwahr und Bedingung ist wahr, triggert
DOELSEIF ([$SELF:cmd] =~ "4|5" and !([du3] eq "x1")) ##Der vorhergehende Zustand des CheckAll-Abschnitts für wahr o. unwahr und Bedingung ist unwahr, triggert
##ggf. weitere CheckAll-Abschnitte
DOELSEIF ([$SELF:cmd] =~ "6|7") ##Endzustand nach CheckAll, es triggern die beiden Bedingungszweige des letzten CheckAll-Abschnittes
## du1, du2, du3 sind Dummys, stellvertretend für eigene triggernde Geräte. Den Bedingungen sollten nur Befehle folgen, die nicht in die Selbsttriggerung eingreifen
## Die Bedingungen, wie im ersten CheckAll-Abschnitt [du1] eq "on" und die komplementäre Bedingung !([du1] eq "on"), stehen für beliebige eigene Bedingungen und deren Komplement.
## Die komplementäre Bedingung ist erforderlich, damit im Falle einer unwahren Bedingung weitergeschaltet wird.
## Für dieses DOIF muss die Selbsttriggerung eingeschaltet sein und für jeden Bedingungszweig muss ein Wait-Timer gesetzt werden.
## selftrigger wait
## wait .1:.1:.1:.1:.1:.1:.1:.1
Moin,
ich würde dies gerne mal testen, aber irgendwie scheint immer nur das Erste zu triggern:
Internals:
CFGFN
DEF ([10:29] and $cmd =~ "0|5")
({Log 3,"1 Events $EVENTS"})
##1. Homeoffice
DOELSEIF ([$SELF:cmd] =~ "1")
({Log 3,"2 Events $EVENTS"})
##2. Schulfrei
DOELSEIF ([$SELF:cmd] =~ "2")
({Log 3,"3 Events $EVENTS"})
##3. Krank
DOELSEIF ([$SELF:cmd] =~ "3")
({Log 3,"4 Events $EVENTS"})
DOELSEIF ([$SELF:cmd] =~ "4")
({Log 3,"5 Events $EVENTS"})
NAME doif_Heizungstest
NR 320
NTFY_ORDER 50-doif_Heizungstest
STATE cmd_1
TYPE DOIF
Helper:
Dblog:
Cmd:
Dblog:
TIME 1463128140.0269
VALUE 1
Cmd_event:
Dblog:
TIME 1463128140.0269
VALUE timer_1
Cmd_nr:
Dblog:
TIME 1463128140.0269
VALUE 1
State:
Dblog:
TIME 1463128140.0269
VALUE cmd_1
Readings:
2016-05-13 10:29:00 cmd 1
2016-05-13 10:29:00 cmd_event timer_1
2016-05-13 10:29:00 cmd_nr 1
2016-05-13 10:29:00 state cmd_1
2016-05-13 10:29:00 timer_1_c1 14.05.2016 10:29:00
Condition:
0 DOIF_time_once($hash,$hash->{timer}{0},$wday,"") and $cmd =~ "0|5"
1 ReadingValDoIf($hash,'doif_Heizungstest','cmd','','',AttrVal($hash->{NAME},'notexist',undef)) =~ "1"
2 ReadingValDoIf($hash,'doif_Heizungstest','cmd','','',AttrVal($hash->{NAME},'notexist',undef)) =~ "2"
3 ReadingValDoIf($hash,'doif_Heizungstest','cmd','','',AttrVal($hash->{NAME},'notexist',undef)) =~ "3"
4 ReadingValDoIf($hash,'doif_Heizungstest','cmd','','',AttrVal($hash->{NAME},'notexist',undef)) =~ "4"
Days:
Devices:
1 doif_Heizungstest
2 doif_Heizungstest
3 doif_Heizungstest
4 doif_Heizungstest
all doif_Heizungstest
Do:
0:
0 {Log 3,"1 Events $EVENTS"}
1:
0 {Log 3,"2 Events $EVENTS"}
2:
0 {Log 3,"3 Events $EVENTS"}
3:
0 {Log 3,"4 Events $EVENTS"}
4:
0 {Log 3,"5 Events $EVENTS"}
Helper:
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent timer_1
timereventsState
triggerDev
timerevents:
timer_1
triggerEvents:
timer_1
Internals:
Interval:
Itimer:
Localtime:
0 1463214540
Readings:
1 doif_Heizungstest:cmd
2 doif_Heizungstest:cmd
3 doif_Heizungstest:cmd
4 doif_Heizungstest:cmd
all doif_Heizungstest:cmd
Realtime:
0 10:29:00
Regexp:
All:
State:
Time:
0 10:29:00
Timecond:
0 0
Timer:
0 0
Timers:
0 0
Triggertime:
1463214540:
localtime 1463214540
Hash:
Attributes:
loglevel 6
notexist novalue
room 0_02_Heizung
selftrigger wait
wait wait .1:.1:.1:.1:.1
Was mache ich falsch?
Danke und Gruß Daniel
Wahrscheinlich fehlt das Attribut timerWithWait