[gelöst] DOIF wird nicht sequenziell abgearbeitet

Begonnen von Loredo, 17 Juli 2015, 21:37:55

Vorheriges Thema - Nächstes Thema

Loredo

Hallo,

ich habe ein DOIF, bei dem alle Trigger nur ansprechen sollen, wenn bestimmte Vorgaben immer erfüllt sind. Jeder Trigger für sich hat aber noch weitere Kriterien um auszulösen.

Dafür habe ich im ersten Trigger diejenigen Fälle in negierter Schreibweise definiert, die für alle danach folgenden DOELSEIF zutreffen sollen.
Das DOIF enthält aber nicht alle Devices, die in den DOELSEIF später vorkommen.
Nun habe ich beobachtet, dass bei Events von Geräten, die nur im DOELSEIF enthalten sind, diese trotzdem auslösen, obwohl das vorgelagerte DOIF das eigentlich verhindern sollte, denn die dort definierten Zustände sind nicht erfüllt.


Versteht mich jemand? ;-)

Hier ein List:



Internals:
   CFGFN
   DEF        (
   [BR_Shutter_control] eq "manual" or
   [ApartmentMode] ne "night" or
   [BR_Shadowing] eq "on"
)


DOELSEIF
(
   [netatmo_indoor_air] eq "good" and
   [rgr_Residents] ne "gone" and
   [Forecast:temperature] >= 12 and
   [BR_Window] ne "closed"
)
(
   set BR_Shutter:FILTER=pct>28 28,
   set BR_Shutter:FILTER=pct=0 28
)


DOELSEIF
(
   [netatmo_indoor_air] eq "good" and
   (
      [rgr_Residents] eq "gone" or
      [BR_Window] eq "closed" or
      [Forecast:temperature] < 12
   )
)
(
   set BR_Shutter:FILTER=pct>0 close
)


DOELSE


   NAME       di_BR_Shutter_do_night
   NR         115815
   NTFY_ORDER 50-di_BR_Shutter_do_night
   STATE      inactive
   TYPE       DOIF
   CHANGETIME:
   Helper:
     Dblog:
       Cmd_event:
         Dblog:
           TIME       1437161439.26177
           VALUE      BR_Shutter_control
       Cmd_nr:
         Dblog:
           TIME       1437161439.26177
           VALUE      1
       State:
         Dblog:
           TIME       1437161439.26177
           VALUE      inactive
       Wait_timer:
         Dblog:
           TIME       1437158917.01013
           VALUE      no timer
   Readings:
     2015-07-17 21:30:39   cmd_event       BR_Shutter_control
     2015-07-17 21:30:39   cmd_nr          1
     2015-07-17 21:30:40   e_BR_Shutter_control_STATE auto
     2015-07-17 21:30:39   state           inactive
   Condition:
     0             InternalDoIf('BR_Shutter_control','STATE','') eq "manual" or   InternalDoIf('ApartmentMode','STATE','') ne "night" or   InternalDoIf('BR_Shadowing','STATE','') eq "on"
     1             InternalDoIf('netatmo_indoor_air','STATE','') eq "good" and   InternalDoIf('rgr_Residents','STATE','') ne "gone" and   ReadingValDoIf('Forecast','temperature','') >= 12 and   InternalDoIf('BR_Window','STATE','') ne "closed"
     2             InternalDoIf('netatmo_indoor_air','STATE','') eq "good" and   (      InternalDoIf('rgr_Residents','STATE','') eq "gone" or      InternalDoIf('BR_Window','STATE','') eq "closed" or      ReadingValDoIf('Forecast','temperature','') < 12   )
   Devices:
     0           BR_Shutter_control ApartmentMode BR_Shadowing
     1           netatmo_indoor_air rgr_Residents Forecast BR_Window
     2           netatmo_indoor_air rgr_Residents BR_Window Forecast
     all         BR_Shutter_control ApartmentMode BR_Shadowing netatmo_indoor_air rgr_Residents Forecast BR_Window
   Do:
     0
     1             set BR_Shutter:FILTER=pct>28 28,   set BR_Shutter:FILTER=pct=0 28
     2             set BR_Shutter:FILTER=pct>0 close
     3
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           BR_Shutter_control:STATE ApartmentMode:STATE BR_Shadowing:STATE
     1           netatmo_indoor_air:STATE rgr_Residents:STATE BR_Window:STATE
     2           netatmo_indoor_air:STATE rgr_Residents:STATE BR_Window:STATE
     all         BR_Shutter_control:STATE ApartmentMode:STATE BR_Shadowing:STATE netatmo_indoor_air:STATE rgr_Residents:STATE BR_Window:STATE
   Itimer:
   Readings:
     1           Forecast:temperature
     2           Forecast:temperature
     all         Forecast:temperature
   State:
   Timerfunc:
   Trigger:
Attributes:
   alias      Automation: Shutter BR Privacy Night
   cmdState   inactive|28|closed|active
   room       Bedroom
   wait       0:15:15



Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Damian

Zitat von: Loredo am 17 Juli 2015, 21:37:55
Hallo,

ich habe ein DOIF, bei dem alle Trigger nur ansprechen sollen, wenn bestimmte Vorgaben immer erfüllt sind. Jeder Trigger für sich hat aber noch weitere Kriterien um auszulösen.

Dafür habe ich im ersten Trigger diejenigen Fälle in negierter Schreibweise definiert, die für alle danach folgenden DOELSEIF zutreffen sollen.
Das DOIF enthält aber nicht alle Devices, die in den DOELSEIF später vorkommen.
Nun habe ich beobachtet, dass bei Events von Geräten, die nur im DOELSEIF enthalten sind, diese trotzdem auslösen, obwohl das vorgelagerte DOIF das eigentlich verhindern sollte, denn die dort definierten Zustände sind nicht erfüllt.


Es werden nur die Bedingungen ausgewertet, die auch das Device des Triggers beinhalten, alle anderen werden nicht berücksichtigt.

Wenn also deine erste Bedingung auch bei anderen Triggern ausgewertet werden soll, dann musst du die jeweiligen Devices dort auch angeben (z. B. mit: ... or [<DEVICE>:?])

Gruß

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

Loredo

Danke, das hatte ich vermutet. Jetzt habe ich Gewissheit  :)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER