Merge pull request #1469 from SmartThingsCommunity/staging

Rolling up staging for production deploy
This commit is contained in:
Vinay Rao
2016-11-15 13:18:56 -08:00
committed by GitHub
38 changed files with 258 additions and 128 deletions

View File

@@ -1,6 +1,6 @@
# Connected Cree LED Bulb # Connected Cree LED Bulb
Cloud Execution
Works with: Works with:
@@ -23,8 +23,10 @@ Works with:
## Device Health ## Device Health
A Category C6 Connected Cree LED Bulb with maxReportTime of 5 mins. Connected Cree LED Bulb with cloud polling it every __5min__
Check-in interval = 12 mins SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
* __12min__ checkInterval
## Troubleshooting ## Troubleshooting

View File

@@ -105,7 +105,7 @@ def healthPoll() {
def configure() { def configure() {
unschedule() unschedule()
runEvery5Minutes("healthPoll") runEvery5Minutes("healthPoll")
// Device-Watch allows 2 check-in misses from device // Device-Watch allows 2 check-in misses from device + ping
sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
zigbee.onOffRefresh() + zigbee.levelRefresh() zigbee.onOffRefresh() + zigbee.levelRefresh()
} }

View File

@@ -1,6 +1,6 @@
# Z-wave Dimmer Switch # Z-wave Dimmer Switch
Local Execution on V2 Hubs
Works with: Works with:
@@ -34,6 +34,8 @@ Not to mention after going OFFLINE when the device is plugged back in, it might
the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row,
it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time.
* __32min__ checkInterval
## Troubleshooting ## Troubleshooting
If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range.

View File

@@ -23,6 +23,7 @@ metadata {
capability "Sensor" capability "Sensor"
capability "Refresh" capability "Refresh"
capability "Relative Humidity Measurement" capability "Relative Humidity Measurement"
capability "Health Check"
command "generateEvent" command "generateEvent"
command "raiseSetpoint" command "raiseSetpoint"
@@ -38,6 +39,7 @@ metadata {
attribute "maxCoolingSetpoint", "number" attribute "maxCoolingSetpoint", "number"
attribute "minCoolingSetpoint", "number" attribute "minCoolingSetpoint", "number"
attribute "deviceTemperatureUnit", "string" attribute "deviceTemperatureUnit", "string"
attribute "deviceAlive", "enum", ["true", "false"]
} }
tiles { tiles {
@@ -120,6 +122,21 @@ metadata {
} }
void installed() {
// The device refreshes every 5 minutes by default so if we miss 2 refreshes we can consider it offline
// Using 12 minutes because in testing, device health team found that there could be "jitter"
sendEvent(name: "checkInterval", value: 60 * 12, data: [protocol: "cloud"], displayed: false)
}
// Device Watch will ping the device to proactively determine if the device has gone offline
// If the device was online the last time we refreshed, trigger another refresh as part of the ping.
def ping() {
def isAlive = device.currentValue("deviceAlive") == "true" ? true : false
if (isAlive) {
refresh()
}
}
// parse events into attributes // parse events into attributes
def parse(String description) { def parse(String description) {
log.debug "Parsing '${description}'" log.debug "Parsing '${description}'"
@@ -164,7 +181,11 @@ def generateEvent(Map results) {
} else if (name=="humidity") { } else if (name=="humidity") {
isChange = isStateChange(device, name, value.toString()) isChange = isStateChange(device, name, value.toString())
event << [value: value.toString(), isStateChange: isChange, displayed: false, unit: "%"] event << [value: value.toString(), isStateChange: isChange, displayed: false, unit: "%"]
} else { } else if (name == "deviceAlive") {
isChange = isStateChange(device, name, value.toString())
event['isStateChange'] = isChange
event['displayed'] = false
} else {
isChange = isStateChange(device, name, value.toString()) isChange = isStateChange(device, name, value.toString())
isDisplayed = isChange isDisplayed = isChange
event << [value: value.toString(), isStateChange: isChange, displayed: isDisplayed] event << [value: value.toString(), isStateChange: isChange, displayed: isDisplayed]

View File

@@ -87,7 +87,7 @@ metadata {
def parse(String description) { def parse(String description) {
def resultMap = zigbee.getEvent(description) def resultMap = zigbee.getEvent(description)
if (resultMap) { if (resultMap) {
if ((resultMap.name == "level" && state.trigger == "setLevel") || resultMap.name != "level") { //doing this to account for weird level reporting bug with GE Link Bulbs if (resultMap.name != "level" || resultMap.value != 0) { // Ignore level reports of 0 sent when bulb turns off
sendEvent(resultMap) sendEvent(resultMap)
} }
} }
@@ -188,12 +188,10 @@ def updated() {
} }
def on() { def on() {
state.trigger = "on/off"
zigbee.on() zigbee.on()
} }
def off() { def off() {
state.trigger = "on/off"
zigbee.off() zigbee.off()
} }
@@ -206,7 +204,6 @@ def refresh() {
} }
def setLevel(value) { def setLevel(value) {
state.trigger = "setLevel"
def cmd def cmd
def delayForRefresh = 500 def delayForRefresh = 500
if (dimRate && (state?.rate != null)) { if (dimRate && (state?.rate != null)) {

View File

@@ -1,6 +1,6 @@
# Nyce Door/Window Sensor (Open/Close Sensor) # Nyce Door/Window Sensor (Open/Close Sensor)
Cloud Execution
Works with: Works with:
@@ -23,7 +23,11 @@ Works with:
## Device Health ## Device Health
A Category C2 Nyce Door/Window sensor that has 12min check-in interval Nyce Door/Window sensor with reporting interval of 5 min.
SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
* __12min__ checkInterval
## Battery Specification ## Battery Specification

View File

@@ -69,15 +69,17 @@ metadata {
def parse(String description) { def parse(String description) {
log.debug "description is $description" log.debug "description is $description"
def event = [:]
def finalResult = isKnownDescription(description) def finalResult = isKnownDescription(description)
if (finalResult != "false") { if (finalResult) {
log.info finalResult log.info finalResult
if (finalResult.type == "update") { if (finalResult.type == "update") {
log.info "$device updates: ${finalResult.value}" log.info "$device updates: ${finalResult.value}"
event = null
} }
else if (finalResult.type == "power") { else if (finalResult.type == "power") {
def powerValue = (finalResult.value as Integer)/10 def powerValue = (finalResult.value as Integer)/10
sendEvent(name: "power", value: powerValue) event = createEvent(name: "power", value: powerValue)
/* /*
Dividing by 10 as the Divisor is 10000 and unit is kW for the device. AttrId: 0302 and 0300. Simplifying to 10 Dividing by 10 as the Divisor is 10000 and unit is kW for the device. AttrId: 0302 and 0300. Simplifying to 10
@@ -87,13 +89,14 @@ def parse(String description) {
*/ */
} }
else { else {
sendEvent(name: finalResult.type, value: finalResult.value) event = createEvent(name: finalResult.type, value: finalResult.value)
} }
} }
else { else {
log.warn "DID NOT PARSE MESSAGE for description : $description" log.warn "DID NOT PARSE MESSAGE for description : $description"
log.debug parseDescriptionAsMap(description) log.debug parseDescriptionAsMap(description)
} }
return event
} }
// Commands to device // Commands to device
@@ -209,13 +212,16 @@ def isKnownDescription(description) {
else if (descMap.cluster == "0B04" || descMap.clusterId == "0B04"){ else if (descMap.cluster == "0B04" || descMap.clusterId == "0B04"){
isDescriptionPower(descMap) isDescriptionPower(descMap)
} }
else {
return [:]
}
} }
else if(description?.startsWith("on/off:")) { else if(description?.startsWith("on/off:")) {
def switchValue = description?.endsWith("1") ? "on" : "off" def switchValue = description?.endsWith("1") ? "on" : "off"
return [type: "switch", value : switchValue] return [type: "switch", value : switchValue]
} }
else { else {
return "false" return [:]
} }
} }
@@ -249,7 +255,7 @@ def isDescriptionOnOff(descMap) {
return [type: "switch", value : switchValue] return [type: "switch", value : switchValue]
} }
else { else {
return "false" return [:]
} }
} }
@@ -276,10 +282,9 @@ def isDescriptionLevel(descMap) {
if (dimmerValue != -1){ if (dimmerValue != -1){
return [type: "level", value : dimmerValue] return [type: "level", value : dimmerValue]
} }
else { else {
return "false" return [:]
} }
} }
@@ -301,7 +306,7 @@ def isDescriptionPower(descMap) {
return [type: "power", value : powerValue] return [type: "power", value : powerValue]
} }
else { else {
return "false" return [:]
} }
} }

