From 72b2016b7dc392b03178ebbd2dcfdfd391ee16aa Mon Sep 17 00:00:00 2001
From: "piyush.c"
Date: Mon, 24 Oct 2016 14:26:22 +0530
Subject: [PATCH] CHF-435 Implementation of Health Check for Zigbee Dimmer (GE
Plug-In/In-Wall Smart Dimmer)
---
.../zigbee-dimmer-power.src/.st-ignore | 2 +
.../zigbee-dimmer-power.src/README.md | 41 +++++++++++++++++++
.../zigbee-dimmer-power.groovy | 30 ++++++++++++--
3 files changed, 70 insertions(+), 3 deletions(-)
create mode 100644 devicetypes/smartthings/zigbee-dimmer-power.src/.st-ignore
create mode 100644 devicetypes/smartthings/zigbee-dimmer-power.src/README.md
diff --git a/devicetypes/smartthings/zigbee-dimmer-power.src/.st-ignore b/devicetypes/smartthings/zigbee-dimmer-power.src/.st-ignore
new file mode 100644
index 0000000..f78b46e
--- /dev/null
+++ b/devicetypes/smartthings/zigbee-dimmer-power.src/.st-ignore
@@ -0,0 +1,2 @@
+.st-ignore
+README.md
diff --git a/devicetypes/smartthings/zigbee-dimmer-power.src/README.md b/devicetypes/smartthings/zigbee-dimmer-power.src/README.md
new file mode 100644
index 0000000..81ab641
--- /dev/null
+++ b/devicetypes/smartthings/zigbee-dimmer-power.src/README.md
@@ -0,0 +1,41 @@
+# GE Plug-In/In-Wall Smart Dimmer (ZigBee)
+
+
+
+Works with:
+
+* [GE In-Wall Smart Dimmer (ZigBee)](https://shop.smartthings.com/#!/products/ge-in-wall-smart-dimmer-switch)
+* [GE Plug-In Smart Dimmer (ZigBee)](https://www.smartthings.com/works-with-smartthings/ge/ge-plug-in-smart-dimmer-zigbee)
+
+## 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
+* **Power Meter** - ability to check the power meter(energy consumption) of device
+* **Sensor** - represents the device sensor capability
+* **Switch** - can detect state (possible values: on/off)
+* **Switch Level** - represents current light level, usually 0-100 in percent
+* **Health Check** - indicates ability to get device health notifications
+
+## Device Health
+
+A Zigbee dimmer with maxReportTime of 5 mins.
+Check-in interval is double the value of maxReportTime.
+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
+It then enrolls the device with updated checkInterval i.e. 12 mins
+
+## 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:
+* [GE Z-Wave In-Wall Smart Dimmer (GE 45857) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/204988564-GE-In-Wall-Smart-Dimmer-45857GE-ZigBee-)
+* [GE Zigbee Plug-in Smart Dimmer (GE 45852) Troubleshooting Tips](https://support.smartthings.com/hc/en-us/articles/205239280-GE-Plug-In-Smart-Dimmer-45852GE-ZigBee-)
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 6ffdf22..c6f4e78 100644
--- a/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy
+++ b/devicetypes/smartthings/zigbee-dimmer-power.src/zigbee-dimmer-power.groovy
@@ -21,6 +21,7 @@ metadata {
capability "Sensor"
capability "Switch"
capability "Switch Level"
+ capability "Health Check"
fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0B04"
fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0702"
@@ -70,8 +71,20 @@ def parse(String description) {
}
}
else {
- log.warn "DID NOT PARSE MESSAGE for description : $description"
- log.debug zigbee.parseDescriptionAsMap(description)
+ def cluster = zigbee.parse(description)
+ if (cluster && cluster.clusterId == 0x0006 && cluster.command == 0x07) {
+ if (cluster.data[0] == 0x00){
+ log.debug "ON/OFF REPORTING CONFIG RESPONSE: " + cluster
+ sendEvent(name: "checkInterval", value: 60 * 12, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID])
+ }
+ else {
+ log.warn "ON/OFF REPORTING CONFIG FAILED- error code:${cluster.data[0]}"
+ }
+ }
+ else {
+ log.warn "DID NOT PARSE MESSAGE for description : $description"
+ log.debug zigbee.parseDescriptionAsMap(description)
+ }
}
}
@@ -87,11 +100,22 @@ def setLevel(value) {
zigbee.setLevel(value)
}
+/**
+ * PING is used by Device-Watch in attempt to reach the Device
+ * */
+def ping() {
+ return zigbee.onOffRefresh()
+}
+
def refresh() {
- zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.simpleMeteringPowerRefresh() + zigbee.electricMeasurementPowerRefresh() + zigbee.onOffConfig() + zigbee.levelConfig() + zigbee.simpleMeteringPowerConfig() + zigbee.electricMeasurementPowerConfig()
+ zigbee.onOffRefresh() + zigbee.levelRefresh() + zigbee.simpleMeteringPowerRefresh() + zigbee.electricMeasurementPowerRefresh() + zigbee.onOffConfig(0, 300) + zigbee.levelConfig() + zigbee.simpleMeteringPowerConfig() + zigbee.electricMeasurementPowerConfig()
}
def configure() {
log.debug "Configuring Reporting and Bindings."
+
+ // Device-Watch allows 3 check-in misses from device (plus 1 min lag time)
+ // 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])
refresh()
}