forked from jroth/SmartThings-Devices
-
Notifications
You must be signed in to change notification settings - Fork 7
/
mimolite_garage_door_v2.device.groovy
155 lines (139 loc) · 5.59 KB
/
mimolite_garage_door_v2.device.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/**
* MIMOlite device type for garage door button, including power failure indicator. Be sure mimolite has jumper removed before
* including the device to your hub, and tap Config to ensure power alarm is subscribed.
*
* Author: Many ST community members
* Date: 2013-03-07,2014-02-03, 2014-03-07, 2015-01-04
*/
metadata {
// Automatically generated. Make future change here.
definition (name: "My MIMOlite - Garage Car Door v2", namespace: "jscgs350", author: "jscgs350") {
capability "Alarm"
capability "Momentary"
capability "Polling"
capability "Refresh"
capability "Switch"
capability "Contact Sensor"
capability "Configuration"
attribute "power", "string"
}
// tile definitions
tiles(scale: 2) {
multiAttributeTile(name:"contact", type: "generic", width: 6, height: 4){
tileAttribute ("device.contact", key: "PRIMARY_CONTROL") {
attributeState "closed", label: 'Closed', action: "momentary.push", icon: "st.doors.garage.garage-closed", backgroundColor: "#79b821", nextState:"openingdoor"
attributeState "open", label: 'Open', action: "momentary.push", icon: "st.doors.garage.garage-open", backgroundColor: "#ffa81e", nextState:"closingdoor"
attributeState "closingdoor", label:'Closing', icon:"st.doors.garage.garage-closing", backgroundColor:"#ffd700"
attributeState "openingdoor", label:'Opening', icon:"st.doors.garage.garage-opening", backgroundColor:"#ffd700"
}
}
standardTile("power", "device.power", width: 2, height: 2, inactiveLabel: false) {
state "dead", label: 'OFF', icon:"st.switches.switch.off", backgroundColor: "#ff0000"
state "alive", label: 'ON', icon:"st.switches.switch.on", backgroundColor: "#79b821"
}
standardTile("refresh", "device.switch", width: 2, height: 2, inactiveLabel: false, decoration: "flat") {
state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
}
standardTile("configure", "device.configure", width: 2, height: 2, inactiveLabel: false, decoration: "flat") {
state "configure", label:'', action:"configuration.configure", icon:"st.secondary.configure"
}
main (["contact"])
details(["contact", "power", "refresh", "configure"])
}
}
def parse(String description) {
def result = null
def cmd = zwave.parse(description, [0x72: 1, 0x86: 1, 0x71: 1, 0x30: 1, 0x31: 3, 0x35: 1, 0x70: 1, 0x85: 1, 0x25: 1, 0x03: 1])
if (cmd.CMD == "7105") { //Mimo sent a power report lost power
sendEvent(name: "power", value: "dead")
log.debug "MIMOLite is: ${power}"
} else {
sendEvent(name: "power", value: "alive")
log.debug "MIMOLite is: ${power}"
}
if (cmd) {
result = createEvent(zwaveEvent(cmd))
}
// log.debug "Parse returned ${result?.descriptionText}"
return result
}
def sensorValueEvent(Short value) {
if (value) {
log.debug "$device.displayName is now open"
createEvent(name: "contact", value: "open", descriptionText: "$device.displayName is open")
} else {
log.debug "$device.displayName is now closed"
createEvent(name: "contact", value: "closed", descriptionText: "$device.displayName is closed")
}
}
def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
[name: "switch", value: cmd.value ? "on" : "off", type: "physical"]
}
def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd)
{
sensorValueEvent(cmd.value)
}
def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
[name: "switch", value: cmd.value ? "on" : "off", type: "digital"]
}
def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd)
{
sensorValueEvent(cmd.sensorValue)
}
def zwaveEvent(physicalgraph.zwave.commands.alarmv1.AlarmReport cmd)
{
log.debug "zwaveEvent AlarmReport: '${cmd}'"
switch (cmd.alarmType) {
case 8:
def map = [ name: "power", isStateChange:true]
if (cmd.alarmLevel){
map.value="dead"
map.descriptionText = "${device.displayName} lost power"
}
else {
map.value="alive"
map.descriptionText = "${device.displayName} has power"
}
createEvent(map)
break;
default:
[:]
break;
}
}
def zwaveEvent(physicalgraph.zwave.Command cmd) {
// Handles all Z-Wave commands we aren't interested in
[:]
}
def push() {
log.debug "Executing ACTUATE command for garage car door per user request"
def cmds = [
zwave.basicV1.basicSet(value: 0xFF).format(),
]
}
def poll() {
log.debug "Executing Poll for garage car door"
delayBetween([
zwave.switchBinaryV1.switchBinaryGet().format(),
zwave.sensorBinaryV1.sensorBinaryGet().format(),
zwave.basicV1.basicGet().format(),
zwave.alarmV1.alarmGet().format()
],100)
}
def refresh() {
log.debug "Executing Refresh for garage car door per user request"
delayBetween([
zwave.switchBinaryV1.switchBinaryGet().format(),
zwave.sensorBinaryV1.sensorBinaryGet().format(),
zwave.basicV1.basicGet().format(),
zwave.alarmV1.alarmGet().format()
],100)
}
def configure() {
log.debug "Executing Configure for garage car door per user request"
def cmd = delayBetween([
zwave.configurationV1.configurationSet(parameterNumber: 11, size: 1, configurationValue: [0]).format(), // momentary relay disable=0 (default)
zwave.associationV1.associationSet(groupingIdentifier:3, nodeId:zwaveHubNodeId).format(), //subscribe to power alarm
],100)
log.debug "zwaveEvent ConfigurationReport: '${cmd}'"
}