Was ich nicht so ganz verstehe, warum fährst Du 20 Sekunden runter und anschließend 8 Sekunden hoch?
Ansonsten (wenn das z.B. notwendig ist, um Lamellen in eine andere Richtung zu fahren) sind ein paar Zeilen überflüssig und die eine oder andere Zeile solltest Du überarbeiten, insbesondere die allererste Zeile (var tShutterCouch) ist nicht gut, denn gerade die Timer Variablen sollten explizit definiert werden:
Code: Alles auswählen
var Timer tShutterCouch = null
rule "Shutter_Couch_set"
when
GF_LivingDining_Shutter_2_set received command ON
then
GF_LivingDining_Shutter_2.sendCommand(DOWN)
tShutterCouch?.cancel
tShutterCouch = createTimer(now.plusSeconds(20), [
if((GF_LivingDining_Shutter_2.state as Number) == 100) {
GF_LivingDining_Shutter_2.sendCommand(UP)
tShutterCouch.reschedule(now.plusSeconds(8))
} else {
GF_LivingDining_Shutter_2.sendCommand(STOP)
GF_LivingDining_Shutter_2.postUpdate(50)
}
])
end
Die Rule sieht etwas anders aus. Sie unterscheidet innerhalb des Timer-Codes, ob der Laden gerade abwärts oder aufwärts fährt. Unabhängig ob Dein Aktor das meldet, setzt openHAB nämlich den Status des Items selbsttändig auf 100 oder 0 wenn ein Fahrbefehl nahc untern bzw. oben kommt.
Das kann man auswerten und entsprechend unterschiedlich reagieren. So wird der Timer-Code nur einmal angelegt. Der Timer wird zweimal gestartet, das passiert aus dem Timer heraus per reschedule. Wenn der Rollladen gestoppt wird, setzt die Rule außerdem den Status auf 50 (das bietet sich ja irgendwie an...)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet