Hallo,
mein Problem hat diesen Hintergrund zur Steuerung eines Dachfensters https://forum.fhem.de/index.php/topic,19583.msg440864.html#msg440864 (https://forum.fhem.de/index.php/topic,19583.msg440864.html#msg440864):
xxx4: ein FS20-Taster sendet toggle-Events. die sollen das Fenster öffnen und schließen
dummy VELUX hält den Status opened/closed
VELUX_OPEN und VELUX_CLOSED sind 2 Arduino/Firmata Ausgänge, die elektronisch die Tasten der Fernbedienung drücken.
Da die Fernbedienung schläft, müssen die Tasten VELUX_OPEN bzw. VELUX_CLOSE jeweils 2 mal gedrückt werden:
set VELUX_CLOSE on-for-timer 0.5; sleep 2.0; set VELUX_CLOSE on-for-timer 0.5; set VELUX closed
Dies bzw. die entsprechende Version für OPEN funktioniert wunderbar.
Nun soll der Toggle-Taster mit DOIF dazukommen, hier habe ich alles mögliche probiert, mit und ohne "sleep" bzw. "wait" und "on-for-timer", komme aber nicht weiter:
Das nicht:
define n.velux DOIF ([xxx4:state] eq "toggle" and [?VELUX:state] eq "closed") (set VELUX_OPEN on-for-timer 0.5, sleep 2.0, set VELUX_OPEN on-for-timer 0.5, set VELUX opened) \
DOELSEIF ([xxx4:state] eq "toggle" and [?VELUX:state] eq "opened") (set VELUX_CLOSE on-for-timer 0.5, sleep 2.0, set VELUX_CLOSE on-for-timer 0.5, set VELUX closed)
und das nicht mit einzelnen Flanken:
define n.velux DOIF ([xxx4:state] eq "toggle" and [?VELUX:state] eq "closed") (set VELUX_OPEN on)(set VELUX_OPEN off)(set VELUX_OPEN on)(set VELUX_OPEN off, set VELUX opened) \
DOELSEIF ([xxx4:state] eq "toggle" and [?VELUX:state] eq "opened") (set VELUX_CLOSE on)(set VELUX_CLOSE off)(set VELUX_CLOSE on)(set VELUX_CLOSE off, set VELUX closed)
attr n.velux wait 0.5,2.0,0.5:0.5,2.0,0.5
Teilweise wird auch IF und ELSE gleichzeitig ausgelöst.
Kann jemand ´nen Tipp geben?
VG Holger
Wie oft sendet der Toggle-Taster den Toggle-Befehl? Was steht im Event zeigt der Event-Monitor?
Warum bleibst Du nicht bei der funktionierenden Sequenz?
(set VELUX_OPEN on-for-timer 0.5) (set VELUX_OPEN on-for-timer 0.5, set VELUX opened)
(set VELUX_CLOSE on-for-timer 0.5) (set VELUX_CLOSE on-for-timer 0.5, set VELUX closed)
und wait 0,2:0,2
Danke Ellert,
ich kam eine Weile nicht dazu, jetzt ist es geklärt:
"do always" hat gefehlt, um xxx4 toggle zu triggern (das ist mir allerdings nicht ganz klar...?), deshalb habe ich alle möglichen Varianten versucht, ohne dass sie eigentlich ausgelöst wurden.
Der andere Fehler war, das ich "wait 2,2" statt "wait 0,2:0,2 benutzen wollte.
Zu guter Letzt fand ich noch das "blink", so dass mein code nun so aussieht (und funktioniert):
define n.velux DOIF (([xxx4:state] eq "toggle" or [xxx4:state] eq "on") and [VELUX:state] eq "closed") (set VELUX_OPEN blink 2 1, set VELUX opened) \
DOELSEIF (([xxx4:state] eq "toggle" or [xxx4:state] eq "off") and [VELUX:state] eq "opened") (set VELUX_CLOSE blink 2 1, set VELUX closed)
Allerdings kämpft mei begrenzter Verstand noch mit dem Begreifen des Trigger-Mechanismus :-[