DOIF checkall: Funktioniert nicht

Begonnen von heikoh81, 03 Juni 2016, 23:34:54

Vorheriges Thema - Nächstes Thema

heikoh81

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

Damian

Das checkall-Attribut ist geplant aber noch nicht programmiert.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

heikoh81

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

Ellert

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.

heikoh81

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

Ellert

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.