Hintergrund ist, dass ich mehrere LED-Devices habe, bei denen ich bei Bedarf einen Endlos-Farbverlauf laufen lasse. Ziel ist, dass der Verlauf automatisch beendet wird, wenn die LED einige Zeit ausgeschaltet wird (also Reading 'val' 0 wird).
Ich habe dafür für jedes Devices ein solches DOIF:
DEF ([sz_lightLedWall:val] == 0) ({cycleLedDeviceStop("$DEVICE")})
wait 1800
Sprich: wenn "val" für 30 Minuten auf 0 steht, dann soll "cycleLedDeviceStop" ausgeführt werden.
Im Moment habe ich drei solcher DOIFs (eins für jede LED). Hat jemand eine Idee, wie man die zu einem DOIF zusammenfassen könnte?
Meine bisherigen Ideen:
Mit DOELSEIF
([sz_lightLedWall:val] == 0) ({cycleLedDeviceStop("$DEVICE")})
DOELSEIF
([ledDevice2:val] == 0) ({cycleLedDeviceStop("$DEVICE")})
DOELSEIF
([ledDevice3:val] == 0) ({cycleLedDeviceStop("$DEVICE")})
Das Problem ist jedoch, dass es ja inhaltlich kein "ELSE" sein soll. Die Logiken sollen ja pro Device unabhängig voneinander laufen. Soweit ich weiß steht DOIF immer in einem der cmds. Außerdem gibt es hier immer noch duplizierten Code.
Andere Idee wäre angelehnt an ein Beispiel aus der commandref:
define di_window_open DOIF ["^window_:open|tilted"])
(defmod at_$DEVICE at +00:05 set send window $DEVICE open)
DOELSEIF (["^window_:closed"])
(delete at_$DEVICE)
Finde da jedoch nicht so schön, dass man dort nicht "wait" von DOIF nutzen kann, sondern selbst mit temporären ats/sleeps arbeiten muss.
Hat da jemand noch eine richtig schicke Idee evtl.? :) Danke!
Ein DOIF hat ja nur einen wait-Timer und wenn du led2 unabhängig von led1 ausschalten willst, dann brauchst du für jedes led-Device einen eigenen Timer und damit ein separates DOIF oder eben die Lösung mit at/sleep.
Ok, das war auch so mein Stand, aber dann ist das eben so. Danke für die schnelle Antwort!