Nicht nur scheinbar, sondern tatsächlich

- ist allerdings nicht dem Rollershutter anzulasten, das wäre, wie einen Hammer dafür zu beschimpfen, weil man damit das Holz nicht absägen kann.
Wenn Du Endlagenerkennung hast, macht das die ganze Sache etwas angenehmer. Du brauchst: vier Items (Auf, Zu, Offen, geschlossen) als Switch bzw. Contact Item. Diese verknüpfst Du mit den entsprechenden Channels, welche als switch bzw. contact Channel angelegt sind.
Außerdem brauchst Du noch ein Rollershutter Item für die UI und ein paar Rules.
Wenn Du schreibst AUF/STOPP bzw. ZU/STOPP, wäre die Frage, wie sich das Tor verhält, bei einem Impuls startet die Fahrt, beim nächsten Impuls stoppt die Fahrt, oder solange die 1 anliegt fährt das Tor, bei 0 stoppt das Tor (Totmannschaltung). Letztere Variante ist unüblich, aber es gibt Torsteuerungen, die das unterstützen...
Rule 1: Es kommt ein Befehl von openHAB in Richtung Tor. Die möglichen Befehle sind UP/DOWN/STOP/0-100. Letztere sind eher ein Sahnehäubchen, wäre aber ebenfalls realisierbar (das könnte man verwenden, um die Garage im Sommer zum Lüften nur einen Spalt weit zu öffnen). Hier aber die Variante ohne Positionsfahrten, mit Impulsen:
Code: Alles auswählen
rule "Garage steuern"
when
Item vGaragentor received command
then
if(receivedCommand instanceof Number) {
logInfo("garage","Positionsfahrt nicht unterstützt!")
return;
}
switch(receivedCommand.toString) {
case "UP" : {
swTorZu.postUpdate(OFF)
swTorAuf.sendCommand(ON)
}
case "DOWN" : {
swTorAuf.postUpdate(OFF)
swTorZu.sendCommand(ON)
}
case "STOP" {
if(swTorAuf.state == ON) {
swTorZu.postUpdate(OFF)
swTorAuf.sendCommand(OFF)
swTorAuf.sendCommand(ON)
swTorAuf.sendCommand(OFF)
}
if(swTorZu.state == ON) {
swTorAuf.postUpdate(OFF)
swTorZu.sendCommand(OFF)
swTorZu.sendCommand(ON)
swTorZu.sendCommand(OFF)
}
}
}
end
Und eine Rule für die Rückmeldung:
Code: Alles auswählen
rule "Garage Rückmeldung"
when
Item cGarageAuf changed to CLOSED or
Item cGarageZu changed to CLOSED
then
if(triggeringItemName == "cGarageAuf"){
vGaragentor.postUpdate(0)
} else {
vGaragentor.postUpdate(100)
}
swTorZu.sendCommand(OFF)
swTorAuf.sendCommand(OFF)
end
Die Rückmeldung löst ein Rücksetzen des echten Schaltausgangs aus. Falls dieser ohenhin schon auf Aus stehen wird, kannst Du hier auch ein postUpdate verwenden, um das Item in openHAB auf OFF zu bringen.
Es gibt hier natürlich ein paar Haken, das ist abhängig davon, wie die Steuerung funktioniert. Ich habe in der Steuer-Rule darauf gesetzt, dass der Status des echten Schaltausgangs den letzten gesendeten Status beibehält, so dass man darüber erkennen kann, ob das Tor gerade öffnet oder schließt (für die Stopp Funktion). Die Stopp Taste darf nur dann Auswirkungen haben, wenn das Tor gerade fährt. Wenn die Items swTorZu und swTorAuf den letzten Zustand nicht beibehalten, muss man sich den Zustand "Fahrt aktiv" auf andere Art merken und entsprechend zurücksetzen.
Das gezielte Schalten nach OFF, dann ON und wieder OFF ist für den Fall, dass der echte Schaltkontakt zu dem Zeitpunkt noch eingeschaltet ist.
Die saubere Lösung wäre aber vermutlich (bei Impuls Steuerung), die Kontakte automatisch wieder auf OFF zu setzen (z.B. mit dem Expiration Timer in den Metadaten der Items), dann muss natürlich die aktive Fahrt anderweitig gespeichert werden.
In der Oberfläche reicht danach das Item vGaragentor mit passendem dynamischen Icon, um sowohl den Zustand als auch die Steuerung abzubilden.