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|...
Versuche [?$SELF:state] =~ "state1|state2"
oder [?$SELF:state] =~ "state(1|2)"
state2 soll aber triggern, state1 nur abgefragt werden.
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
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.
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|..."
Da ich die "sprechenden" Status eh brauche, passt das mit =~ "state1" schon.
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.