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
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
Danke, das hatte ich vermutet. Jetzt habe ich Gewissheit :)