Sure thing! The door is controlled through the Switch item, which gets updated if the garage door is manually opened or closed.
ITEMS
Group gGarageDoorOpener "Garge Door Openers" <garagedoor>
Switch GarageAttached_Door "Garage Door (Attached) [MAP(garagedoor.map):%s]" <garagedoor> (gGarageDoorOpener)
Number GarageAttached_Door_Position "Garage Door (Attached) [MAP(garagedoor.map):%s]" <garagedoor> (gGarageDoorOpener) {channel="zwave:device:55555:node5:barrier_state"}
Switch GarageDetached_Door "Garage Door (Detached) [MAP(garagedoor.map):%s]" <garagedoor> (gGarageDoorOpener)|
Number GarageDetached_Door_Position "Garage Door (Detached) [MAP(garagedoor.map):%s]" <garagedoor> (gGarageDoorOpener) {channel="zwave:device:55555:node55:barrier_state"}
DSL RULE
// put this import at the top of your rule file
import org.eclipse.smarthome.model.script.ScriptServiceUtil
rule "Update garage door state"
when
Member of gGarageDoorOpener received update
then
val actionItem = ScriptServiceUtil.getItemRegistry.getItem(if (triggeringItem.name.contains("_Position")) triggeringItem.name.replace("_Position","") else (triggeringItem.name + "_Position"))
logDebug("Rules", "Garage door event: [{}] was updated to {} ({}): action item [{}], current state {} ({})", triggeringItem.name, triggeringItem.state, transform("MAP", "garagedoor.map", triggeringItem.state.toString), actionItem.name, actionItem.state, transform("MAP", "garagedoor.map", actionItem.state.toString))
switch (triggeringItem.state.toString) {
case "255",//open
case "254",//opening
case "253",//stopped
case "252" : {//closing
if (actionItem.state != OFF) {
actionItem.postUpdate(OFF)
logDebug("Rules", "Garage door event: updated switch [{}] to OFF (OPEN) after barrier_state update", actionItem.name)
}
}
case "0" : {//closed
if (actionItem.state != ON) {
actionItem.postUpdate(ON)
logDebug("Rules", "Garage door event: updated switch [{}] to ON (CLOSED) after barrier_state update", actionItem.name)
}
}
case "ON" : {
if (actionItem.state != 0) {
actionItem.sendCommand(0)
logDebug("Rules", "Garage door event: updated barrier_state [{}] to 0 (CLOSED) after switch state update", actionItem.name)
}
}
case "OFF" : {
if (actionItem.state != 255) {
actionItem.sendCommand(255)
logDebug("Rules", "Garage door event: updated barrier_state [{}] to 255 (OPEN) after switch state update", actionItem.name)
}
}
}
MAP
0=CLOSED
ON=CLOSED
252=CLOSING
253=STOPPED
254=OPENING
255=OPEN
OFF=OPEN
-=Unknown
NULL=Unknown
EDIT: added handling of OPENING, STOPPED, and CLOSING states.
EDIT: removed lambda and change to ‘Member of’ trigger
Here is a similar example that I use for my door locks: