FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Per am 10 April 2016, 10:55:11

Titel: (erledigt) or oder DOELSEIF
Beitrag von: Per am 10 April 2016, 10:55:11
Ich habe das Problem, dass sich
... DOIF ([]) () () ()
DOELSEIF ([?$SELF:state] =~ "state1" and ([test1] eq "on")) (cmd1)
DOELSEIF ([$SELF:state] eq "state2" and ([test1] eq "on")) (cmd1)

anders verhält als
... DOIF (([?$SELF:state] =~ "state1" or [$SELF:state] eq "state2") and ([test1] eq "on")) (cmd1)
Da sich hinter test1 eine umfangreichere Abfrage verbirgt, wäre zwar die zweite Variante schöner, aber die löst schon (nachvollziehbar!) bei state1 das DOELSEIF aus. Die erste arbeitet wie gewünscht.
Kann ich das trotzdem irgendwie vereinfachen?

Bei beiden gilt:
cmdState state0,state1,state2|...
wait 10,10,1|...
Titel: Antw:or oder DOELSEIF
Beitrag von: Ellert am 10 April 2016, 12:31:10
Versuche [?$SELF:state] =~ "state1|state2" oder [?$SELF:state] =~ "state(1|2)"
Titel: Antw:or oder DOELSEIF
Beitrag von: Per am 10 April 2016, 13:45:47
state2 soll aber triggern, state1 nur abgefragt werden.
Titel: Antw:or oder DOELSEIF
Beitrag von: Ellert am 10 April 2016, 17:05:59
Das fehlende ? hatte ich übersehen, dann bleib Dir wohl nicht erspart die unterschiedlichen Ausprägungen im Triggerverhalten auszuschreiben. Wobei Du
Zitat[?$SELF:state] =~ "state1"
abkürzen kannst
Zitat$cmd == 1
Titel: Antw:or oder DOELSEIF
Beitrag von: Per am 10 April 2016, 17:41:13
Zitat von: Ellert am 10 April 2016, 17:05:59Wobei Du  abkürzen kannst
Da sich hinter "meinem" =~ "state1" 10 verschiedene Stati (https://forum.fhem.de/index.php/topic,51060.msg437553.html#msg437553) verbergen, spare ich da nicht wirklich ;).
Dennoch Danke.
Titel: Antw:or oder DOELSEIF
Beitrag von: Ellert am 11 April 2016, 10:20:11
Bei 10 Stati könntest Du die triggernden und di nicht triggernden Stati per Regexp zusammenfassen, z.B. nicht triggernd:
$cmd =~"1.1|2.2|..."
Titel: Antw:or oder DOELSEIF
Beitrag von: Per am 11 April 2016, 10:44:22
Da ich die "sprechenden" Status eh brauche, passt das mit =~ "state1" schon.
Titel: Antw:or oder DOELSEIF
Beitrag von: Per am 26 April 2016, 11:18:06
Eigentlich hatte ich die Doku schon xmal gelesen, aber  :-X
... DOIF (([?$SELF:state] =~ "state1" or [$SELF:"state2"]) and ([test1] eq "on")) (cmd1)
bringt das Gewünschte.