Die Frage ist, was sinnvoll ist
Möglichkeit 1: Du definierst die beiden Geräte als Things in openHAB. Anschließend legst Du eine Rule an, die auf die verschiedenen Tastendrücke reagiert. Die Rule sendet dann den jeweils passenden Befehl an den Shelly im Rollershutter Modus.
Denke auch daran, dass Du vermutlich auch Stop als Kommando haben willst, also z.B. I4_Ch1 Während STOP -> UP, I4_Ch1 während UP oder DOWN -> STOP (und das gleiche für I4_Ch2, nur entsprechend mit DOWN/STOP als Befehl).
Möglichkeit 2: Du lässt openHAB für die Auswertung der Tasten außen vor und nutzt die eingebaute Scripting Fähigkeit, d.h. letztendlich sendet der I4 die Steuerbefehle dann
direkt an den 2PM.
Vorteil von Möglichkeit 2: Funktioniert auch, wenn openHAB mal nicht läuft (so unwahrscheinlich Dir das auch erscheinen mag).
Nachteil: Du musst Dich zusätzlich mit Shelly auseinandersetzen, über die Anbindung in openHAB hinaus.
Für die Möglichkeit 1 brauchst Du mutmaßlich ein Rollershutter Item, welches mit dem 2pm rollershutter Channel verlinkt ist. Weiterhin benötigst Du die Namen der Channel, welche die Tastendrücke der beiden zu nutzenden Tasten als Events an den Bus melden. Weiterhin musst Du wissen, welches Event beim (kurzen?) Drücken der Taste gemeldet wird, das kannst Du leicht im events.log nachschauen (kurz nacheinander die beiden Tasten drücken und dann das Log nach dem Thing filtern). Eine Rule, welche auf beide Tastendrücke reagiert, sollte reichen, Du kannst innerhalb der Rule über die implizite Variable
triggeringChannel erfahren, welcher der beiden Channel die Rule getriggert hat, das sieht z.B. so aus:
Code: Alles auswählen
var Boolean bShutterStop = true
rule "Taster für Shutter"
when
Channel 'shelly:i4:input1#button' triggered SHORT_PRESSED or
Channel 'shelly:i4:input2#button' triggered SHORT_PRESSED
then
if(bShutterStop) {
if(triggeringChannel.contains("input1")) // UP
myShutter.sendCommand(UP)
if(triggeringChannel.contains("input2")) // DOWN
myShutter.sendCommand(DOWN)
bShutterStop = false
} else {
myShutter.sendCommand(STOP)
bShutterStop = true
}
end
rule "Shutter Rückmeldung"
when
Item myShutter changed
then
bShutterStop = true
end
Da man keine Information darüber hat, ob der Laden gerade fährt oder nicht, muss die Rule diese Information selbst speichern. Die zweite Rule wertet das Erreichen eine Position als Rückmeldung, dass der Rollladen gestoppt hat (ich kenne das Shelly Binding nicht, gehe aber davon aus, dass sich das Binding in dieser Beziehung so verhält wie etliche andere Bindings auch, Positionsmeldung am Ende der Fahrt).