Hallo zusammen,
Update 04.06.2016: Stand heute wird CheckAll nicht nativ unterstützt, ich hatte den Post von Ellert falsch verstanden.
ich möchte in einem DOIF die recht neue Checkall-Funktionalität verwenden.
- Ereignis ist: [TVPhilipsSchlafzimmer] eq "present"
- cmd_1 und cmd_2 werden ausgeführt, cmd_3 aber nicht, obwohl definitv TVWohnzimmer=absent UND TVEssecke=absent erfüllt ist.
Wieso?
([{sunset_abs(-2940,"16:01:43","22:31:43")}-23:58:00] and [TVPhilipsSchlafzimmer] eq "present" and [?PollinZufall1Schlaf] eq "on")
##cmd_1
(IF ([TVPhilipsSchlafzimmerSteuertZufallslicht] eq "on") (set NAME=PollinZufall1Schlaf:FILTER=STATE=on off))
DOELSEIF ([{sunset_abs(-2940,"16:01:43","22:31:43")}-23:58:00] and [TVPhilipsSchlafzimmer] eq "present")
##cmd_2
(IF ([TVPhilipsSchlafzimmerSteuertPflanzenlicht] eq "on") (set NAME=PollinSchlaf1Pflanze:FILTER=STATE=off on))
(set LightSchlaf2Bil pct 5 : transitiontime 20)
(set LightSchlaf2Bil off)
(set LightSchlaf2TV pct 40 : transitiontime 20)
DOELSEIF ([{sunset_abs(-2940,"16:01:43","22:31:43")}-23:58:00] and [TVPhilipsSchlafzimmer] eq "present" and [?TVWohnzimmer] eq "absent" and [?TVEssecke] eq "absent")
##cmd_3
(IF ([TVPhilipsSchlafzimmerSteuertLEDZweige] eq "on") (set NAME=PollinWohnLEDZweige:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerEINSchaltetGartenAUS] eq "on") (set NAME=PollinWohn1Garten:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerEINSchaltetGartenwegAUS] eq "on") (set NAME=PollinGartenweg:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertPergolaRechtsOben] eq "on") (set NAME=PollinPergolaRechtsOben:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertPergolaLinksOben] eq "on") (set NAME=PollinPergolaLinksOben:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertPergolaLinksUnten] eq "on") (set NAME=PollinPergolaLinksUnten:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertWeisserBaum] eq "on") (set NAME=PollinWeisserBaum:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertChristbaum] eq "on") (set NAME=PollinChristbaum:FILTER=STATE=on off))
DOELSEIF ([TVPhilipsSchlafzimmer:"absent"])
##cmd_4
(IF ([TVPhilipsSchlafzimmerSteuertPflanzenlicht] eq "on") (set NAME=PollinSchlaf1Pflanze:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerAUSSchaltetGartenAUS] eq "on") (set NAME=PollinWohn1Garten:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerAUSSchaltetGartenwegAUS] eq "on") (set NAME=PollinGartenweg:FILTER=STATE=on off))
DOELSE
##cmd_5
()
attr wait 0:2,0,1,0:2,2,2,2,2,2,2,2:2,2,2:0
zusätzlich probiert habe ich
attr selftrigger wait
sowie alternativ
attr selftrigger all
Leider wird cmd_3 nie ausgeführt, obwohl alle Bedingungen erfüllt sind.
Wo ist mein Denkfehler?
List:
Internals:
DEF ([{sunset_abs(-2940,"16:01:43","22:31:43")}-23:58:00] and [TVPhilipsSchlafzimmer] eq "present" and [?PollinZufall1Schlaf] eq "on")
##cmd_1
(IF ([TVPhilipsSchlafzimmerSteuertZufallslicht] eq "on") (set NAME=PollinZufall1Schlaf:FILTER=STATE=on off))
DOELSEIF ([{sunset_abs(-2940,"16:01:43","22:31:43")}-23:58:00] and [TVPhilipsSchlafzimmer] eq "present")
##cmd_2
(IF ([TVPhilipsSchlafzimmerSteuertPflanzenlicht] eq "on") (set NAME=PollinSchlaf1Pflanze:FILTER=STATE=off on))
(set LightSchlaf2Bil pct 5 : transitiontime 20)
(set LightSchlaf2Bil off)
(set LightSchlaf2TV pct 40 : transitiontime 20)
DOELSEIF ([{sunset_abs(-2940,"16:01:43","22:31:43")}-23:58:00] and [TVPhilipsSchlafzimmer] eq "present" and [?TVWohnzimmer] eq "absent" and [?TVEssecke] eq "absent")
##cmd_3
(IF ([TVPhilipsSchlafzimmerSteuertLEDZweige] eq "on") (set NAME=PollinWohnLEDZweige:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerEINSchaltetGartenAUS] eq "on") (set NAME=PollinWohn1Garten:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerEINSchaltetGartenwegAUS] eq "on") (set NAME=PollinGartenweg:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertPergolaRechtsOben] eq "on") (set NAME=PollinPergolaRechtsOben:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertPergolaLinksOben] eq "on") (set NAME=PollinPergolaLinksOben:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertPergolaLinksUnten] eq "on") (set NAME=PollinPergolaLinksUnten:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertWeisserBaum] eq "on") (set NAME=PollinWeisserBaum:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerSteuertChristbaum] eq "on") (set NAME=PollinChristbaum:FILTER=STATE=on off))
DOELSEIF ([TVPhilipsSchlafzimmer:"absent"])
##cmd_4
(IF ([TVPhilipsSchlafzimmerSteuertPflanzenlicht] eq "on") (set NAME=PollinSchlaf1Pflanze:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerAUSSchaltetGartenAUS] eq "on") (set NAME=PollinWohn1Garten:FILTER=STATE=on off))
(IF ([TVPhilipsSchlafzimmerAUSSchaltetGartenwegAUS] eq "on") (set NAME=PollinGartenweg:FILTER=STATE=on off))
DOELSE
##cmd_5
()
NAME di_TVSchlafzimmer_Present
NR 3145
NTFY_ORDER 50-di_TVSchlafzimmer_Present
STATE cmd_2
TYPE DOIF
Readings:
2016-06-03 23:36:57 Device TVPhilipsSchlafzimmer
2016-06-03 23:37:01 cmd 2.4
2016-06-03 23:37:01 cmd_event TVPhilipsSchlafzimmer
2016-06-03 23:37:01 cmd_nr 2
2016-06-03 23:37:01 cmd_seqnr 4
2016-06-03 23:36:57 e_TVPhilipsSchlafzimmer_STATE present
2016-06-03 23:36:57 e_TVPhilipsSchlafzimmer_events presence: present
2016-06-03 23:37:01 state cmd_2
2016-06-03 21:45:50 timer_1_c1 04.06.2016 21:14:07
2016-06-03 21:45:50 timer_2_c1 03.06.2016 23:58:00
2016-06-03 21:45:50 timer_3_c2 04.06.2016 21:14:07
2016-06-03 21:45:50 timer_4_c2 03.06.2016 23:58:00
2016-06-03 21:45:50 timer_5_c3 04.06.2016 21:14:07
2016-06-03 21:45:50 timer_6_c3 03.06.2016 23:58:00
2016-06-03 23:37:00 wait_timer no timer
Condition:
0 DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and InternalDoIf($hash,'TVPhilipsSchlafzimmer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "present" and InternalDoIf($hash,'PollinZufall1Schlaf','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "on"
1 DOIF_time($hash,$hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,"") and InternalDoIf($hash,'TVPhilipsSchlafzimmer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "present"
2 DOIF_time($hash,$hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,"") and InternalDoIf($hash,'TVPhilipsSchlafzimmer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "present" and InternalDoIf($hash,'TVWohnzimmer','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "absent" and InternalDoIf($hash,'TVEssecke','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "absent"
3 EventDoIf('TVPhilipsSchlafzimmer',$hash,'absent',1)
Days:
Devices:
0 TVPhilipsSchlafzimmer
1 TVPhilipsSchlafzimmer
2 TVPhilipsSchlafzimmer
3 TVPhilipsSchlafzimmer
all TVPhilipsSchlafzimmer
Do:
0:
0 IF ([TVPhilipsSchlafzimmerSteuertZufallslicht] eq "on") (set NAME=PollinZufall1Schlaf:FILTER=STATE=on off)
1:
0 IF ([TVPhilipsSchlafzimmerSteuertPflanzenlicht] eq "on") (set NAME=PollinSchlaf1Pflanze:FILTER=STATE=off on)
1 set LightSchlaf2Bil pct 5 : transitiontime 20
2 set LightSchlaf2Bil off
3 set LightSchlaf2TV pct 40 : transitiontime 20
2:
0 IF ([TVPhilipsSchlafzimmerSteuertLEDZweige] eq "on") (set NAME=PollinWohnLEDZweige:FILTER=STATE=on off)
1 IF ([TVPhilipsSchlafzimmerEINSchaltetGartenAUS] eq "on") (set NAME=PollinWohn1Garten:FILTER=STATE=on off)
2 IF ([TVPhilipsSchlafzimmerEINSchaltetGartenwegAUS] eq "on") (set NAME=PollinGartenweg:FILTER=STATE=on off)
3 IF ([TVPhilipsSchlafzimmerSteuertPergolaRechtsOben] eq "on") (set NAME=PollinPergolaRechtsOben:FILTER=STATE=on off)
4 IF ([TVPhilipsSchlafzimmerSteuertPergolaLinksOben] eq "on") (set NAME=PollinPergolaLinksOben:FILTER=STATE=on off)
5 IF ([TVPhilipsSchlafzimmerSteuertPergolaLinksUnten] eq "on") (set NAME=PollinPergolaLinksUnten:FILTER=STATE=on off)
6 IF ([TVPhilipsSchlafzimmerSteuertWeisserBaum] eq "on") (set NAME=PollinWeisserBaum:FILTER=STATE=on off)
7 IF ([TVPhilipsSchlafzimmerSteuertChristbaum] eq "on") (set NAME=PollinChristbaum:FILTER=STATE=on off)
3:
0 IF ([TVPhilipsSchlafzimmerSteuertPflanzenlicht] eq "on") (set NAME=PollinSchlaf1Pflanze:FILTER=STATE=on off)
1 IF ([TVPhilipsSchlafzimmerAUSSchaltetGartenAUS] eq "on") (set NAME=PollinWohn1Garten:FILTER=STATE=on off)
2 IF ([TVPhilipsSchlafzimmerAUSSchaltetGartenwegAUS] eq "on") (set NAME=PollinGartenweg:FILTER=STATE=on off)
4:
0
Helper:
event presence: present
globalinit 1
last_timer 6
sleepdevice TVPhilipsSchlafzimmer
sleepsubtimer -1
sleeptimer -1
timerdev TVPhilipsSchlafzimmer
timerevent presence: present
triggerDev TVPhilipsSchlafzimmer
timerevents:
presence: present
timereventsState:
presence: present
triggerEvents:
presence: present
triggerEventsState:
presence: present
Internals:
0 TVPhilipsSchlafzimmer:STATE PollinZufall1Schlaf:STATE
1 TVPhilipsSchlafzimmer:STATE
2 TVPhilipsSchlafzimmer:STATE TVWohnzimmer:STATE TVEssecke:STATE
all TVPhilipsSchlafzimmer:STATE PollinZufall1Schlaf:STATE TVWohnzimmer:STATE TVEssecke:STATE
Interval:
0 -1
1 0
2 -1
3 2
4 -1
5 4
Itimer:
Localtime:
0 1465067647
1 1464991080
2 1465067647
3 1464991080
4 1465067647
5 1464991080
Readings:
Realtime:
0 21:14:07
1 23:58:00
2 21:14:07
3 23:58:00
4 21:14:07
5 23:58:00
Regexp:
0:
1:
2:
3:
All:
State:
Time:
0 {sunset_abs(-2940,"16:01:43","22:31:43")}
1 23:58:00
2 {sunset_abs(-2940,"16:01:43","22:31:43")}
3 23:58:00
4 {sunset_abs(-2940,"16:01:43","22:31:43")}
5 23:58:00
Timecond:
0 0
1 0
2 1
3 1
4 2
5 2
Timer:
0 0
1 0
2 0
3 0
4 0
5 0
Timers:
0 0 1
1 2 3
2 4 5
Trigger:
all TVPhilipsSchlafzimmer
Triggertime:
1464991080:
localtime 1464991080
Hash:
1465067647:
localtime 1465067647
Hash:
Attributes:
disable 0
room Pollin
selftrigger all
sortby 21
wait 0:2,0,1,0:2,2,2,2,2,2,2,2:2,2,2:0
Viele Grüße,
Heiko
Das checkall-Attribut ist geplant aber noch nicht programmiert.
Gruß
Damian
Hallo Damian,
danke für deine Antwort.
Zitat von: Damian am 04 Juni 2016, 08:32:22
Das checkall-Attribut ist geplant aber noch nicht programmiert.
Ok, aber wieso werden dann cmd_1 und cmd_2 ausgeführt, nicht aber cmd_3?
Trigger ist in allen Fällen derselbe, nämlich
[{sunset_abs(-2940,"16:01:43","22:31:43")}-23:58:00] and [TVPhilipsSchlafzimmer] eq "present"
Und wie ist dieser Forums-Post von Ellert zu verstehen?
https://forum.fhem.de/index.php/topic,52489.msg442432.html#msg442432
(deshalb dachte ich nämlich, dass es schon funktioniert - oder gilt dieser Beitrag nur für die Self-Triggerung?)
Viele Grüße,
Heiko
ZitatUnd wie ist dieser Forums-Post von Ellert zu verstehen?
https://forum.fhem.de/index.php/topic,52489.msg442432.html#msg442432
(deshalb dachte ich nämlich, dass es schon funktioniert - oder gilt dieser Beitrag nur für die Self-Triggerung?)
Dort wird eine Möglichkeit aufgezeigt, wie man CheckAll nachbilden kann, ohne, dass es in DOIF implementiert ist, das wird, wie beschrieben mit Selbsttriggerung erreicht.
Hallo Ellert,
Zitat von: Ellert am 04 Juni 2016, 17:20:05
Dort wird eine Möglichkeit aufgezeigt, wie man CheckAll nachbilden kann, ohne, dass es in DOIF implementiert ist, das wird, wie beschrieben mit Selbsttriggerung erreicht.
Danke für die Antwort. Also ich habe deinen Beitrag komplett anders interpretiert.
Zitat von: Ellert am 21 April 2016, 17:52:22
Die CheckAll-Funktionalität wird immer mal wieder nachgefragt, mit der Version ab 98_DOIF.pm 11314 2016-04-26 18:29:24Z damian-s kann sie ohne zusätzliches Attribut dargestellt werden.
Habe ich so verstanden: Seit dem Updaten 26.04.2016 kann DOIF das CheckAll ohne zusätzliches Attribut, also einfach so.
Zitat von: Ellert am 21 April 2016, 17:52:22
Das nachstehende DOIF prüft bei einem Trigger alle Bedingungen und führt die zugehörigen Befehle aus, wenn die Bedingung wahr ist.
Dies habe ich als Beispiel interpretiert, das ich aber zugegebener Maßen nicht verstanden habe.
Vielleicht kannst du in dem anderen Post eine Ergänzung machen, dass dies ein Beispiel ist, dass CheckAll "nachbildet", aber nicht nativ unterstützt wird.
Viele Grüße,
Heiko
ZitatDies habe ich als Beispiel interpretiert,
Es ist ein funktionierendes Beispiel, Du kannst damit experimentieren.
Zitatdas ich aber zugegebener Maßen nicht verstanden habe.
Wenn Du eine konkrete Verständnisfrage zu dem Beispiel stellst, versuche ich sie zu beantworten.