Mehrere DOIFs mit wait zusammenfassen

Begonnen von vbs, 24 Mai 2017, 19:00:50

Vorheriges Thema - Nächstes Thema

vbs

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!

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

vbs

Ok, das war auch so mein Stand, aber dann ist das eben so. Danke für die schnelle Antwort!