-
Notifications
You must be signed in to change notification settings - Fork 0
/
Firmware Failure Code.groovy
140 lines (110 loc) · 4.42 KB
/
Firmware Failure Code.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
metadata {
definition (name: "Firmware Get Failure",namespace: "jvm", author: "jvm") {
capability "Initialize"
command "EraseState"
}
}
// Firmware version gets used in the next function
void getDeviceDataFromDatabase()
{
log.debug " manufacturer: ${manufacturer}, deviceType: ${deviceType}, deviceID: ${deviceID}, Version: ${state.firmware.main}, SubVersion: ${state.firmware.sub}"
}
void EraseState()
{
state.clear()
}
void initialize()
{
getFirmwareVersionFromDevice() // sets the firmware version in state.firmware[main: ??,sub: ??]
pauseExecution(2000)
getDeviceDataFromDatabase()
}
//////////////////////////////////////////////////////////////////////
////// Get Device Firmware Version ///////
//////////////////////////////////////////////////////////////////////
void queryForFirmwareReport()
{
log.debug "Querying for firmware report"
List<hubitat.zwave.Command> cmds = []
cmds.add(zwave.versionV3.versionGet())
sendToDevice(cmds)
}
void getFirmwareVersionFromDevice()
{
log.debug "Calling getFirmwareVersionFromDevice with !state.firmware ${!state.firmware} and its value is: ${state.get("firmware")}"
if(!(state.firmware && state?.firmware.main && state?.firmware.sub))
{
queryForFirmwareReport()
}
}
void zwaveEvent(hubitat.zwave.commands.versionv1.VersionReport cmd) {
log.debug "For ${device.displayName}, Received V1 version report: ${cmd}"
if (! state.firmware) state.firmware = [:]
state.put("firmware", [main: cmd.applicationVersion, sub: cmd.applicationSubVersion])
log.info "Firmware version is: ${state.get("firmware")}"
}
void zwaveEvent(hubitat.zwave.commands.versionv2.VersionReport cmd) {
log.debug "For ${device.displayName}, Received V2 version report: ${cmd}"
if (! state.firmware) state.firmware = [:]
state.put("firmware", [main: cmd.firmware0Version, sub: cmd.firmware0SubVersion])
log.info "Firmware version is: ${state.get("firmware")}"
}
void zwaveEvent(hubitat.zwave.commands.versionv3.VersionReport cmd) {
log.debug "For ${device.displayName}, Received V3 version report: ${cmd}"
if (! state.firmware) state.firmware = [:]
state.put("firmware", [main: cmd.firmware0Version, sub: cmd.firmware0SubVersion])
log.info "Firmware version is: ${state.get("firmware")}"
}
//////////////////////////////////////////////////////////////////////
////// Z-Wave Helper Functions ///////
////// Format messages, Send to Device, secure Messages ///////
//////////////////////////////////////////////////////////////////////
void zwaveEvent(hubitat.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
// hubitat.zwave.Command encapsulatedCommand = cmd.encapsulatedCommand(CMD_CLASS_VERS)
Map parseMap = state.ZwaveClassVersions?.collectEntries{k, v -> [(k as Integer) : (v as Integer)]}
hubitat.zwave.Command encapsulatedCommand = cmd.encapsulatedCommand(parseMap)
if (encapsulatedCommand) {
zwaveEvent(encapsulatedCommand)
}
}
void parse(String description) {
// if (logEnable) log.debug "For ${device.displayName}, parse:${description}"
Map parseMap = state.ZwaveClassVersions?.collectEntries{k, v -> [(k as Integer) : (v as Integer)]}
hubitat.zwave.Command cmd = zwave.parse(description, parseMap)
if (cmd) {
zwaveEvent(cmd)
}
}
void sendToDevice(List<hubitat.zwave.Command> cmds) {
sendHubCommand(new hubitat.device.HubMultiAction(commands(cmds), hubitat.device.Protocol.ZWAVE))
}
void sendToDevice(hubitat.zwave.Command cmd) {
sendHubCommand(new hubitat.device.HubAction(secureCommand(cmd), hubitat.device.Protocol.ZWAVE))
}
void sendToDevice(String cmd) {
sendHubCommand(new hubitat.device.HubAction(secureCommand(cmd), hubitat.device.Protocol.ZWAVE))
}
List<String> commands(List<hubitat.zwave.Command> cmds, Long delay=50) {
return delayBetween(cmds.collect{ secureCommand(it) }, delay)
}
String secureCommand(hubitat.zwave.Command cmd) {
secureCommand(cmd.format())
}
String secureCommand(String cmd) {
String encap=""
if (getDataValue("zwaveSecurePairingComplete") != "true") {
return cmd
} else {
encap = "988100"
}
return "${encap}${cmd}"
}
String secure(String cmd){
return zwaveSecureEncap(cmd)
}
String secure(hubitat.zwave.Command cmd){
return zwaveSecureEncap(cmd)
}
void zwaveEvent(hubitat.zwave.Command cmd) {
if (logEnable) log.debug "For ${device.displayName}, skipping command: ${cmd}"
}