From 29c7049d608061079100e5a6d5c95e9f7da1084b Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Thu, 13 Apr 2017 13:07:46 +0530
Subject: [PATCH 1/4] [CHF-561] Health Check Plant Link
---
devicetypes/osotech/plantlink.src/.st-ignore | 2 ++
devicetypes/osotech/plantlink.src/README.md | 33 +++++++++++++++++++
.../osotech/plantlink.src/plantlink.groovy | 13 +++++++-
.../smartthings/plant-link.src/README.md | 2 +-
.../smartthings/zwave-lock.src/README.md | 5 +--
5 files changed, 49 insertions(+), 6 deletions(-)
create mode 100644 devicetypes/osotech/plantlink.src/.st-ignore
create mode 100644 devicetypes/osotech/plantlink.src/README.md
diff --git a/devicetypes/osotech/plantlink.src/.st-ignore b/devicetypes/osotech/plantlink.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/osotech/plantlink.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/osotech/plantlink.src/README.md b/devicetypes/osotech/plantlink.src/README.md
new file mode 100644
index 0000000..6ffde56
--- /dev/null
+++ b/devicetypes/osotech/plantlink.src/README.md
@@ -0,0 +1,33 @@
+# Osotech 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
+
+* **Sensor** - detects sensor events
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+Plant Link sensor is a ZigBee 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.
+
+* __32min__ 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/osotech/plantlink.src/plantlink.groovy b/devicetypes/osotech/plantlink.src/plantlink.groovy
index 1633fb5..79cf20b 100644
--- a/devicetypes/osotech/plantlink.src/plantlink.groovy
+++ b/devicetypes/osotech/plantlink.src/plantlink.groovy
@@ -24,6 +24,7 @@ import groovy.json.JsonBuilder
metadata {
definition (name: "PlantLink", namespace: "OsoTech", author: "Oso Technologies") {
capability "Sensor"
+ capability "Health Check"
command "setStatusIcon"
command "setPlantFuelLevel"
@@ -70,6 +71,16 @@ 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])
+}
+
+def installed() {
+ // 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])
+}
+
def setStatusIcon(value){
def status = ''
switch (value) {
@@ -161,4 +172,4 @@ def parseDescriptionAsMap(description) {
map += []
}
}
-}
\ No newline at end of file
+}
diff --git a/devicetypes/smartthings/plant-link.src/README.md b/devicetypes/smartthings/plant-link.src/README.md
index 8ec24e4..397ea13 100644
--- a/devicetypes/smartthings/plant-link.src/README.md
+++ b/devicetypes/smartthings/plant-link.src/README.md
@@ -21,7 +21,7 @@ Works with:
## Device Health
-Plant Link sensor is a Z-wave sleepy device and checks in every 15 minutes.
+Plant Link sensor is a ZigBee 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.
* __32min__ checkInterval
diff --git a/devicetypes/smartthings/zwave-lock.src/README.md b/devicetypes/smartthings/zwave-lock.src/README.md
index ae64536..863622f 100644
--- a/devicetypes/smartthings/zwave-lock.src/README.md
+++ b/devicetypes/smartthings/zwave-lock.src/README.md
@@ -1,4 +1,4 @@
-# Z-Wave Switch
+# Z-Wave Lock
Cloud Execution
@@ -6,7 +6,6 @@ Works with:
* [Yale Key Free Touchscreen Deadbolt (YRD240)](https://www.smartthings.com/works-with-smartthings/yale/yale-key-free-touchscreen-deadbolt-yrd240)
-
## Table of contents
* [Capabilities](#capabilities)
@@ -41,5 +40,3 @@ If the device doesn't pair when trying from the SmartThings mobile app, it is po
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:
* [General Z-Wave/ZigBee Yale Lock Troubleshooting](https://support.smartthings.com/hc/en-us/articles/205138400-How-to-connect-Yale-locks)
-
-
From 69dd13f333d0f97d9f569fbdf5c7c0436681919c Mon Sep 17 00:00:00 2001
From: Parijat Das
Date: Mon, 24 Apr 2017 12:25:52 +0530
Subject: [PATCH 2/4] Added healthcheck for SmartAlert Siren
---
.../smartalert-siren.src/.st-ignore | 2 +
.../smartalert-siren.src/README.md | 39 +++++++++++++++++++
.../smartalert-siren.groovy | 19 +++++++++
3 files changed, 60 insertions(+)
create mode 100644 devicetypes/smartthings/smartalert-siren.src/.st-ignore
create mode 100644 devicetypes/smartthings/smartalert-siren.src/README.md
diff --git a/devicetypes/smartthings/smartalert-siren.src/.st-ignore b/devicetypes/smartthings/smartalert-siren.src/.st-ignore
new file mode 100644
index 0000000..71af75c
--- /dev/null
+++ b/devicetypes/smartthings/smartalert-siren.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
\ No newline at end of file
diff --git a/devicetypes/smartthings/smartalert-siren.src/README.md b/devicetypes/smartthings/smartalert-siren.src/README.md
new file mode 100644
index 0000000..706ee37
--- /dev/null
+++ b/devicetypes/smartthings/smartalert-siren.src/README.md
@@ -0,0 +1,39 @@
+# Smartalert Siren
+
+Cloud Execution
+
+Works with:
+
+* [FortrezZ Siren Strobe Alarm](https://www.smartthings.com/works-with-smartthings/other/fortrezz-water-valve)
+
+## Table of contents
+
+* [Capabilities](#capabilities)
+* [Health](#device-health)
+* [Troubleshooting](#troubleshooting)
+
+## Capabilities
+
+* **Actuator** - represents that a Device has commands
+* **Switch** - can detect state (possible values: on/off)
+* **Sensor** - detects sensor events
+* **Alarm** - allows for interacting with devices that serve as alarms
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+FortrezZ Siren Strobe Alarm 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:
+* [FortrezZ Siren Strobe Alarm Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/202294760-FortrezZ-Siren-Strobe-Alarm)
\ No newline at end of file
diff --git a/devicetypes/smartthings/smartalert-siren.src/smartalert-siren.groovy b/devicetypes/smartthings/smartalert-siren.src/smartalert-siren.groovy
index aaf2587..4481e76 100644
--- a/devicetypes/smartthings/smartalert-siren.src/smartalert-siren.groovy
+++ b/devicetypes/smartthings/smartalert-siren.src/smartalert-siren.groovy
@@ -21,10 +21,12 @@ metadata {
capability "Switch"
capability "Sensor"
capability "Alarm"
+ capability "Health Check"
command "test"
fingerprint deviceId: "0x1100", inClusters: "0x26,0x71"
+ fingerprint mfr:"0084", prod:"0313", model:"010B", deviceJoinName: "FortrezZ Siren Strobe Alarm"
}
simulator {
@@ -68,6 +70,16 @@ metadata {
}
}
+def installed() {
+// 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 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 on() {
[
zwave.basicV1.basicSet(value: 0xFF).format(),
@@ -149,3 +161,10 @@ def createEvents(physicalgraph.zwave.commands.basicv1.BasicReport cmd)
def zwaveEvent(physicalgraph.zwave.Command cmd) {
log.warn "UNEXPECTED COMMAND: $cmd"
}
+
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ secure(zwave.basicV1.basicGet())
+}
\ No newline at end of file
From 8bcbe7b924eb10214a5a91709fba2779a44c3e39 Mon Sep 17 00:00:00 2001
From: Zach Varberg
Date: Mon, 24 Apr 2017 09:25:51 -0500
Subject: [PATCH 3/4] Fix sengled use of FF for max level
This works around the fact that sengled element touches can get back
into a state of reporting an invalid value (of FF) if the physical
button on the bulb is used to cycle back to the 100% state. Here we
interpret FF as FE for sengled and then issue a move to level command to
put it in a state where it will report FE until the level is changed
again.
This resolves: https://smartthings.atlassian.net/browse/DVCSMP-2597
---
.../zigbee-dimmer-power.groovy | 26 ++++++++++++-------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy
index 2b28b6c..38dcd39 100644
--- a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy
+++ b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy
@@ -70,19 +70,27 @@ def parse(String description) {
else {
sendEvent(event)
}
- }
- else {
- def cluster = zigbee.parse(description)
- if (cluster && cluster.clusterId == 0x0006 && cluster.command == 0x07) {
- if (cluster.data[0] == 0x00){
+ } else {
+ def descMap = zigbee.parseDescriptionAsMap(description)
+ if (descMap && descMap.clusterInt == 0x0006 && descMap.commandInt == 0x07) {
+ if (descMap.data[0] == "00") {
log.debug "ON/OFF REPORTING CONFIG RESPONSE: " + cluster
sendEvent(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]}"
}
- }
- else {
+ } else if (device.getDataValue("manufacturer") == "sengled" && descMap && descMap.clusterInt == 0x0008 && descMap.attrInt == 0x0000) {
+ // This is being done because the sengled element touch incorrectly uses the value 0xFF for the max level.
+ // Per the ZCL spec for the UINT8 data type 0xFF is an invalid value, and 0xFE should be the max. Here we
+ // manually handle the invalid attribute value since it will be ignored by getEvent as an invalid value.
+ // We also set the level of the bulb to 0xFE so future level reports will be 0xFE until it is changed by
+ // something else.
+ if (descMap.value.toUpperCase() == "FF") {
+ descMap.value = "FE"
+ }
+ sendHubCommand(zigbee.command(zigbee.LEVEL_CONTROL_CLUSTER, 0x00, "FE0000").collect { new physicalgraph.device.HubAction(it) }, 0)
+ sendEvent(zigbee.getEventFromAttrData(descMap.clusterInt, descMap.attrInt, descMap.encoding, descMap.value))
+ } else {
log.warn "DID NOT PARSE MESSAGE for description : $description"
log.debug zigbee.parseDescriptionAsMap(description)
}
From 980bef6879fd7beb94119dbf5f6bcec8bef7d36b Mon Sep 17 00:00:00 2001
From: Stephen Stack
Date: Fri, 21 Apr 2017 15:40:04 -0500
Subject: [PATCH 4/4] DVCSMP-2573: Acceleration axis validation (Multi sensor
DTH)
In certain cases the SmartSense Multi Sensors are
missing the Y and Z axis, causing an exception
during .parseAxis(). This change checks that all
3 axis are present before processing the rest of
the message.
---
.../smartsense-multi-sensor.groovy | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy
index 62a7fc3..033708a 100644
--- a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy
+++ b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy
@@ -192,6 +192,10 @@ private List