From 648dee90b654f62565997e506f0b66b631e078ae Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Fri, 16 Dec 2016 15:19:11 +0530
Subject: [PATCH 01/20] [CHF-480] Health Check implementation for Z-Wave
Thermostat
---
.../zwave-thermostat.src/zwave-thermostat.groovy | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/devicetypes/smartthings/zwave-thermostat.src/zwave-thermostat.groovy b/devicetypes/smartthings/zwave-thermostat.src/zwave-thermostat.groovy
index 404882a..8d9f117 100644
--- a/devicetypes/smartthings/zwave-thermostat.src/zwave-thermostat.groovy
+++ b/devicetypes/smartthings/zwave-thermostat.src/zwave-thermostat.groovy
@@ -20,6 +20,7 @@ metadata {
capability "Configuration"
capability "Polling"
capability "Sensor"
+ capability "Health Check"
attribute "thermostatFanState", "string"
@@ -30,6 +31,7 @@ metadata {
fingerprint deviceId: "0x08"
fingerprint inClusters: "0x43,0x40,0x44,0x31"
+ fingerprint mfr:"0039", prod:"0011", model:"0001", deviceJoinName: "Honeywell Z-Wave Thermostat"
}
// simulator metadata
@@ -123,6 +125,11 @@ metadata {
}
}
+def updated(){
+ // Device-Watch simply pings if no device events received for 32min(checkInterval)
+ sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID])
+}
+
def parse(String description)
{
def map = createEvent(zwaveEvent(zwave.parse(description, [0x42:1, 0x43:2, 0x31: 3])))
@@ -393,6 +400,14 @@ def setCoolingSetpoint(Double degrees, Integer delay = 30000) {
], delay)
}
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ log.debug "ping() called"
+ poll()
+}
+
def configure() {
delayBetween([
zwave.thermostatModeV2.thermostatModeSupportedGet().format(),
From ce52af037661faf0a2c6fb40ed66df562147a13a Mon Sep 17 00:00:00 2001
From: bflorian
Date: Tue, 21 Mar 2017 14:15:20 -0700
Subject: [PATCH 02/20] DVCSMP-2528 Added app setting for OAuth callback URL
---
.../smartthings/lifx-connect.src/lifx-connect.groovy | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy b/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy
index 974561e..dd17429 100644
--- a/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy
+++ b/smartapps/smartthings/lifx-connect.src/lifx-connect.groovy
@@ -19,8 +19,15 @@ definition(
singleInstance: true) {
appSetting "clientId"
appSetting "clientSecret"
+ appSetting "serverUrl" // See note below
}
+// NOTE regarding OAuth settings. On NA01 (i.e. graph.api), NA01S, and NA01D the serverUrl app setting can be left
+// Blank. For other shards is should be set to the callback URL registered with LIFX, which is:
+//
+// Production -- https://graph.api.smartthings.com
+// Staging -- https://graph-na01s-useast1.smartthingsgdev.com
+// Development -- https://graph-na01d-useast1.smartthingsgdev.com
preferences {
page(name: "Credentials", title: "LIFX", content: "authPage", install: true)
@@ -35,8 +42,8 @@ mappings {
path("/test") { action: [ GET: "oauthSuccess" ] }
}
-def getServerUrl() { return "https://graph.api.smartthings.com" }
-def getCallbackUrl() { return "https://graph.api.smartthings.com/oauth/callback"}
+def getServerUrl() { return appSettings.serverUrl ?: apiServerUrl }
+def getCallbackUrl() { return "${getServerUrl()}/oauth/callback" }
def apiURL(path = '/') { return "https://api.lifx.com/v1${path}" }
def getSecretKey() { return appSettings.secretKey }
def getClientId() { return appSettings.clientId }
From b5e1d652fd85b30520c3dd2b68ccce7e20a50cea Mon Sep 17 00:00:00 2001
From: "sushant.k1"
Date: Thu, 22 Dec 2016 12:37:58 +0530
Subject: [PATCH 03/20] [CHF-493] Added Health Check Implementation for Micro
Smart Switch 2E.
---
.../zwave-metering-switch.groovy | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy b/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy
index 21ceb1b..5f3db81 100644
--- a/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy
+++ b/devicetypes/smartthings/zwave-metering-switch.src/zwave-metering-switch.groovy
@@ -21,10 +21,13 @@ metadata {
capability "Refresh"
capability "Configuration"
capability "Sensor"
+ capability "Light"
+ capability "Health Check"
command "reset"
fingerprint inClusters: "0x25,0x32"
+ fingerprint mfr:"0086", prod:"0003", model:"0012", deviceJoinName: "Aeon Labs Micro Smart Switch 2E"
}
// simulator metadata
@@ -72,6 +75,8 @@ metadata {
}
def updated() {
+ // Device-Watch simply pings if no device events received for 32min(checkInterval)
+ sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID])
try {
if (!state.MSR) {
response(zwave.manufacturerSpecificV2.manufacturerSpecificGet().format())
@@ -178,6 +183,14 @@ def poll() {
])
}
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ log.debug "ping() called"
+ refresh()
+}
+
def refresh() {
delayBetween([
zwave.switchBinaryV1.switchBinaryGet().format(),
From 9b4f6974de595bfd0c7839bbd3edbf3b1a7ed8f9 Mon Sep 17 00:00:00 2001
From: rappleg
Date: Wed, 22 Mar 2017 11:21:04 -0500
Subject: [PATCH 04/20] DVCSMP-2533 Fix backgroundColor on SmartSense Multi
---
.../smartthings/smartsense-multi.src/smartsense-multi.groovy | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy b/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy
index 328c9a7..c22162b 100644
--- a/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy
+++ b/devicetypes/smartthings/smartsense-multi.src/smartsense-multi.groovy
@@ -52,7 +52,7 @@ metadata {
tiles(scale: 2) {
multiAttributeTile(name:"contact", type: "generic", width: 6, height: 4){
tileAttribute ("device.contact", key: "PRIMARY_CONTROL") {
- attributeState "open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"##e86d13"
+ attributeState "open", label:'${name}', icon:"st.contact.contact.open", backgroundColor:"#e86d13"
attributeState "closed", label:'${name}', icon:"st.contact.contact.closed", backgroundColor:"#00a0dc"
}
}
From cbd15ae9ccfae79e25e70b14b2918542379ed3de Mon Sep 17 00:00:00 2001
From: Parijat Das
Date: Wed, 22 Mar 2017 16:57:11 -0700
Subject: [PATCH 05/20] Added health-check for Logitech Harmony Hub
---
.../logitech-harmony-hub-c2c.groovy | 15 +++++++++++++++
.../logitech-harmony-connect.groovy | 4 ++++
2 files changed, 19 insertions(+)
diff --git a/devicetypes/smartthings/logitech-harmony-hub-c2c.src/logitech-harmony-hub-c2c.groovy b/devicetypes/smartthings/logitech-harmony-hub-c2c.src/logitech-harmony-hub-c2c.groovy
index 8395f80..e287e94 100644
--- a/devicetypes/smartthings/logitech-harmony-hub-c2c.src/logitech-harmony-hub-c2c.groovy
+++ b/devicetypes/smartthings/logitech-harmony-hub-c2c.src/logitech-harmony-hub-c2c.groovy
@@ -7,6 +7,7 @@ metadata {
definition (name: "Logitech Harmony Hub C2C", namespace: "smartthings", author: "SmartThings") {
capability "Media Controller"
capability "Refresh"
+ capability "Health Check"
command "activityoff"
command "alloff"
@@ -38,6 +39,16 @@ metadata {
}
}
+def installed() {
+ log.debug "installed()"
+ sendEvent(name: "DeviceWatch-Enroll", value: JsonOutput.toJson([protocol: "cloud", scheme:"untracked"]), displayed: false)
+}
+
+def updated() {
+ log.debug "updated()"
+ sendEvent(name: "DeviceWatch-Enroll", value: JsonOutput.toJson([protocol: "cloud", scheme:"untracked"]), displayed: false)
+}
+
def startActivity(String activityId) {
log.debug "Executing 'Start Activity'"
log.trace parent.activity("$device.deviceNetworkId-$activityId","start")
@@ -58,6 +69,10 @@ def poll() {
log.trace parent.poll()
}
+def ping() {
+ refresh()
+}
+
def refresh() {
log.debug "Executing 'Refresh'"
log.trace parent.poll()
diff --git a/smartapps/smartthings/logitech-harmony-connect.src/logitech-harmony-connect.groovy b/smartapps/smartthings/logitech-harmony-connect.src/logitech-harmony-connect.groovy
index 43c55fa..72763ef 100644
--- a/smartapps/smartthings/logitech-harmony-connect.src/logitech-harmony-connect.groovy
+++ b/smartapps/smartthings/logitech-harmony-connect.src/logitech-harmony-connect.groovy
@@ -511,6 +511,10 @@ def pollResponse(response, data) {
if (ResponseValues) {
def map = [:]
ResponseValues.hubs.each {
+ // Device-Watch relies on the Logitech Harmony Cloud to get the Device state.
+ def isAlive = it.value.status
+ def d = getChildDevice("harmony-${it.key}")
+ d?.sendEvent(name: "DeviceWatch-DeviceStatus", value: isAlive!=504? "online":"offline", displayed: false, isStateChange: true)
if (it.value.message == "OK") {
map["${it.key}"] = "${it.value.response.data.currentAvActivity},${it.value.response.data.activityStatus}"
def hub = getChildDevice("harmony-${it.key}")
From 343ec9d856836337db361d33b1fa993e6eb3f6b7 Mon Sep 17 00:00:00 2001
From: bflorian
Date: Tue, 21 Mar 2017 15:38:51 -0700
Subject: [PATCH 06/20] DVCSMP-2399 Added Zooz ZEN20 DTH
---
.../zooz-power-strip-outlet.groovy | 41 ++++
.../zooz-power-strip.groovy | 210 ++++++++++++++++++
2 files changed, 251 insertions(+)
create mode 100644 devicetypes/smartthings/zooz-power-strip-outlet.src/zooz-power-strip-outlet.groovy
create mode 100644 devicetypes/smartthings/zooz-power-strip.src/zooz-power-strip.groovy
diff --git a/devicetypes/smartthings/zooz-power-strip-outlet.src/zooz-power-strip-outlet.groovy b/devicetypes/smartthings/zooz-power-strip-outlet.src/zooz-power-strip-outlet.groovy
new file mode 100644
index 0000000..0fd103c
--- /dev/null
+++ b/devicetypes/smartthings/zooz-power-strip-outlet.src/zooz-power-strip-outlet.groovy
@@ -0,0 +1,41 @@
+/**
+ * Zooz Power Strip Outlet
+ *
+ * Copyright 2017 SmartThings
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
+ * for the specific language governing permissions and limitations under the License.
+ *
+ */
+metadata {
+ definition (name: "Zooz Power Strip Outlet", namespace: "smartthings", author: "SmartThings") {
+ capability "Switch"
+ capability "Actuator"
+ capability "Sensor"
+ }
+
+ tiles {
+ multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){
+ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") {
+ attributeState "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff", nextState:"turningOn"
+ attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC", nextState:"turningOff"
+ attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff"
+ attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn"
+ }
+ }
+ }
+}
+
+void on() {
+ parent.childOn(device.deviceNetworkId)
+}
+
+void off() {
+ parent.childOff(device.deviceNetworkId)
+}
diff --git a/devicetypes/smartthings/zooz-power-strip.src/zooz-power-strip.groovy b/devicetypes/smartthings/zooz-power-strip.src/zooz-power-strip.groovy
new file mode 100644
index 0000000..a6ee0ea
--- /dev/null
+++ b/devicetypes/smartthings/zooz-power-strip.src/zooz-power-strip.groovy
@@ -0,0 +1,210 @@
+/**
+ * Zooz ZEN20 Power Strip Outlet
+ *
+ * Implementation of the Zooz ZEN20 power strip that uses the new composite device capabilities to provide individual
+ * control of each outlet from SmartApps as well as the mobile app. Incorporates contributions from:
+ *
+ * Eric Maycock (https://github.com/erocm123/SmartThingsPublic/blob/master/devicetypes/erocm123/zooz-power-strip.src/zooz-power-strip.groovy)
+ * Robert Vandervoort (https://github.com/robertvandervoort/SmartThings/blob/master/zooZ-Strip-ZEN20/device_type-zooZ-strip-ZEN20_v1.0)
+ *
+ * Copyright 2017 SmartThings
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
+ * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
+ * for the specific language governing permissions and limitations under the License.
+ *
+ */
+metadata {
+ definition (name: "Zooz Power Strip", namespace: "smartthings", author: "SmartThings") {
+ capability "Switch"
+ capability "Refresh"
+ capability "Actuator"
+ capability "Sensor"
+
+ fingerprint manufacturer: "015D", prod: "0651", model: "F51C", deviceJoinName: "Zooz ZEN 20 Power Strip"
+ }
+
+ tiles {
+ multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){
+ tileAttribute ("device.switch", key: "PRIMARY_CONTROL") {
+ attributeState "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff", nextState:"turningOn"
+ attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#00A0DC", nextState:"turningOff"
+ attributeState "turningOn", label:'${name}', action:"switch.off", icon:"st.switches.switch.on", backgroundColor:"#00A0DC", nextState:"turningOff"
+ attributeState "turningOff", label:'${name}', action:"switch.on", icon:"st.switches.switch.off", backgroundColor:"#ffffff", nextState:"turningOn"
+ }
+ }
+ childDeviceTiles("outlets")
+ standardTile("refresh", "device.switch", width: 1, height: 1, inactiveLabel: false, decoration: "flat") {
+ state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
+ }
+ }
+}
+
+/////////////////////////////
+// Installation and update //
+/////////////////////////////
+def installed() {
+ createChildDevices()
+}
+
+def updated() {
+ if (!childDevices) {
+ createChildDevices()
+ }
+ else if (device.label != state.oldLabel) {
+ childDevices.each {
+ def newLabel = "${device.displayName} (CH${channelNumber(it.deviceNetworkId)})"
+ it.setLabel(newLabel)
+ }
+ state.oldLabel = device.label
+ }
+}
+
+
+//////////////////////
+// Event Generation //
+//////////////////////
+def parse(String description) {
+ trace "parse('$description')"
+ def result = []
+ if (description.startsWith("Err")) {
+ result = createEvent(descriptionText:description, isStateChange:true)
+ } else if (description != "updated") {
+ def cmd = zwave.parse(description, [0x60: 3, 0x32: 3, 0x25: 1, 0x20: 1])
+ if (cmd) {
+ result += zwaveEvent(cmd, 1)
+ }
+ else {
+ log.warn "Unparsed description $description"
+ }
+ }
+ result
+}
+
+def zwaveEvent(physicalgraph.zwave.commands.multichannelv3.MultiChannelCmdEncap cmd, ep) {
+ def encapsulatedCommand = cmd.encapsulatedCommand([0x32: 3, 0x25: 1, 0x20: 1])
+ if (encapsulatedCommand) {
+ zwaveEvent(encapsulatedCommand, cmd.sourceEndPoint as Integer)
+ }
+}
+
+def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd, endpoint) {
+ trace "zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport $cmd, $endpoint)"
+ zwaveBinaryEvent(cmd, endpoint)
+}
+
+def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd, endpoint) {
+ trace "zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport $cmd, $endpoint)"
+ zwaveBinaryEvent(cmd, endpoint)
+}
+
+def zwaveBinaryEvent(cmd, endpoint) {
+ def result = []
+ def children = childDevices
+ def childDevice = children.find{it.deviceNetworkId.endsWith("$endpoint")}
+ childDevice.sendEvent(name: "switch", value: cmd.value ? "on" : "off")
+
+ if (cmd.value) {
+ // One on and the strip is on
+ result << createEvent(name: "switch", value: "on")
+ } else {
+ // All off and the strip is off
+ if (! children.any { it.currentValue("switch") == "on" }) {
+ result << createEvent(name: "switch", value: "off")
+ }
+ }
+ result
+}
+
+def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd, ep) {
+ updateDataValue("MSR", String.format("%04X-%04X-%04X", cmd.manufacturerId, cmd.productTypeId, cmd.productId))
+ return null
+}
+
+def zwaveEvent(physicalgraph.zwave.commands.versionv1.VersionReport cmd, ep) {
+ trace "applicationVersion $cmd.applicationVersion"
+}
+
+def zwaveEvent(physicalgraph.zwave.Command cmd, ep) {
+ log.warn("${device.displayName}: Unhandled ${cmd}" + (ep ? " from endpoint $ep" : ""))
+}
+
+/////////////////////////////
+// Installation and update //
+/////////////////////////////
+def on() {
+ def cmds = []
+ def cmd = zwave.switchBinaryV1.switchBinarySet(switchValue: 0xFF)
+ cmds << zwave.multiChannelV3.multiChannelCmdEncap(bitAddress: true, destinationEndPoint:0x1F).encapsulate(cmd).format()
+ cmds << "delay 400"
+ cmds.addAll(refresh())
+ return cmds
+}
+
+def off() {
+ def cmds = []
+ def cmd = zwave.switchBinaryV1.switchBinarySet(switchValue: 0x00)
+ cmds << zwave.multiChannelV3.multiChannelCmdEncap(bitAddress: true, destinationEndPoint:0x1F).encapsulate(cmd).format()
+ cmds << "delay 400"
+ cmds.addAll(refresh())
+ return cmds
+}
+
+//////////////////////
+// Child Device API //
+//////////////////////
+void childOn(String dni) {
+ onOffCmd(0xFF, channelNumber(dni))
+}
+
+void childOff(String dni) {
+ onOffCmd(0, channelNumber(dni))
+}
+
+def refresh() {
+ def cmds = (1..5).collect { endpoint ->
+ encap(zwave.switchBinaryV1.switchBinaryGet(), endpoint)
+ }
+ delayBetween(cmds, 100)
+}
+
+///////////////////
+// Local Methods //
+///////////////////
+private channelNumber(String dni) {
+ dni.split("-ep")[-1] as Integer
+}
+
+private void onOffCmd(value, endpoint = null) {
+ def actions = [
+ new physicalgraph.device.HubAction(encap(zwave.basicV1.basicSet(value: value), endpoint)),
+ new physicalgraph.device.HubAction(encap(zwave.switchBinaryV1.switchBinaryGet(), endpoint)),
+ ]
+ sendHubCommand(actions, 500)
+}
+
+private void createChildDevices() {
+ state.oldLabel = device.label
+ for (i in 1..5) {
+ addChildDevice("Zooz Power Strip Outlet", "${device.deviceNetworkId}-ep${i}", null,
+ [completedSetup: true, label: "${device.displayName} (CH${i})",
+ isComponent: true, componentName: "ch$i", componentLabel: "Channel $i"])
+ }
+}
+
+private encap(cmd, endpoint) {
+ if (endpoint) {
+ zwave.multiChannelV3.multiChannelCmdEncap(destinationEndPoint:endpoint).encapsulate(cmd).format()
+ } else {
+ cmd.format()
+ }
+}
+
+private trace(msg) {
+ //log.trace(msg)
+}
From 32eb95f7d77e2c5a80cb9914392286f323979be6 Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Thu, 23 Mar 2017 16:09:27 +0530
Subject: [PATCH 07/20] [CHF-561] Health Check Plant Link Sensor
---
.../smartthings/plant-link.src/.st-ignore | 2 ++
.../smartthings/plant-link.src/README.md | 35 +++++++++++++++++++
.../plant-link.src/plant-link.groovy | 7 ++++
3 files changed, 44 insertions(+)
create mode 100644 devicetypes/smartthings/plant-link.src/.st-ignore
create mode 100644 devicetypes/smartthings/plant-link.src/README.md
diff --git a/devicetypes/smartthings/plant-link.src/.st-ignore b/devicetypes/smartthings/plant-link.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/smartthings/plant-link.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/smartthings/plant-link.src/README.md b/devicetypes/smartthings/plant-link.src/README.md
new file mode 100644
index 0000000..170f02a
--- /dev/null
+++ b/devicetypes/smartthings/plant-link.src/README.md
@@ -0,0 +1,35 @@
+# Plant Link
+
+Cloud Execution
+
+Works with:
+
+* [OSO Technologies PlantLink Soil Moisture Sensor](https://www.smartthings.com/works-with-smartthings/oso-technologies/oso-technologies-plantlink-soil-moisture-sensor)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Troubleshooting](#troubleshooting)
+
+## Capabilities
+
+* **Relative Humidity Measurement** - allows reading the relative humidity from devices that support it
+* **Sensor** - detects sensor events
+* **Battery** - defines device uses a battery
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+Plant Link sensor is a Z-wave sleepy device and checks in every 15 minutes.
+Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins.
+
+* __122min__ checkInterval
+
+## Troubleshooting
+
+If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the sensor is out of range.
+Pairing needs to be tried again by placing the sensor closer to the hub.
+Instructions related to pairing, resetting and removing the different motion sensors from SmartThings can be found in the following links
+for the different models:
+* [OSO Technologies PlantLink Soil Moisture Sensor Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/206868986-PlantLink-Soil-Moisture-Sensor)
diff --git a/devicetypes/smartthings/plant-link.src/plant-link.groovy b/devicetypes/smartthings/plant-link.src/plant-link.groovy
index 275880b..e3114e3 100644
--- a/devicetypes/smartthings/plant-link.src/plant-link.groovy
+++ b/devicetypes/smartthings/plant-link.src/plant-link.groovy
@@ -21,8 +21,10 @@ metadata {
capability "Relative Humidity Measurement"
capability "Battery"
capability "Sensor"
+ capability "Health Check"
fingerprint profileId: "0104", inClusters: "0000,0003,0405,FC08", outClusters: "0003"
+ fingerprint endpoint: "1", profileId: "0104", inClusters: "0000,0001,0003,0B04", outClusters: "0003", manufacturer: "", model: "", deviceJoinName: "OSO Technologies PlantLink Soil Moisture Sensor"
}
tiles {
@@ -48,6 +50,11 @@ metadata {
}
}
+def updated() {
+ // Device-Watch allows 2 check-in misses from device
+ sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
+}
+
// Parse incoming device messages to generate events
def parse(String description) {
log.debug "Parse description $description"
From 03b9f08eedc6a1f999754289a99e5df2364dcefc Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Fri, 24 Mar 2017 17:23:29 +0530
Subject: [PATCH 08/20] [CHF-561] Fixing Typo Error in Plant Link Readme
---
devicetypes/smartthings/plant-link.src/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/devicetypes/smartthings/plant-link.src/README.md b/devicetypes/smartthings/plant-link.src/README.md
index 170f02a..8ec24e4 100644
--- a/devicetypes/smartthings/plant-link.src/README.md
+++ b/devicetypes/smartthings/plant-link.src/README.md
@@ -24,7 +24,7 @@ Works with:
Plant Link sensor is a Z-wave sleepy device and checks in every 15 minutes.
Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*15 + 2)mins = 32 mins.
-* __122min__ checkInterval
+* __32min__ checkInterval
## Troubleshooting
From 36b4d48056d4540f72c90f907a1b943abf27007b Mon Sep 17 00:00:00 2001
From: "sushant.k1"
Date: Wed, 22 Mar 2017 19:52:32 +0530
Subject: [PATCH 09/20] [CHF-571] Added Health Check Implementation for EcoNet
Vent.
---
.../smartthings/econet-vent.src/.st-ignore | 2 +
.../smartthings/econet-vent.src/README.md | 43 +++++++++++++++++++
.../econet-vent.src/econet-vent.groovy | 11 +++++
3 files changed, 56 insertions(+)
create mode 100644 devicetypes/smartthings/econet-vent.src/.st-ignore
create mode 100644 devicetypes/smartthings/econet-vent.src/README.md
diff --git a/devicetypes/smartthings/econet-vent.src/.st-ignore b/devicetypes/smartthings/econet-vent.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/smartthings/econet-vent.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/smartthings/econet-vent.src/README.md b/devicetypes/smartthings/econet-vent.src/README.md
new file mode 100644
index 0000000..b680629
--- /dev/null
+++ b/devicetypes/smartthings/econet-vent.src/README.md
@@ -0,0 +1,43 @@
+# EcoNet Vent
+
+Cloud Execution
+
+Works with:
+
+* [EcoNet Controls Z-Wave Vent](https://www.smartthings.com/works-with-smartthings/econet-controls/econet-controls-z-wave-vent)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Troubleshooting](#troubleshooting)
+
+## Capabilities
+
+* **Switch Level** - allows for the control of the level attribute of a light
+* **Actuator** - represents that a Device has commands
+* **Switch** - allows for the control of a switch device
+* **Battery** - defines that the device has a battery
+* **Refresh** - _refresh()_ command for status updates
+* **Sensor** - detects sensor events
+* **Polling** - allows for the polling of devices that support it
+* **Configuration** - allow configuration of devices that support it
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+EcoNet Controls Z-Wave Vent is 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:
+* [EcoNet Controls Z-Wave Vent Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/204556420-EcoNet-EV100-Vent)
\ No newline at end of file
diff --git a/devicetypes/smartthings/econet-vent.src/econet-vent.groovy b/devicetypes/smartthings/econet-vent.src/econet-vent.groovy
index 56a3249..f441beb 100644
--- a/devicetypes/smartthings/econet-vent.src/econet-vent.groovy
+++ b/devicetypes/smartthings/econet-vent.src/econet-vent.groovy
@@ -26,11 +26,13 @@ metadata {
capability "Sensor"
capability "Polling"
capability "Configuration"
+ capability "Health Check"
command "open"
command "close"
fingerprint deviceId: "0x1100", inClusters: "0x26,0x72,0x86,0x77,0x80,0x20"
+ fingerprint mfr:"0157", prod:"0100", model:"0100", deviceJoinName: "EcoNet Controls Z-Wave Vent"
}
simulator {
@@ -85,6 +87,8 @@ def parse(String description) {
//send the command to stop polling
def updated() {
+ // Device-Watch simply pings if no device events received for 32min(checkInterval)
+ sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID])
response("poll stop")
}
@@ -169,6 +173,13 @@ def setLevel(value, duration) {
setLevel(value)
}
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ refresh()
+}
+
def refresh() {
delayBetween([
zwave.switchMultilevelV1.switchMultilevelGet().format(),
From 5e7ded1f7372a6c58f46ceb5c04625241b060fff Mon Sep 17 00:00:00 2001
From: "sushant.k1"
Date: Wed, 22 Mar 2017 18:40:07 +0530
Subject: [PATCH 10/20] [CHF-572] Added Health Check Implementation for Zen
Thermostat.
---
.../zenwithin/zen-thermostat.src/.st-ignore | 2 +
.../zenwithin/zen-thermostat.src/README.md | 37 +++++++++++++++++++
.../zen-thermostat.src/zen-thermostat.groovy | 16 +++++---
3 files changed, 50 insertions(+), 5 deletions(-)
create mode 100644 devicetypes/zenwithin/zen-thermostat.src/.st-ignore
create mode 100644 devicetypes/zenwithin/zen-thermostat.src/README.md
diff --git a/devicetypes/zenwithin/zen-thermostat.src/.st-ignore b/devicetypes/zenwithin/zen-thermostat.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/zenwithin/zen-thermostat.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/zenwithin/zen-thermostat.src/README.md b/devicetypes/zenwithin/zen-thermostat.src/README.md
new file mode 100644
index 0000000..8864ff4
--- /dev/null
+++ b/devicetypes/zenwithin/zen-thermostat.src/README.md
@@ -0,0 +1,37 @@
+# Zen Thermostat
+
+Cloud Execution
+
+Works with:
+
+* [Zen Thermostat](https://www.smartthings.com/works-with-smartthings/zen/zen-thermostat)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+
+## Capabilities
+
+* **Actuator** - represents that a Device has commands
+* **Thermostat** - allows for the control of a thermostat device
+* **Temperature Measurement** - get the temperature from a Device that reports current temperature
+* **Configuration** - _configure()_ command called when device is installed or device preferences updated
+* **Refresh** - _refresh()_ command for status updates
+* **Sensor** - it represents that a Device has attributes
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+Zen Thermostat with reporting interval of 5 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
+
+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.
+Other troubleshooting tips are listed as follows:
+* [Zen Thermostat Troubleshooting:](https://support.smartthings.com/hc/en-us/articles/204356564-Zen-Thermostat)
diff --git a/devicetypes/zenwithin/zen-thermostat.src/zen-thermostat.groovy b/devicetypes/zenwithin/zen-thermostat.src/zen-thermostat.groovy
index 2e046da..a3e54a9 100644
--- a/devicetypes/zenwithin/zen-thermostat.src/zen-thermostat.groovy
+++ b/devicetypes/zenwithin/zen-thermostat.src/zen-thermostat.groovy
@@ -12,8 +12,9 @@ metadata {
capability "Configuration"
capability "Refresh"
capability "Sensor"
-
- fingerprint profileId: "0104", endpointId: "01", inClusters: "0000,0001,0003,0004,0005,0020,0201,0202,0204,0B05", outClusters: "000A, 0019"
+ capability "Health Check"
+
+ fingerprint profileId: "0104", endpointId: "01", inClusters: "0000,0001,0003,0004,0005,0020,0201,0202,0204,0B05", outClusters: "000A, 0019", manufacturer: "Zen Within", model: "Zen-01", deviceJoinName: "Zen Thermostat"
//attribute "temperatureUnit", "number"
@@ -467,8 +468,12 @@ def fanAuto() {
"st wattr 0x${device.deviceNetworkId} 1 0x202 0 0x30 {05}"
}
-
-
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ refresh()
+}
// =============== SmartThings Default Fucntions: refresh, configure, poll ===============
def refresh()
@@ -502,6 +507,7 @@ def poll()
def configure()
{
+ sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
log.debug "configure() - binding & attribute report"
[
//Set long poll interval to 2 qs
@@ -511,7 +517,7 @@ def configure()
//Thermostat - Cluster 201
"zdo bind 0x${device.deviceNetworkId} 1 1 0x201 {${device.zigbeeId}} {}", "delay 500",
- "zcl global send-me-a-report 0x201 0 0x29 5 300 {3200}",
+ "zcl global send-me-a-report 0x201 0 0x29 5 300 {3200}",
"send 0x${device.deviceNetworkId} 1 1", "delay 500",
"zcl global send-me-a-report 0x201 0x0011 0x29 5 300 {3200}",
From 364154e8a7ffac7b86b8655edc1f955ed4963a1d Mon Sep 17 00:00:00 2001
From: CosmicPuppy
Date: Mon, 27 Mar 2017 01:08:16 -0700
Subject: [PATCH 11/20] To Tyco Door-Window Sensor DTH, added Capability
"Sensor" per
http://docs.smartthings.com/en/latest/device-type-developers-guide/overview.html?highlight=sensor%20actuator#actuator-and-sensor.
---
.../tyco-door-window-sensor.src/tyco-door-window-sensor.groovy | 1 +
1 file changed, 1 insertion(+)
diff --git a/devicetypes/smartthings/tyco-door-window-sensor.src/tyco-door-window-sensor.groovy b/devicetypes/smartthings/tyco-door-window-sensor.src/tyco-door-window-sensor.groovy
index 305d3fe..8bc2cfa 100644
--- a/devicetypes/smartthings/tyco-door-window-sensor.src/tyco-door-window-sensor.groovy
+++ b/devicetypes/smartthings/tyco-door-window-sensor.src/tyco-door-window-sensor.groovy
@@ -23,6 +23,7 @@ metadata {
capability "Refresh"
capability "Temperature Measurement"
capability "Health Check"
+ capability "Sensor"
command "enrollResponse"
From b7288b5bebc42ba7096543a3563a5912cb4f64de Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Wed, 22 Mar 2017 18:25:42 +0530
Subject: [PATCH 12/20] [CHF-568] Health Check keen-home-smart-vent
---
.../keen-home-smart-vent.src/.st-ignore | 2 +
.../keen-home-smart-vent.src/README.md | 39 +++++++++++++++++++
.../keen-home-smart-vent.groovy | 23 ++++++++---
3 files changed, 58 insertions(+), 6 deletions(-)
create mode 100644 devicetypes/keen-home/keen-home-smart-vent.src/.st-ignore
create mode 100644 devicetypes/keen-home/keen-home-smart-vent.src/README.md
diff --git a/devicetypes/keen-home/keen-home-smart-vent.src/.st-ignore b/devicetypes/keen-home/keen-home-smart-vent.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/keen-home/keen-home-smart-vent.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/keen-home/keen-home-smart-vent.src/README.md b/devicetypes/keen-home/keen-home-smart-vent.src/README.md
new file mode 100644
index 0000000..808ca0a
--- /dev/null
+++ b/devicetypes/keen-home/keen-home-smart-vent.src/README.md
@@ -0,0 +1,39 @@
+# Keen Home Smart Vent
+
+Cloud Execution
+
+Works with:
+
+* [Keen Home Smart Vent](https://www.smartthings.com/works-with-smartthings/keen-home/keen-home-smart-vent)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Troubleshooting](#Troubleshooting)
+
+## Capabilities
+
+* **Switch** - can detect state (possible values: on/off)
+* **Switch Level** - represents current light level, usually 0-100 in percent
+* **Sensor** - detects sensor events
+* **Temperature Measurement** - represents capability to measure temperature
+* **Configuration** - _configure()_ command called when device is installed or device preferences updated
+* **Battery** - defines device uses a battery
+* **Refresh** - _refresh()_ command for status updates
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+Keen Home Smart Vent with reporting interval of 5 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
+
+If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the sensor is out of range.
+Pairing needs to be tried again by placing the sensor closer to the hub.
+Instructions related to pairing, resetting and removing the different motion sensors from SmartThings can be found in the following links
+for the different models:
+* [Keen Home Smart Vent Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/205302050-Keen-Home-Smart-Vent)
diff --git a/devicetypes/keen-home/keen-home-smart-vent.src/keen-home-smart-vent.groovy b/devicetypes/keen-home/keen-home-smart-vent.src/keen-home-smart-vent.groovy
index 93703ef..2b18b8f 100644
--- a/devicetypes/keen-home/keen-home-smart-vent.src/keen-home-smart-vent.groovy
+++ b/devicetypes/keen-home/keen-home-smart-vent.src/keen-home-smart-vent.groovy
@@ -11,6 +11,7 @@ metadata {
capability "Sensor"
capability "Temperature Measurement"
capability "Battery"
+ capability "Health Check"
command "getLevel"
command "getOnOff"
@@ -20,10 +21,8 @@ metadata {
command "setZigBeeIdTile"
command "clearObstruction"
- fingerprint endpoint: "1",
- profileId: "0104",
- inClusters: "0000,0001,0003,0004,0005,0006,0008,0020,0402,0403,0B05,FC01,FC02",
- outClusters: "0019"
+ fingerprint endpoint: "1", profileId: "0104", inClusters: "0000,0001,0003,0004,0005,0006,0008,0020,0402,0403,0B05,FC01,FC02", outClusters: "0019"
+ fingerprint endpoint: "1", profileId: "0104", inClusters: "0000,0001,0003,0004,0005,0006,0008,0020,0402,0403,0B05,FC01,FC02", outClusters: "0019", manufacturer: "Keen Home Inc", model: "SV01-410-DV-1.0", deviceJoinName: "Keen Home Smart Vent"
}
// simulator metadata
@@ -466,15 +465,27 @@ def refresh() {
getBattery()
}
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ return refresh()
+}
+
def configure() {
log.debug "CONFIGURE"
+ // 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
+ sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 2 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
+
// get ZigBee ID by hidden tile because that's the only way we can do it
setZigBeeIdTile()
def configCmds = [
// bind reporting clusters to hub
- "zdo bind 0x${device.deviceNetworkId} 1 1 0x0006 {${device.zigbeeId}} {}", "delay 500",
+ //commenting out switch cluster bind as using wrapper onOffConfig of zigbee class
+ //"zdo bind 0x${device.deviceNetworkId} 1 1 0x0006 {${device.zigbeeId}} {}", "delay 500",
"zdo bind 0x${device.deviceNetworkId} 1 1 0x0008 {${device.zigbeeId}} {}", "delay 500",
"zdo bind 0x${device.deviceNetworkId} 1 1 0x0402 {${device.zigbeeId}} {}", "delay 500",
"zdo bind 0x${device.deviceNetworkId} 1 1 0x0403 {${device.zigbeeId}} {}", "delay 500",
@@ -510,5 +521,5 @@ def configure() {
// "send 0x${device.deviceNetworkId} 1 1", "delay 1500",
]
- return configCmds + refresh()
+ return configCmds + zigbee.onOffConfig() + refresh()
}
From 8c7cb54934a67a5c21affffd302a22857852d929 Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Wed, 22 Mar 2017 18:46:11 +0530
Subject: [PATCH 13/20] [CHF-562] Health Check zwave-door-window-sensor
---
.../zwave-door-window-sensor.src/.st-ignore | 2 ++
.../zwave-door-window-sensor.src/README.md | 36 +++++++++++++++++++
.../zwave-door-window-sensor.groovy | 4 +++
3 files changed, 42 insertions(+)
create mode 100644 devicetypes/smartthings/zwave-door-window-sensor.src/.st-ignore
create mode 100644 devicetypes/smartthings/zwave-door-window-sensor.src/README.md
diff --git a/devicetypes/smartthings/zwave-door-window-sensor.src/.st-ignore b/devicetypes/smartthings/zwave-door-window-sensor.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/smartthings/zwave-door-window-sensor.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/smartthings/zwave-door-window-sensor.src/README.md b/devicetypes/smartthings/zwave-door-window-sensor.src/README.md
new file mode 100644
index 0000000..d97e2ae
--- /dev/null
+++ b/devicetypes/smartthings/zwave-door-window-sensor.src/README.md
@@ -0,0 +1,36 @@
+# Z-Wave Door Window Sensor
+
+Cloud Execution
+
+Works with:
+
+* [Aeon Labs Door/Window Sensor (Gen 5)](https://www.smartthings.com/works-with-smartthings/aeon-labs/aeon-labs-doorwindow-sensor-gen-5)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Troubleshooting](#Troubleshooting)
+
+## Capabilities
+
+* **Configuration** - _configure()_ command called when device is installed or device preferences updated
+* **Health Check** - indicates ability to get device health notifications
+* **Sensor** - detects sensor events
+* **Battery** - defines that the device has a battery
+* **Contact Sensor** - allows reading the value of a contact sensor device
+
+## Device Health
+
+Z-Wave Door Window Sensor is a Z-wave sleepy device and checks in every 4 hours.
+Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*4*60 + 2)mins = 482 mins.
+
+* __482min__ 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 links
+for the different models:
+* [Aeon Labs Door/Window Sensor (Gen 5) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/211834163-How-to-connect-Aeon-Labs-door-window-sensors)
\ No newline at end of file
diff --git a/devicetypes/smartthings/zwave-door-window-sensor.src/zwave-door-window-sensor.groovy b/devicetypes/smartthings/zwave-door-window-sensor.src/zwave-door-window-sensor.groovy
index ff8491d..0f751e9 100644
--- a/devicetypes/smartthings/zwave-door-window-sensor.src/zwave-door-window-sensor.groovy
+++ b/devicetypes/smartthings/zwave-door-window-sensor.src/zwave-door-window-sensor.groovy
@@ -22,12 +22,14 @@ metadata {
capability "Sensor"
capability "Battery"
capability "Configuration"
+ capability "Health Check"
fingerprint deviceId: "0x2001", inClusters: "0x30,0x80,0x84,0x85,0x86,0x72"
fingerprint deviceId: "0x07", inClusters: "0x30"
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x98"
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x86,0x72,0x98", outClusters: "0x5A,0x82"
fingerprint deviceId: "0x0701", inClusters: "0x5E,0x80,0x71,0x85,0x70,0x72,0x86,0x30,0x31,0x84,0x59,0x73,0x5A,0x8F,0x98,0x7A", outClusters:"0x20" // Philio multi+
+ fingerprint mfr:"0086", prod:"0002", model:"001D", deviceJoinName: "Aeon Labs Door/Window Sensor (Gen 5)"
}
// simulator metadata
@@ -78,6 +80,8 @@ def parse(String description) {
}
def updated() {
+ // Device-Watch simply pings if no device events received for 482min(checkInterval)
+ sendEvent(name: "checkInterval", value: 2 * 4 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID])
def cmds = []
if (!state.MSR) {
cmds = [
From 237e226697723df53a1edc36eed5577426248ff2 Mon Sep 17 00:00:00 2001
From: "sushant.k1"
Date: Wed, 22 Mar 2017 19:32:41 +0530
Subject: [PATCH 14/20] [CHF-577] Added Health Check Implementation for Spruce
Controller.
---
.../spruce-controller.src/.st-ignore | 2 +
.../spruce-controller.src/README.md | 37 +++++++++++++++++++
.../spruce-controller.groovy | 29 +++++++++------
3 files changed, 56 insertions(+), 12 deletions(-)
create mode 100644 devicetypes/plaidsystems/spruce-controller.src/.st-ignore
create mode 100644 devicetypes/plaidsystems/spruce-controller.src/README.md
diff --git a/devicetypes/plaidsystems/spruce-controller.src/.st-ignore b/devicetypes/plaidsystems/spruce-controller.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/plaidsystems/spruce-controller.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/plaidsystems/spruce-controller.src/README.md b/devicetypes/plaidsystems/spruce-controller.src/README.md
new file mode 100644
index 0000000..1ace86e
--- /dev/null
+++ b/devicetypes/plaidsystems/spruce-controller.src/README.md
@@ -0,0 +1,37 @@
+# Spruce Controller
+
+Cloud Execution
+
+Works with:
+
+* [Spruce Irrigation Controller](https://www.smartthings.com/works-with-smartthings/spruce/spruce-irrigation-controller)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Troubleshooting](#troubleshooting)
+
+## Capabilities
+
+* **Switch** - can detect state (possible values: on/off)
+* **Configuration** - _configure()_ command called when device is installed or device preferences updated
+* **Refresh** - _refresh()_ command for status updates
+* **Actuator** - represents that a Device has commands
+* **Valve** - allows for the control of a valve device
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+Spruce Controller with reporting interval of 10 mins.
+SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
+
+* __22min__ 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.
+Other troubleshooting tips are listed as follows:
+* [Spruce Irrigation Controller Troubleshooting:](https://support.smartthings.com/hc/en-us/articles/208053773-Spruce-Irrigation-Controller-Sensor)
diff --git a/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy b/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy
index baf2f1a..bdde1b1 100644
--- a/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy
+++ b/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy
@@ -26,7 +26,8 @@ metadata {
capability "Configuration"
capability "Refresh"
capability "Actuator"
- capability "Valve"
+ capability "Valve"
+ capability "Health Check"
attribute "switch", "string"
attribute "switch1", "string"
@@ -96,7 +97,7 @@ metadata {
command "notify"
command "updated"
- fingerprint endpointId: "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18", profileId: "0104", deviceId: "0002", deviceVersion: "00", inClusters: "0000,0003,0004,0005,0006,000F", outClusters: "0003, 0019", manufacturer: "PLAID SYSTEMS", model: "PS-SPRZ16-01"
+ fingerprint endpointId: "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18", profileId: "0104", deviceId: "0002", deviceVersion: "00", inClusters: "0000,0003,0004,0005,0006,000F", outClusters: "0003, 0019", manufacturer: "PLAID SYSTEMS", model: "PS-SPRZ16-01", deviceJoinName: "Spruce Irrigation Controller"
}
@@ -248,8 +249,8 @@ def parse(String description) {
log.debug "Alarm"
map = getAlarm(descMap)
}
- }
-
+ }
+
if (map) {
result = createEvent(map)
}
@@ -366,14 +367,14 @@ def writeTime(wEP, runTime){
//set reporting and binding
def configure() {
-
+ // Device-Watch allows 2 check-in misses from device (plus 2 mins lag time)
+ sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 2 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
String zigbeeId = swapEndianHex(device.hub.zigbeeId)
log.debug "Confuguring Reporting and Bindings ${device.deviceNetworkId} ${device.zigbeeId}"
sendEvent(name: 'configuration',value: 100, descriptionText: "Configuration initialized")
def configCmds = [
//program on/off
- "zdo bind 0x${device.deviceNetworkId} 1 1 6 {${device.zigbeeId}} {}", "delay 1000",
"zdo bind 0x${device.deviceNetworkId} 1 1 0x09 {${device.zigbeeId}} {}", "delay 1000",
"zdo bind 0x${device.deviceNetworkId} 1 1 0x0F {${device.zigbeeId}} {}", "delay 1000",
//zones 1-8
@@ -396,10 +397,7 @@ def configure() {
"zdo bind 0x${device.deviceNetworkId} 17 1 0x0F {${device.zigbeeId}} {}", "delay 1000",
//rain sensor
"zdo bind 0x${device.deviceNetworkId} 18 1 0x0F {${device.zigbeeId}} {}",
-
- "zcl global send-me-a-report 6 0 0x10 1 0 {01}", "delay 500",
- "send 0x${device.deviceNetworkId} 1 1", "delay 500",
-
+
"zcl global send-me-a-report 0x0F 0x55 0x10 1 0 {01}", "delay 500",
"send 0x${device.deviceNetworkId} 1 1", "delay 500",
@@ -458,7 +456,7 @@ def configure() {
"zcl global send-me-a-report 0x09 0x00 0x21 1 0 {00}", "delay 500",
"send 0x${device.deviceNetworkId} 1 1", "delay 500"
]
- return configCmds + rain() + manual()
+ return configCmds + zigbee.onOffConfig() + rain() + manual()
}
@@ -483,7 +481,14 @@ private byte[] reverseArray(byte[] array) {
i++;
}
return array
-}
+}
+
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ refresh()
+}
def refresh() {
From 0e9abb0cd2ab9ec2e5e7c2a3ba8bd284becb5ff0 Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Mon, 27 Mar 2017 23:34:30 +0530
Subject: [PATCH 15/20] [CHF-558] Health Check ZigBee Switch
---
.../keen-home-smart-vent.src/README.md | 4 +--
.../smartthings/zigbee-switch.src/.st-ignore | 2 ++
.../smartthings/zigbee-switch.src/README.md | 35 +++++++++++++++++++
.../zigbee-switch.src/zigbee-switch.groovy | 10 ++++++
4 files changed, 49 insertions(+), 2 deletions(-)
create mode 100644 devicetypes/smartthings/zigbee-switch.src/.st-ignore
create mode 100644 devicetypes/smartthings/zigbee-switch.src/README.md
diff --git a/devicetypes/keen-home/keen-home-smart-vent.src/README.md b/devicetypes/keen-home/keen-home-smart-vent.src/README.md
index 808ca0a..355c2b2 100644
--- a/devicetypes/keen-home/keen-home-smart-vent.src/README.md
+++ b/devicetypes/keen-home/keen-home-smart-vent.src/README.md
@@ -25,10 +25,10 @@ Works with:
## Device Health
-Keen Home Smart Vent with reporting interval of 5 mins.
+Keen Home Smart Vent with reporting interval of 10 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
+* __22min__ checkInterval
## Troubleshooting
diff --git a/devicetypes/smartthings/zigbee-switch.src/.st-ignore b/devicetypes/smartthings/zigbee-switch.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/smartthings/zigbee-switch.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/smartthings/zigbee-switch.src/README.md b/devicetypes/smartthings/zigbee-switch.src/README.md
new file mode 100644
index 0000000..be8c067
--- /dev/null
+++ b/devicetypes/smartthings/zigbee-switch.src/README.md
@@ -0,0 +1,35 @@
+# Leviton Switch (ZigBee)
+
+Cloud Execution
+
+Works with:
+
+* [Leviton Switch (ZigBee)](https://www.smartthings.com/works-with-smartthings/leviton/leviton-switch)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Troubleshooting](#Troubleshooting)
+
+## Capabilities
+
+* **Actuator** - represents that a Device has commands
+* **Configuration** - _configure()_ command called when device is installed or device preferences updated
+* **Refresh** - _refresh()_ command for status updates
+* **Switch** - can detect state (possible values: on/off)
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+A Zigbee Switch with reporting interval of 10 mins.
+SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
+
+* __22min__ 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 Switch Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/209686003-How-to-connect-Leviton-ZigBee-devices)
diff --git a/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy b/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy
index 34192de..20637eb 100644
--- a/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy
+++ b/devicetypes/smartthings/zigbee-switch.src/zigbee-switch.groovy
@@ -18,6 +18,7 @@ metadata {
capability "Configuration"
capability "Refresh"
capability "Switch"
+ capability "Health Check"
fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006"
fingerprint profileId: "0104", inClusters: "0000, 0003, 0006", outClusters: "0003, 0006, 0019, 0406", manufacturer: "Leviton", model: "ZSS-10", deviceJoinName: "Leviton Switch"
@@ -75,11 +76,20 @@ def on() {
zigbee.on()
}
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ return refresh()
+}
+
def refresh() {
zigbee.onOffRefresh() + zigbee.onOffConfig()
}
def configure() {
+ // Device-Watch allows 2 check-in misses from device + ping (plus 2 min lag time)
+ sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 2 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
log.debug "Configuring Reporting and Bindings."
zigbee.onOffRefresh() + zigbee.onOffConfig()
}
From 74ae369143f7307ff929f4ef15755852e212303d Mon Sep 17 00:00:00 2001
From: Parijat Das
Date: Mon, 27 Mar 2017 15:05:39 -0700
Subject: [PATCH 16/20] Added health-check for Fibaro Door Window Sensor
---
.../fibaro-door-window-sensor.src/.st-ignore | 2 +
.../fibaro-door-window-sensor.src/README.md | 40 +++++++++++++++++++
.../fibaro-door-window-sensor.groovy | 6 ++-
3 files changed, 47 insertions(+), 1 deletion(-)
create mode 100644 devicetypes/smartthings/fibaro-door-window-sensor.src/.st-ignore
create mode 100644 devicetypes/smartthings/fibaro-door-window-sensor.src/README.md
diff --git a/devicetypes/smartthings/fibaro-door-window-sensor.src/.st-ignore b/devicetypes/smartthings/fibaro-door-window-sensor.src/.st-ignore
new file mode 100644
index 0000000..71af75c
--- /dev/null
+++ b/devicetypes/smartthings/fibaro-door-window-sensor.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
\ No newline at end of file
diff --git a/devicetypes/smartthings/fibaro-door-window-sensor.src/README.md b/devicetypes/smartthings/fibaro-door-window-sensor.src/README.md
new file mode 100644
index 0000000..b425636
--- /dev/null
+++ b/devicetypes/smartthings/fibaro-door-window-sensor.src/README.md
@@ -0,0 +1,40 @@
+# Fibaro Door Window Sensor
+
+Cloud Execution
+
+Works with:
+
+* [Fibaro Door/Window Sensor](https://www.smartthings.com/works-with-smartthings/sensors/fibaro-doorwindow-sensor)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Battery](#battery-specification)
+* [Troubleshooting](#troubleshooting)
+
+## Capabilities
+
+* **Contact Sensor** - can detect contact (possible values: open,closed)
+* **Sensor** - detects sensor events
+* **Battery** - defines device uses a battery
+* **Configuration** - _configure()_ command called when device is installed or device preferences updated
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+Fibaro Door/Window Sensor is a Z-wave sleepy device and wakes up every 4 hours.
+Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*4*60 + 2)mins = 482 mins.
+
+* __482min__ checkInterval
+
+## Battery Specification
+
+One 1/2AA 3.6V battery is required.
+
+## 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:
+* [Fibaro Door/Window Sensor Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/204075194-Fibaro-Door-Window-Sensor)
\ No newline at end of file
diff --git a/devicetypes/smartthings/fibaro-door-window-sensor.src/fibaro-door-window-sensor.groovy b/devicetypes/smartthings/fibaro-door-window-sensor.src/fibaro-door-window-sensor.groovy
index 8970554..4ece9ab 100644
--- a/devicetypes/smartthings/fibaro-door-window-sensor.src/fibaro-door-window-sensor.groovy
+++ b/devicetypes/smartthings/fibaro-door-window-sensor.src/fibaro-door-window-sensor.groovy
@@ -39,7 +39,8 @@
capability "Contact Sensor"
capability "Sensor"
capability "Battery"
- capability "Configuration"
+ capability "Configuration"
+ capability "Health Check"
command "resetParams2StDefaults"
command "listCurrentParams"
@@ -266,6 +267,9 @@ def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerS
*/
def configure() {
log.debug "Configuring Device..."
+ // Device wakes up every 4 hours, this interval allows us to miss one wakeup notification before marking offline
+ sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID])
+
def cmds = []
cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 1, size: 2).format()
// send associate to group 3 to get sensor data reported only to hub
From 693f2c10605c5149a904e645d508f4e1b6baaf30 Mon Sep 17 00:00:00 2001
From: Parijat Das
Date: Mon, 27 Mar 2017 15:29:33 -0700
Subject: [PATCH 17/20] Added health-check for Zwave Motion Sensor
---
.../zwave-motion-sensor.src/.st-ignore | 2 +
.../zwave-motion-sensor.src/README.md | 39 +++++++++++++++++++
.../zwave-motion-sensor.groovy | 6 +++
3 files changed, 47 insertions(+)
create mode 100644 devicetypes/smartthings/zwave-motion-sensor.src/.st-ignore
create mode 100644 devicetypes/smartthings/zwave-motion-sensor.src/README.md
diff --git a/devicetypes/smartthings/zwave-motion-sensor.src/.st-ignore b/devicetypes/smartthings/zwave-motion-sensor.src/.st-ignore
new file mode 100644
index 0000000..71af75c
--- /dev/null
+++ b/devicetypes/smartthings/zwave-motion-sensor.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
\ No newline at end of file
diff --git a/devicetypes/smartthings/zwave-motion-sensor.src/README.md b/devicetypes/smartthings/zwave-motion-sensor.src/README.md
new file mode 100644
index 0000000..f698d03
--- /dev/null
+++ b/devicetypes/smartthings/zwave-motion-sensor.src/README.md
@@ -0,0 +1,39 @@
+# Z-wave Motion Sensor
+
+Cloud Execution
+
+Works with:
+
+* [Ecolink PIR Motion Detector with Pet Immunity](https://www.smartthings.com/works-with-smartthings/sensors/ecolink-pir-motion-detector-with-pet-immunity)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Battery](#battery-specification)
+* [Troubleshooting](#troubleshooting)
+
+## Capabilities
+
+* **Motion Sensor** - can detect motion
+* **Sensor** - detects sensor events
+* **Battery** - defines device uses a battery
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+Ecolink PIR Motion Detector with Pet Immunity is a Z-wave sleepy device and wakes up every 4 hours.
+Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*4*60 + 2)mins = 482 mins.
+
+* __482min__ checkInterval
+
+## Battery Specification
+
+One CR123A Lithium 3V battery is required.
+
+## 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:
+* [Ecolink PIR Motion Detector with Pet Immunity Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/202294400-Ecolink-PIR-Motion-Detector-PIRZWAVE2-ECO-)
\ No newline at end of file
diff --git a/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy b/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy
index a5003c3..2395602 100644
--- a/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy
+++ b/devicetypes/smartthings/zwave-motion-sensor.src/zwave-motion-sensor.groovy
@@ -21,6 +21,7 @@ metadata {
capability "Motion Sensor"
capability "Sensor"
capability "Battery"
+ capability "Health Check"
fingerprint mfr: "011F", prod: "0001", model: "0001", deviceJoinName: "Schlage Motion Sensor" // Schlage motion
fingerprint mfr: "014A", prod: "0001", model: "0001", deviceJoinName: "Ecolink Motion Sensor" // Ecolink motion
@@ -50,6 +51,11 @@ metadata {
}
}
+def updated(){
+// Device wakes up every 4 hours, this interval allows us to miss one wakeup notification before marking offline
+ sendEvent(name: "checkInterval", value: 8 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID])
+}
+
def parse(String description) {
def result = null
if (description.startsWith("Err")) {
From 2fb3294ce141caf7152dbe04eaebebaca149aa81 Mon Sep 17 00:00:00 2001
From: Terry Gauchat
Date: Mon, 27 Mar 2017 16:16:57 -0700
Subject: [PATCH 18/20] To Bose Soundtouch DTHs, added Capability "Sensor" &
Capability "Actuator" (#1800)
* To Bose Soundtouch DTH, added Capability "Sensor" & Capability "Actuator" per http://docs.smartthings.com/en/latest/device-type-developers-guide/overview.html?highlight=sensor%20actuator#actuator-and-sensor.
* Replaced Tabs with Spaces for capability Sensor / Actuator lines per request of @WorkingMonk.
---
.../smartthings/bose-soundtouch.src/bose-soundtouch.groovy | 2 ++
1 file changed, 2 insertions(+)
diff --git a/devicetypes/smartthings/bose-soundtouch.src/bose-soundtouch.groovy b/devicetypes/smartthings/bose-soundtouch.src/bose-soundtouch.groovy
index 5aafc08..ff6a8ee 100644
--- a/devicetypes/smartthings/bose-soundtouch.src/bose-soundtouch.groovy
+++ b/devicetypes/smartthings/bose-soundtouch.src/bose-soundtouch.groovy
@@ -28,6 +28,8 @@ metadata {
capability "Refresh"
capability "Music Player"
capability "Health Check"
+ capability "Sensor"
+ capability "Actuator"
/**
* Define all commands, ie, if you have a custom action not
From 10c1d6f7153f8f6d796373af2f760284bf8270dd Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Tue, 28 Mar 2017 22:06:51 +0530
Subject: [PATCH 19/20] [CHF-560] Health Check Smartsense Moisture
---
.../smartsense-moisture.src/.st-ignore | 2 ++
.../smartsense-moisture.src/README.md | 36 +++++++++++++++++++
.../smartsense-moisture.groovy | 7 ++++
3 files changed, 45 insertions(+)
create mode 100644 devicetypes/smartthings/smartsense-moisture.src/.st-ignore
create mode 100644 devicetypes/smartthings/smartsense-moisture.src/README.md
diff --git a/devicetypes/smartthings/smartsense-moisture.src/.st-ignore b/devicetypes/smartthings/smartsense-moisture.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/smartthings/smartsense-moisture.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/smartthings/smartsense-moisture.src/README.md b/devicetypes/smartthings/smartsense-moisture.src/README.md
new file mode 100644
index 0000000..35f05aa
--- /dev/null
+++ b/devicetypes/smartthings/smartsense-moisture.src/README.md
@@ -0,0 +1,36 @@
+# Smartsense Moisture
+
+Cloud Execution
+
+Works with:
+
+* [FortrezZ Moisture Sensor](https://www.smartthings.com/works-with-smartthings/fortrezz/fortrezz-moisture-sensor)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Troubleshooting](#troubleshooting)
+
+## Capabilities
+
+* **Water Sensor** - can detect presence of water (dry or wet)
+* **Sensor** - detects sensor events
+* **Battery** - defines device uses a battery
+* **Temperature Measurement** - represents capability to measure temperature
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+Smartsense Moisture is a Z-wave sleepy device type and checks in every 4 hours.
+Device-Watch allows 2 check-in misses from device plus some lag time. So Check-in interval = (2*4*60 + 2)mins = 482 mins.
+
+* __482min__ checkInterval
+
+## Troubleshooting
+
+If the device doesn't pair when trying from the SmartThings mobile app, it is possible that the sensor is out of range.
+Pairing needs to be tried again by placing the sensor closer to the hub.
+Instructions related to pairing, resetting and removing the different motion sensors from SmartThings can be found in the following links
+for the different models:
+* [FortrezZ Moisture Sensor Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/200930740-FortrezZ-Moisture-Sensor)
diff --git a/devicetypes/smartthings/smartsense-moisture.src/smartsense-moisture.groovy b/devicetypes/smartthings/smartsense-moisture.src/smartsense-moisture.groovy
index ebd5888..e2d78f4 100644
--- a/devicetypes/smartthings/smartsense-moisture.src/smartsense-moisture.groovy
+++ b/devicetypes/smartthings/smartsense-moisture.src/smartsense-moisture.groovy
@@ -17,9 +17,11 @@ metadata {
capability "Sensor"
capability "Battery"
capability "Temperature Measurement"
+ capability "Health Check"
fingerprint deviceId: "0x2001", inClusters: "0x30,0x9C,0x9D,0x85,0x80,0x72,0x31,0x84,0x86"
fingerprint deviceId: "0x2101", inClusters: "0x71,0x70,0x85,0x80,0x72,0x31,0x84,0x86"
+ fingerprint mfr:"0084", prod:"0063", model:"010C", deviceJoinName: "FortrezZ Moisture Sensor"
}
simulator {
@@ -89,6 +91,11 @@ def parse(String description) {
return result
}
+def updated() {
+ // Device-Watch simply pings if no device events received for 482min(checkInterval)
+ sendEvent(name: "checkInterval", value: 2 * 4 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID])
+}
+
def zwaveEvent(physicalgraph.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
[descriptionText: "${device.displayName} woke up", isStateChange: false]
From 44facec5dfa8a3c3ebe102e9078ca54e881f416c Mon Sep 17 00:00:00 2001
From: Vinay Rao
Date: Tue, 28 Mar 2017 14:13:37 -0700
Subject: [PATCH 20/20] Revert "[CHF-577] Added Health Check Implementation for
Spruce Controller."
---
.../spruce-controller.src/.st-ignore | 2 -
.../spruce-controller.src/README.md | 37 -------------------
.../spruce-controller.groovy | 29 ++++++---------
3 files changed, 12 insertions(+), 56 deletions(-)
delete mode 100644 devicetypes/plaidsystems/spruce-controller.src/.st-ignore
delete mode 100644 devicetypes/plaidsystems/spruce-controller.src/README.md
diff --git a/devicetypes/plaidsystems/spruce-controller.src/.st-ignore b/devicetypes/plaidsystems/spruce-controller.src/.st-ignore
deleted file mode 100644
index f78b46e..0000000
--- a/devicetypes/plaidsystems/spruce-controller.src/.st-ignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.st-ignore
-README.md
diff --git a/devicetypes/plaidsystems/spruce-controller.src/README.md b/devicetypes/plaidsystems/spruce-controller.src/README.md
deleted file mode 100644
index 1ace86e..0000000
--- a/devicetypes/plaidsystems/spruce-controller.src/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Spruce Controller
-
-Cloud Execution
-
-Works with:
-
-* [Spruce Irrigation Controller](https://www.smartthings.com/works-with-smartthings/spruce/spruce-irrigation-controller)
-
-## Table of contents
-
-* [Capabilities](#capabilities)
-* [Health](#device-health)
-* [Troubleshooting](#troubleshooting)
-
-## Capabilities
-
-* **Switch** - can detect state (possible values: on/off)
-* **Configuration** - _configure()_ command called when device is installed or device preferences updated
-* **Refresh** - _refresh()_ command for status updates
-* **Actuator** - represents that a Device has commands
-* **Valve** - allows for the control of a valve device
-* **Health Check** - indicates ability to get device health notifications
-
-## Device Health
-
-Spruce Controller with reporting interval of 10 mins.
-SmartThings platform will ping the device after `checkInterval` seconds of inactivity in last attempt to reach the device before marking it `OFFLINE`
-
-* __22min__ 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.
-Other troubleshooting tips are listed as follows:
-* [Spruce Irrigation Controller Troubleshooting:](https://support.smartthings.com/hc/en-us/articles/208053773-Spruce-Irrigation-Controller-Sensor)
diff --git a/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy b/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy
index bdde1b1..baf2f1a 100644
--- a/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy
+++ b/devicetypes/plaidsystems/spruce-controller.src/spruce-controller.groovy
@@ -26,8 +26,7 @@ metadata {
capability "Configuration"
capability "Refresh"
capability "Actuator"
- capability "Valve"
- capability "Health Check"
+ capability "Valve"
attribute "switch", "string"
attribute "switch1", "string"
@@ -97,7 +96,7 @@ metadata {
command "notify"
command "updated"
- fingerprint endpointId: "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18", profileId: "0104", deviceId: "0002", deviceVersion: "00", inClusters: "0000,0003,0004,0005,0006,000F", outClusters: "0003, 0019", manufacturer: "PLAID SYSTEMS", model: "PS-SPRZ16-01", deviceJoinName: "Spruce Irrigation Controller"
+ fingerprint endpointId: "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18", profileId: "0104", deviceId: "0002", deviceVersion: "00", inClusters: "0000,0003,0004,0005,0006,000F", outClusters: "0003, 0019", manufacturer: "PLAID SYSTEMS", model: "PS-SPRZ16-01"
}
@@ -249,8 +248,8 @@ def parse(String description) {
log.debug "Alarm"
map = getAlarm(descMap)
}
- }
-
+ }
+
if (map) {
result = createEvent(map)
}
@@ -367,14 +366,14 @@ def writeTime(wEP, runTime){
//set reporting and binding
def configure() {
- // Device-Watch allows 2 check-in misses from device (plus 2 mins lag time)
- sendEvent(name: "checkInterval", value: 2 * 10 * 60 + 2 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
+
String zigbeeId = swapEndianHex(device.hub.zigbeeId)
log.debug "Confuguring Reporting and Bindings ${device.deviceNetworkId} ${device.zigbeeId}"
sendEvent(name: 'configuration',value: 100, descriptionText: "Configuration initialized")
def configCmds = [
//program on/off
+ "zdo bind 0x${device.deviceNetworkId} 1 1 6 {${device.zigbeeId}} {}", "delay 1000",
"zdo bind 0x${device.deviceNetworkId} 1 1 0x09 {${device.zigbeeId}} {}", "delay 1000",
"zdo bind 0x${device.deviceNetworkId} 1 1 0x0F {${device.zigbeeId}} {}", "delay 1000",
//zones 1-8
@@ -397,7 +396,10 @@ def configure() {
"zdo bind 0x${device.deviceNetworkId} 17 1 0x0F {${device.zigbeeId}} {}", "delay 1000",
//rain sensor
"zdo bind 0x${device.deviceNetworkId} 18 1 0x0F {${device.zigbeeId}} {}",
-
+
+ "zcl global send-me-a-report 6 0 0x10 1 0 {01}", "delay 500",
+ "send 0x${device.deviceNetworkId} 1 1", "delay 500",
+
"zcl global send-me-a-report 0x0F 0x55 0x10 1 0 {01}", "delay 500",
"send 0x${device.deviceNetworkId} 1 1", "delay 500",
@@ -456,7 +458,7 @@ def configure() {
"zcl global send-me-a-report 0x09 0x00 0x21 1 0 {00}", "delay 500",
"send 0x${device.deviceNetworkId} 1 1", "delay 500"
]
- return configCmds + zigbee.onOffConfig() + rain() + manual()
+ return configCmds + rain() + manual()
}
@@ -481,14 +483,7 @@ private byte[] reverseArray(byte[] array) {
i++;
}
return array
-}
-
-/**
- * PING is used by Device-Watch in attempt to reach the Device
- * */
-def ping() {
- refresh()
-}
+}
def refresh() {