Hauptmenü

(erledigt) or oder DOELSEIF

Begonnen von Per, 10 April 2016, 10:55:11

Vorheriges Thema - Nächstes Thema

Per

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|...

Ellert

#1
Versuche [?$SELF:state] =~ "state1|state2" oder [?$SELF:state] =~ "state(1|2)"

Per

state2 soll aber triggern, state1 nur abgefragt werden.

Ellert

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

Per

Zitat von: Ellert am 10 April 2016, 17:05:59Wobei Du  abkürzen kannst
Da sich hinter "meinem" =~ "state1" 10 verschiedene Stati verbergen, spare ich da nicht wirklich ;).
Dennoch Danke.

Ellert

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|..."

Per

Da ich die "sprechenden" Status eh brauche, passt das mit =~ "state1" schon.

Per

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.