View File

@@ -1,6 +1,6 @@
# SmartPower Outlet # SmartPower Outlet
Local Execution on V2 Hubs
Works with: Works with:
@@ -23,10 +23,11 @@ Works with:
## Device Health ## Device Health
A Category C1 smart power outlet with maxReportTime of 5 mins. SmartPower outlet with reporting interval of 5 mins
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins * V1, TV, HubV2 AppEngine < 1.5.1 - __21min__ checkInterval
* HubV2 AppEngine 1.5.1 - __12min__ checkInterval
## Troubleshooting ## Troubleshooting

View File

@@ -79,6 +79,7 @@ def parse(String description) {
log.debug "description is $description" log.debug "description is $description"
def finalResult = zigbee.getKnownDescription(description) def finalResult = zigbee.getKnownDescription(description)
def event = [:]
//TODO: Remove this after getKnownDescription can parse it automatically //TODO: Remove this after getKnownDescription can parse it automatically
if (!finalResult && description!="updated") if (!finalResult && description!="updated")
@@ -88,10 +89,11 @@ def parse(String description) {
log.info "final result = $finalResult" log.info "final result = $finalResult"
if (finalResult.type == "update") { if (finalResult.type == "update") {
log.info "$device updates: ${finalResult.value}" log.info "$device updates: ${finalResult.value}"
event = null
} }
else if (finalResult.type == "power") { else if (finalResult.type == "power") {
def powerValue = (finalResult.value as Integer)/10 def powerValue = (finalResult.value as Integer)/10
sendEvent(name: "power", value: powerValue, descriptionText: '{{ device.displayName }} power is {{ value }} Watts', translatable: true ) event = createEvent(name: "power", value: powerValue, descriptionText: '{{ device.displayName }} power is {{ value }} Watts', translatable: true)
/* /*
Dividing by 10 as the Divisor is 10000 and unit is kW for the device. AttrId: 0302 and 0300. Simplifying to 10 Dividing by 10 as the Divisor is 10000 and unit is kW for the device. AttrId: 0302 and 0300. Simplifying to 10
power level is an integer. The exact power level with correct units needs to be handled in the device type power level is an integer. The exact power level with correct units needs to be handled in the device type
@@ -100,7 +102,7 @@ def parse(String description) {
} }
else { else {
def descriptionText = finalResult.value == "on" ? '{{ device.displayName }} is On' : '{{ device.displayName }} is Off' def descriptionText = finalResult.value == "on" ? '{{ device.displayName }} is On' : '{{ device.displayName }} is Off'
sendEvent(name: finalResult.type, value: finalResult.value, descriptionText: descriptionText, translatable: true) event = createEvent(name: finalResult.type, value: finalResult.value, descriptionText: descriptionText, translatable: true)
} }
} }
else { else {
@@ -109,10 +111,11 @@ def parse(String description) {
if (cluster && cluster.clusterId == 0x0006 && cluster.command == 0x07){ if (cluster && cluster.clusterId == 0x0006 && cluster.command == 0x07){
if (cluster.data[0] == 0x00) { if (cluster.data[0] == 0x00) {
log.debug "ON/OFF REPORTING CONFIG RESPONSE: " + cluster log.debug "ON/OFF REPORTING CONFIG RESPONSE: " + cluster
sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) event = createEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
} }
else { else {
log.warn "ON/OFF REPORTING CONFIG FAILED- error code:${cluster.data[0]}" log.warn "ON/OFF REPORTING CONFIG FAILED- error code:${cluster.data[0]}"
event = null
} }
} }
else { else {
@@ -120,6 +123,7 @@ def parse(String description) {
log.debug "${cluster}" log.debug "${cluster}"
} }
} }
return event
} }
def off() { def off() {
@@ -141,9 +145,9 @@ def refresh() {
} }
def configure() { def configure() {
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
// OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity // OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity
refresh() + zigbee.onOffConfig(0, 300) + powerConfig() refresh() + zigbee.onOffConfig(0, 300) + powerConfig()

View File

@@ -86,7 +86,7 @@ metadata {
def parse(String description) { def parse(String description) {
log.debug "parse($description)" log.debug "parse($description)"
def results = null def results = [:]
if (!isSupportedDescription(description) || zigbee.isZoneType19(description)) { if (!isSupportedDescription(description) || zigbee.isZoneType19(description)) {
// Ignore this in favor of orientation-based state // Ignore this in favor of orientation-based state

View File

@@ -1,6 +1,6 @@
# Smartsense Moisture Sensor # Smartsense Moisture Sensor
Local Execution on V2 Hubs
Works with: Works with:
@@ -23,10 +23,11 @@ Works with:
## Device Health ## Device Health
A Category C2 moisture sensor with maxReportTime of 5 mins. SmartSense Moisture sensor with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins * V1, TV, HubV2 AppEngine < 1.5.1 - __121min__ checkInterval
* HubV2 AppEngine 1.5.1 - __12min__ checkInterval
## Battery Specification ## Battery Specification

View File

@@ -102,7 +102,7 @@ def parse(String description) {
} }
log.debug "Parse returned $map" log.debug "Parse returned $map"
def result = map ? createEvent(map) : null def result = map ? createEvent(map) : [:]
if (description?.startsWith('enroll request')) { if (description?.startsWith('enroll request')) {
List cmds = enrollResponse() List cmds = enrollResponse()
@@ -293,9 +293,9 @@ def refresh() {
} }
def configure() { def configure() {
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
// temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity // temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity
// battery minReport 30 seconds, maxReportTime 6 hrs by default // battery minReport 30 seconds, maxReportTime 6 hrs by default

View File

@@ -1,6 +1,6 @@
# Smartsense Motion Sensor # Smartsense Motion Sensor
Local Execution on V2 Hubs
Works with: Works with:
@@ -22,10 +22,12 @@ Works with:
## Device Health ## Device Health
A Category C2 motion sensor with maxReportTime of 5 mins. SmartSense Motion sensor with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins * V1, TV, HubV2 AppEngine < 1.5.1 - __121min__ checkInterval
* HubV2 AppEngine 1.5.1 - __12min__ checkInterval
## Battery Specification ## Battery Specification

View File

@@ -106,7 +106,7 @@ def parse(String description) {
} }
log.debug "Parse returned $map" log.debug "Parse returned $map"
def result = map ? createEvent(map) : null def result = map ? createEvent(map) : [:]
if (description?.startsWith('enroll request')) { if (description?.startsWith('enroll request')) {
List cmds = enrollResponse() List cmds = enrollResponse()
@@ -306,9 +306,9 @@ def refresh() {
} }
def configure() { def configure() {
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
// temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity // temperature minReportTime 30 seconds, maxReportTime 5 min. Reporting interval if no activity
// battery minReport 30 seconds, maxReportTime 6 hrs by default // battery minReport 30 seconds, maxReportTime 6 hrs by default

View File

@@ -44,7 +44,7 @@ metadata {
} }
def parse(String description) { def parse(String description) {
def results def results = [:]
if (isZoneType19(description) || !isSupportedDescription(description)) { if (isZoneType19(description) || !isSupportedDescription(description)) {
results = parseBasicMessage(description) results = parseBasicMessage(description)
} }
@@ -57,21 +57,25 @@ def parse(String description) {
private Map parseBasicMessage(description) { private Map parseBasicMessage(description) {
def name = parseName(description) def name = parseName(description)
def value = parseValue(description) if (name != null) {
def linkText = getLinkText(device) def value = parseValue(description)
def descriptionText = parseDescriptionText(linkText, value, description) def linkText = getLinkText(device)
def handlerName = value def descriptionText = parseDescriptionText(linkText, value, description)
def isStateChange = isStateChange(device, name, value) def handlerName = value
def isStateChange = isStateChange(device, name, value)
def results = [ def results = [
name: name, name : name,
value: value, value : value,
linkText: linkText, linkText : linkText,
descriptionText: descriptionText, descriptionText: descriptionText,
handlerName: handlerName, handlerName : handlerName,
isStateChange: isStateChange, isStateChange : isStateChange,
displayed: displayed(description, isStateChange) displayed : displayed(description, isStateChange)
] ]
} else {
results = [:]
}
log.debug "Parse returned $results.descriptionText" log.debug "Parse returned $results.descriptionText"
return results return results
} }

View File

@@ -1,6 +1,6 @@
# Smartsense Multi Sensor # Smartsense Multi Sensor
Local Execution on V2 Hubs
Works with: Works with:
@@ -26,10 +26,11 @@ Works with:
## Device Health ## Device Health
A Category C2 multi sensor with maxReportTime of 5 mins. SmartSense Multi sensor with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins * V1, TV, HubV2 AppEngine < 1.5.1 - __121min__ checkInterval
* HubV2 AppEngine 1.5.1 - __12min__ checkInterval
## Battery Specification ## Battery Specification

View File

@@ -127,7 +127,7 @@ def parse(String description) {
map = parseIasMessage(description) map = parseIasMessage(description)
} }
def result = map ? createEvent(map) : null def result = map ? createEvent(map) : [:]
if (description?.startsWith('enroll request')) { if (description?.startsWith('enroll request')) {
List cmds = enrollResponse() List cmds = enrollResponse()
@@ -400,9 +400,9 @@ def refresh() {
} }
def configure() { def configure() {
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
log.debug "Configuring Reporting" log.debug "Configuring Reporting"

View File

@@ -1,6 +1,6 @@
# Smartsense Open/Closed Sensor # Smartsense Open/Closed Sensor
Local Execution on V2 Hubs
Works with: Works with:
@@ -24,10 +24,11 @@ Works with:
## Device Health ## Device Health
A Category C2 open/closed sensor with maxReportTime of 5 mins. SmartSense Open Closed sensor with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins * V1, TV, HubV2 AppEngine < 1.5.1 - __121min__ checkInterval
* HubV2 AppEngine 1.5.1 - __12min__ checkInterval
## Battery Specification ## Battery Specification

View File

@@ -93,7 +93,7 @@ def parse(String description) {
} }
log.debug "Parse returned $map" log.debug "Parse returned $map"
def result = map ? createEvent(map) : null def result = map ? createEvent(map) : [:]
if (description?.startsWith('enroll request')) { if (description?.startsWith('enroll request')) {
List cmds = enrollResponse() List cmds = enrollResponse()
@@ -260,9 +260,9 @@ def refresh() {
} }
def configure() { def configure() {
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
log.debug "Configuring Reporting, IAS CIE, and Bindings." log.debug "Configuring Reporting, IAS CIE, and Bindings."

View File

@@ -1,6 +1,6 @@
# SmartSense Temp/Humidity Sensor # SmartSense Temp/Humidity Sensor
Local Execution on V2 Hubs
Works with: Works with:
@@ -24,10 +24,11 @@ Works with:
## Device Health ## Device Health
A Category C2 SmartSense Temp/Humidity Sensor with maxReportTime of 5 mins. SmartSense Temp/Humidity Sensor with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins * V1, TV, HubV2 AppEngine < 1.5.1 - __121min__ checkInterval
* HubV2 AppEngine 1.5.1 - __12min__ checkIntervalr 5 min interval is confirmed
## Battery Specification ## Battery Specification

View File

@@ -84,7 +84,7 @@ def parse(String description) {
} }
log.debug "Parse returned $map" log.debug "Parse returned $map"
return map ? createEvent(map) : null return map ? createEvent(map) : [:]
} }
private Map parseCatchAllMessage(String description) { private Map parseCatchAllMessage(String description) {
@@ -264,9 +264,9 @@ def refresh()
} }
def configure() { def configure() {
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
log.debug "Configuring Reporting and Bindings." log.debug "Configuring Reporting and Bindings."
def humidityConfigCmds = [ def humidityConfigCmds = [

View File

@@ -1,6 +1,6 @@
# Tyco Door Window Sensor # Tyco Door Window Sensor
Cloud Execution
Works with: Works with:
@@ -23,10 +23,11 @@ Works with:
## Device Health ## Device Health
Contact sensor with maxReportTime of 5 mins. Tyco Door Window Sensor with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime for Zigbee device. Check-in interval is double the value of maxReportTime for Zigbee device.
This gives the device twice the amount of time to respond before it is marked as offline. This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 min
* __12min__ checkInterval
## Battery Specification ## Battery Specification

View File

@@ -1,6 +1,6 @@
# GE Plug-In/In-Wall Smart Dimmer (ZigBee) # GE Plug-In/In-Wall Smart Dimmer (ZigBee)
Cloud Execution
Works with: Works with:
@@ -26,11 +26,11 @@ Works with:
## Device Health ## Device Health
A Zigbee dimmer with maxReportTime of 5 mins. A Zigbee Power Dimmer with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Enrolls with default periodic reporting until newer 5 min interval is confirmed * __12min__ checkInterval
It then enrolls the device with updated checkInterval i.e. 12 mins
## Troubleshooting ## Troubleshooting

View File

@@ -114,8 +114,8 @@ def refresh() {
def configure() { def configure() {
log.debug "Configuring Reporting and Bindings." log.debug "Configuring Reporting and Bindings."
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
refresh() refresh()
} }

View File

@@ -1,10 +1,11 @@
# OSRAM Lightify LED On/Off/Dim # Zigbee Dimmer
Cloud Execution
Works with: Works with:
* [OSRAM Lightify LED On/Off/Dim](https://shop.smartthings.com/#!/products/osram-led-smart-bulb-on-off-dim) * [OSRAM Lightify LED On/Off/Dim](https://shop.smartthings.com/#!/products/osram-led-smart-bulb-on-off-dim)
* [WeMo LED Bulb](https://support.smartthings.com/hc/en-us/articles/204259040-Belkin-WeMo-LED-Bulb-F7C033-)
## Table of contents ## Table of contents
@@ -23,14 +24,16 @@ Works with:
## Device Health ## Device Health
A Category C1 Zigbee dimmer with maxReportTime of 5 mins. ZigBee Dimmer with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins * __12min__ checkInterval
## Troubleshooting ## Troubleshooting
If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range.
Pairing needs to be tried again by placing the device closer to the hub. Pairing needs to be tried again by placing the device closer to the hub.
Other troubleshooting tips are listed as follows: Other troubleshooting tips are listed as follows:
* [Troubleshooting:](https://support.smartthings.com/hc/en-us/articles/207191763-OSRAM-LIGHTIFY-LED-Smart-Connected-Light-A19-On-Off-Dim) * [OSRAM Lightify LED On/Off/Dim Troubleshooting:](https://support.smartthings.com/hc/en-us/articles/207191763-OSRAM-LIGHTIFY-LED-Smart-Connected-Light-A19-On-Off-Dim)
* [WeMo LED Bulb Troubleshooting:](https://support.smartthings.com/hc/en-us/articles/204259040-Belkin-WeMo-LED-Bulb-F7C033-)

View File

@@ -102,9 +102,9 @@ def refresh() {
def configure() { def configure() {
log.debug "Configuring Reporting and Bindings." log.debug "Configuring Reporting and Bindings."
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
// OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity // OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity
zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig()

View File

@@ -1,6 +1,6 @@
# OSRAM LIGHTIFY LED RGBW Bulb # OSRAM LIGHTIFY LED RGBW Bulb
Cloud Execution
Works with: Works with:
@@ -27,11 +27,10 @@ Works with:
## Device Health ## Device Health
A Category C6 OSRAM LIGHTIFY LED RGBW Bulb with maxReportTime of 5 mins. OSRAM LIGHTIFY LED RGBW Bulb with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins
* __12min__ checkInterval
## Troubleshooting ## Troubleshooting

View File

@@ -143,9 +143,9 @@ def refresh() {
def configure() { def configure() {
log.debug "Configuring Reporting and Bindings." log.debug "Configuring Reporting and Bindings."
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
// OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity // OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity
refresh() refresh()

View File

@@ -1,10 +1,11 @@
# OSRAM Lightify Tunable 60 White # ZigBee White Color Temperature Bulb
Cloud Execution
Works with: Works with:
* [OSRAM Lightify Tunable 60 White](http://www.osram.com/osram_com/tools-and-services/tools/lightify---smart-connected-light/lightify-for-home---what-is-light-to-you/lightify-products/lightify-classic-a60-tunable-white/index.jsp) * [OSRAM Lightify Tunable 60 White](http://www.osram.com/osram_com/tools-and-services/tools/lightify---smart-connected-light/lightify-for-home---what-is-light-to-you/lightify-products/lightify-classic-a60-tunable-white/index.jsp)
* [OSRAM LIGHTIFY RT5/6 Tunable White](https://www.smartthings.com/works-with-smartthings/light-bulbs/osram-lightify-rt56-tunable-white)
## Table of contents ## Table of contents
@@ -24,14 +25,15 @@ Works with:
## Device Health ## Device Health
A Category C1 OSRAM Lightify Tunable 60 White with maxReportTime of 5 mins. Zigbee Bulb with reporting interval of 5 mins.
Check-in interval is double the value of maxReportTime. SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
This gives the device twice the amount of time to respond before it is marked as offline.
Check-in interval = 12 mins *__12min__ checkInterval
## Troubleshooting ## Troubleshooting
If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range.
Pairing needs to be tried again by placing the device closer to the hub. Pairing needs to be tried again by placing the device closer to the hub.
Other troubleshooting tips are listed as follows: Other troubleshooting tips are listed as follows:
* [Troubleshooting:](https://support.smartthings.com/hc/en-us/articles/204576454-OSRAM-LIGHTIFY-Tunable-White-60-Bulb) * [OSRAM Lightify Tunable 60 White Troubleshooting](https://support.smartthings.com/hc/en-us/articles/204576454-OSRAM-LIGHTIFY-Tunable-White-60-Bulb)
* [OSRAM LIGHTIFY RT5/6 Tunable White Troubleshooting](https://support.smartthings.com/hc/en-us/articles/214191863-How-to-connect-OSRAM-LIGHTIFY-Bulbs)

View File

@@ -126,9 +126,9 @@ def refresh() {
def configure() { def configure() {
log.debug "Configuring Reporting and Bindings." log.debug "Configuring Reporting and Bindings."
// Device-Watch allows 3 check-in misses from device (plus 1 min lag time) // Device-Watch allows 2 check-in misses from device + ping (plus 1 min lag time)
// enrolls with default periodic reporting until newer 5 min interval is confirmed // enrolls with default periodic reporting until newer 5 min interval is confirmed
sendEvent(name: "checkInterval", value: 3 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 1 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
// OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity // OnOff minReportTime 0 seconds, maxReportTime 5 min. Reporting interval if no activity
refresh() refresh()

View File

@@ -1,10 +1,11 @@
# Z-wave Dimmer # Z-wave Dimmer Switch Generic
Cloud Execution
Works with: Works with:
* [Leviton Plug-in Lamp Dimmer Module (DZPD3-1LW)](http://www.leviton.com/OA_HTML/ProductDetail.jsp?partnumber=DZPD3-1LW) * [Leviton Plug-in Lamp Dimmer Module (DZPD3-1LW)](https://www.smartthings.com/works-with-smartthings/outlets/leviton-plug-in-lamp-dimmer-module)
* [Leviton Universal Dimmer (DZMX1-LZ)](https://www.smartthings.com/works-with-smartthings/switches-and-dimmers/leviton-universal-dimmer)
## Table of contents ## Table of contents
@@ -24,16 +25,19 @@ Works with:
## Device Health ## Device Health
A Category C5 Leviton Plug-in Lamp Dimmer Module (DZPA1-1LW) (Z-Wave) polled by the hub. Leviton Plug-in Lamp Dimmer Module (DZPA1-1LW) (Z-wave) and Leviton Universal Dimmer (DZMX1-LZ) (Z-Wave) are polled by the hub.
As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed. As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed.
Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins. Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins.
Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for
the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row,
it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time.
* __32min__ checkInterval
## Troubleshooting ## Troubleshooting
If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range. If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range.
Pairing needs to be tried again by placing the device closer to the hub. Pairing needs to be tried again by placing the device closer to the hub.
Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link: Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link:
* [Leviton Plug-in Lamp Dimmer Module (DZPD3-1LW) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices) * [Leviton Plug-in Lamp Dimmer Module (DZPD3-1LW) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices)
* [Leviton Universal Dimmer (DZMX1-LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices)

View File

@@ -23,6 +23,7 @@ metadata {
fingerprint inClusters: "0x26", deviceJoinName: "Z-Wave Dimmer" fingerprint inClusters: "0x26", deviceJoinName: "Z-Wave Dimmer"
fingerprint mfr:"001D", prod:"1902", deviceJoinName: "Z-Wave Dimmer" fingerprint mfr:"001D", prod:"1902", deviceJoinName: "Z-Wave Dimmer"
fingerprint mfr:"001D", prod:"1B03", model:"0334", deviceJoinName: "Leviton Universal Dimmer"
} }
simulator { simulator {

View File

@@ -0,0 +1,2 @@
.st-ignore
README.md

View File

@@ -0,0 +1,45 @@
# Z-wave Switch
Cloud Execution
Works with:
* [Leviton Appliance Module (DZPA1-1LW)](https://www.smartthings.com/works-with-smartthings/outlets/leviton-appliance-module)
* [GE Plug-In Outdoor Smart Switch (GE 12720) (Z-Wave)](https://www.smartthings.com/works-with-smartthings/outlets/ge-plug-in-outdoor-smart-switch)
* [Leviton Outlet (DZR15-1LZ)](https://www.smartthings.com/works-with-smartthings/outlets/leviton-outlet)
* [Leviton Switch (DZS15-1LZ)](https://www.smartthings.com/works-with-smartthings/switches-and-dimmers/leviton-switch)
## Table of contents
* [Capabilities](#capabilities)
* [Health](#device-health)
## Capabilities
* **Actuator** - represents that a Device has commands
* **Health Check** - indicates ability to get device health notifications
* **Switch** - can detect state (possible values: on/off)
* **Polling** - represents that poll() can be implemented for the device
* **Refresh** - _refresh()_ command for status updates
* **Sensor** - detects sensor events
## Device Health
Leviton Appliance Module (DZPA1-1LW), GE Plug-In Outdoor Smart Switch (GE 12720), Leviton Outlet (DZR15-1LZ) and Leviton Switch (DZS15-1LZ) (Z-Wave) are polled by the hub.
As of hubCore version 0.14.38 the hub sends up reports every 15 minutes regardless of whether the state changed.
Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins.
Not to mention after going OFFLINE when the device is plugged back in, it might take a considerable amount of time for
the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row,
it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time.
* __32min__ checkInterval
## Troubleshooting
If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the device is out of range.
Pairing needs to be tried again by placing the device closer to the hub.
Instructions related to pairing, resetting and removing the device from SmartThings can be found in the following link:
* [Leviton Appliance Module (DZPA1-1LW) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices)
* [GE Plug-In Outdoor Smart Switch (GE 12720) (Z-Wave) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/200903080-GE-Plug-In-Outdoor-Smart-Switch-GE-12720-Z-Wave-)
* [Leviton Outlet (DZR15-1LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices)
* [Leviton Switch (DZS15-1LZ) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206171053-How-to-connect-Leviton-Z-Wave-devices)

View File

@@ -14,12 +14,17 @@
metadata { metadata {
definition (name: "Z-Wave Switch Generic", namespace: "smartthings", author: "SmartThings") { definition (name: "Z-Wave Switch Generic", namespace: "smartthings", author: "SmartThings") {
capability "Actuator" capability "Actuator"
capability "Health Check"
capability "Switch" capability "Switch"
capability "Polling" capability "Polling"
capability "Refresh" capability "Refresh"
capability "Sensor" capability "Sensor"
fingerprint inClusters: "0x25", deviceJoinName: "Z-Wave Switch" fingerprint inClusters: "0x25", deviceJoinName: "Z-Wave Switch"
fingerprint mfr:"001D", prod:"1A02", model:"0334", deviceJoinName: "Leviton Appliance Module"
fingerprint mfr:"0063", prod:"4F50", model:"3031", deviceJoinName: "GE Plug-in Outdoor Switch"
fingerprint mfr:"001D", prod:"1D04", model:"0334", deviceJoinName: "Leviton Outlet"
fingerprint mfr:"001D", prod:"1C02", model:"0334", deviceJoinName: "Leviton Switch"
} }
// simulator metadata // simulator metadata
@@ -50,6 +55,11 @@ metadata {
} }
} }
def updated(){
// Device-Watch simply pings if no device events received for checkInterval duration of 32min = 2 * 15min + 2min lag time
sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID])
}
def parse(String description) { def parse(String description) {
def result = null def result = null
def cmd = zwave.parse(description, [0x20: 1, 0x70: 1]) def cmd = zwave.parse(description, [0x20: 1, 0x70: 1])
@@ -126,6 +136,13 @@ def poll() {
]) ])
} }
/**
* PING is used by Device-Watch in attempt to reach the Device
* */
def ping() {
refresh()
}
def refresh() { def refresh() {
delayBetween([ delayBetween([
zwave.switchBinaryV1.switchBinaryGet().format(), zwave.switchBinaryV1.switchBinaryGet().format(),

View File

@@ -1,5 +1,6 @@
# Z-Wave Switch # Z-Wave Switch
Local Execution on V2 Hubs
Works with: Works with:
@@ -34,6 +35,7 @@ Not to mention after going OFFLINE when the device is plugged back in, it might
the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row, the device to appear as ONLINE again. This is because if this listening device does not respond to two poll requests in a row,
it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time. it is not polled for 5 minutes by the hub. This can delay up the process of being marked ONLINE by quite some time.
* __32min__ checkInterval
## Troubleshooting ## Troubleshooting

View File

@@ -842,6 +842,7 @@ private void storeThermostatData(thermostats) {
minCoolingSetpoint: (stat.settings.coolRangeLow / 10), minCoolingSetpoint: (stat.settings.coolRangeLow / 10),
maxCoolingSetpoint: (stat.settings.coolRangeHigh / 10), maxCoolingSetpoint: (stat.settings.coolRangeHigh / 10),
autoMode: stat.settings.autoHeatCoolFeatureEnabled, autoMode: stat.settings.autoHeatCoolFeatureEnabled,
deviceAlive: stat.runtime.connected == true ? "true" : "false",
auxHeatMode: (stat.settings.hasHeatPump) && (stat.settings.hasForcedAir || stat.settings.hasElectric || stat.settings.hasBoiler), auxHeatMode: (stat.settings.hasHeatPump) && (stat.settings.hasForcedAir || stat.settings.hasElectric || stat.settings.hasBoiler),
temperature: (stat.runtime.actualTemperature / 10), temperature: (stat.runtime.actualTemperature / 10),
heatingSetpoint: stat.runtime.desiredHeat / 10, heatingSetpoint: stat.runtime.desiredHeat / 10,

View File

@@ -24,6 +24,12 @@
* switches | switch | on, off | on, off * switches | switch | on, off | on, off
* motionSensors | motion | | active, inactive * motionSensors | motion | | active, inactive
* contactSensors | contact | | open, closed * contactSensors | contact | | open, closed
* thermostat | thermostat | setHeatingSetpoint, | temperature, heatingSetpoint
* | | setCoolingSetpoint(number) | coolingSetpoint, thermostatSetpoint
* | | off, heat, emergencyHeat | thermostatMode — ["emergency heat", "auto", "cool", "off", "heat"]
* | | cool, setThermostatMode | thermostatFanMode — ["auto", "on", "circulate"]
* | | fanOn, fanAuto, fanCirculate| thermostatOperatingState — ["cooling", "heating", "pending heat",
* | | setThermostatFanMode, auto | "fan only", "vent economizer", "pending cool", "idle"]
* presenceSensors | presence | | present, 'not present' * presenceSensors | presence | | present, 'not present'
* temperatureSensors | temperature | | <numeric, F or C according to unit> * temperatureSensors | temperature | | <numeric, F or C according to unit>
* accelerationSensors | acceleration | | active, inactive * accelerationSensors | acceleration | | active, inactive
@@ -58,6 +64,7 @@ preferences(oauthPage: "deviceAuthorization") {
input "switches", "capability.switch", title: "Which Switches?", multiple: true, required: false input "switches", "capability.switch", title: "Which Switches?", multiple: true, required: false
input "motionSensors", "capability.motionSensor", title: "Which Motion Sensors?", multiple: true, required: false input "motionSensors", "capability.motionSensor", title: "Which Motion Sensors?", multiple: true, required: false
input "contactSensors", "capability.contactSensor", title: "Which Contact Sensors?", multiple: true, required: false input "contactSensors", "capability.contactSensor", title: "Which Contact Sensors?", multiple: true, required: false
input "thermostats", "capability.thermostat", title: "Which Thermostats?", multiple: true, required: false
input "presenceSensors", "capability.presenceSensor", title: "Which Presence Sensors?", multiple: true, required: false input "presenceSensors", "capability.presenceSensor", title: "Which Presence Sensors?", multiple: true, required: false
input "temperatureSensors", "capability.temperatureMeasurement", title: "Which Temperature Sensors?", multiple: true, required: false input "temperatureSensors", "capability.temperatureMeasurement", title: "Which Temperature Sensors?", multiple: true, required: false
input "accelerationSensors", "capability.accelerationSensor", title: "Which Vibration Sensors?", multiple: true, required: false input "accelerationSensors", "capability.accelerationSensor", title: "Which Vibration Sensors?", multiple: true, required: false
@@ -936,7 +943,7 @@ def deleteHarmony() {
} }
private getAllDevices() { private getAllDevices() {
([] + switches + motionSensors + contactSensors + presenceSensors + temperatureSensors + accelerationSensors + waterSensors + lightSensors + humiditySensors + alarms + locks)?.findAll()?.unique { it.id } ([] + switches + motionSensors + contactSensors + thermostats + presenceSensors + temperatureSensors + accelerationSensors + waterSensors + lightSensors + humiditySensors + alarms + locks)?.findAll()?.unique { it.id }
} }
private deviceItem(device) { private deviceItem(device) {