diff --git a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy index 78b5da1..a2e3c2e 100644 --- a/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy +++ b/devicetypes/smartthings/smartsense-moisture-sensor.src/smartsense-moisture-sensor.groovy @@ -22,11 +22,11 @@ metadata { capability "Water Sensor" command "enrollResponse" - - + + fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-S" - fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315" - fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-Seu" + fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315" + fingerprint inClusters: "0000,0001,0003,0402,0500,0020,0B05", outClusters: "0019", manufacturer: "CentraLite", model: "3315-Seu" } @@ -255,52 +255,53 @@ private Map getMoistureResult(value) { ] } -def refresh() -{ +def refresh() { log.debug "Refreshing Temperature and Battery" - [ - - + def refreshCmds = [ "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20" - + "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200" ] + + return refreshCmds + enrollResponse() } def configure() { - - String zigbeeId = swapEndianHex(device.hub.zigbeeId) - log.debug "Confuguring Reporting, IAS CIE, and Bindings." + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + log.debug "Configuring Reporting, IAS CIE, and Bindings." def configCmds = [ - "zcl global write 0x500 0x10 0xf0 {${zigbeeId}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "delay 200", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", "zcl global send-me-a-report 1 0x20 0x20 300 0600 {01}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", "zdo bind 0x${device.deviceNetworkId} 1 1 0x402 {${device.zigbeeId}} {}", "delay 500", - "zdo bind 0x${device.deviceNetworkId} 1 1 0x001 {${device.zigbeeId}} {}", "delay 1000", - - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1000", + "zdo bind 0x${device.deviceNetworkId} 1 1 0x001 {${device.zigbeeId}} {}", "delay 500" ] return configCmds + refresh() // send refresh cmds as part of config } def enrollResponse() { log.debug "Sending enroll response" - [ - - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1" - + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + [ + //Resending the CIE in case the enroll request is sent before CIE is written + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + //Enroll Response + "raw 0x500 {01 23 00 00 00}", + "send 0x${device.deviceNetworkId} 1 1", "delay 200" ] } +private getEndpointId() { + new BigInteger(device.endpointId, 16).toString() +} + private hex(value) { new BigInteger(Math.round(value).toString()).toString(16) } diff --git a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy index 7e021ca..604e6e1 100644 --- a/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-sensor.src/smartsense-motion-sensor.groovy @@ -137,10 +137,6 @@ private boolean shouldProcessMessage(cluster) { return !ignoredMessage } -private int getHumidity(value) { - return Math.round(Double.parseDouble(value)) -} - private Map parseReportAttributeMessage(String description) { Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param -> def nameAndValue = param.split(":") @@ -226,29 +222,30 @@ def getTemperature(value) { private Map getBatteryResult(rawValue) { log.debug 'Battery' def linkText = getLinkText(device) - - log.debug rawValue - - def result = [ - name: 'battery', - value: '--' - ] - + + log.debug rawValue + + def result = [ + name: 'battery', + value: '--' + ] + def volts = rawValue / 10 def descriptionText - - if (rawValue == 0) {} - else { - if (volts > 3.5) { - result.descriptionText = "${linkText} battery has too much power (${volts} volts)." + + if (rawValue == 0) {} + else { + if (volts > 3.5) { + result.descriptionText = "${linkText} battery has too much power (${volts} volts)." + } + else if (volts > 0){ + def minVolts = 2.1 + def maxVolts = 3.0 + def pct = (volts - minVolts) / (maxVolts - minVolts) + result.value = Math.min(100, (int) pct * 100) + result.descriptionText = "${linkText} battery was ${result.value}%" + } } - else if (volts > 0){ - def minVolts = 2.1 - def maxVolts = 3.0 - def pct = (volts - minVolts) / (maxVolts - minVolts) - result.value = Math.min(100, (int) pct * 100) - result.descriptionText = "${linkText} battery was ${result.value}%" - }} return result } @@ -280,53 +277,54 @@ private Map getMotionResult(value) { ] } -def refresh() -{ +def refresh() { log.debug "refresh called" - [ + def refreshCmds = [ "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20" - + "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200" ] + + return refreshCmds + enrollResponse() } def configure() { + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + log.debug "Configuring Reporting, IAS CIE, and Bindings." - String zigbeeId = swapEndianHex(device.hub.zigbeeId) - log.debug "Confuguring Reporting, IAS CIE, and Bindings." def configCmds = [ - - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x402 {${device.zigbeeId}} {}", "delay 200", - "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 1500", - - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x20 {${device.zigbeeId}} {}", "delay 200", - "zcl global send-me-a-report 1 0x20 0x20 300 3600 {01}", - "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 1500", + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", - "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x001 {${device.zigbeeId}} {}", "delay 200", - "zcl global write 0x500 0x10 0xf0 {${zigbeeId}}", - "send 0x${device.deviceNetworkId} 1 ${endpointId}" - - + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x20 {${device.zigbeeId}} {}", "delay 200", + "zcl global send-me-a-report 1 0x20 0x20 300 3600 {01}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x402 {${device.zigbeeId}} {}", "delay 200", + "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 1 {${device.zigbeeId}} {}", "delay 200" ] - return configCmds + enrollResponse() + refresh() // send refresh cmds as part of config -} - -private getEndpointId() { - new BigInteger(device.endpointId, 16).toString() + return configCmds + refresh() // send refresh cmds as part of config } def enrollResponse() { log.debug "Sending enroll response" - [ - - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 ${endpointId}" - + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + [ + //Resending the CIE in case the enroll request is sent before CIE is written + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + //Enroll Response + "raw 0x500 {01 23 00 00 00}", + "send 0x${device.deviceNetworkId} 1 1", "delay 200" ] } +private getEndpointId() { + new BigInteger(device.endpointId, 16).toString() +} + private hex(value) { new BigInteger(Math.round(value).toString()).toString(16) } diff --git a/devicetypes/smartthings/smartsense-motion-temp-sensor.src/smartsense-motion-temp-sensor.groovy b/devicetypes/smartthings/smartsense-motion-temp-sensor.src/smartsense-motion-temp-sensor.groovy index 891c2e5..b3e0234 100644 --- a/devicetypes/smartthings/smartsense-motion-temp-sensor.src/smartsense-motion-temp-sensor.groovy +++ b/devicetypes/smartthings/smartsense-motion-temp-sensor.src/smartsense-motion-temp-sensor.groovy @@ -136,10 +136,6 @@ private boolean shouldProcessMessage(cluster) { return !ignoredMessage } -private int getHumidity(value) { - return Math.round(Double.parseDouble(value)) -} - private Map parseReportAttributeMessage(String description) { Map descMap = (description - "read attr - ").split(",").inject([:]) { map, param -> def nameAndValue = param.split(":") @@ -225,22 +221,29 @@ def getTemperature(value) { private Map getBatteryResult(rawValue) { log.debug 'Battery' def linkText = getLinkText(device) - - def result = [ - name: 'battery' - ] - + + log.debug rawValue + + def result = [ + name: 'battery', + value: '--' + ] + def volts = rawValue / 10 def descriptionText - if (volts > 3.5) { - result.descriptionText = "${linkText} battery has too much power (${volts} volts)." - } + + if (rawValue == 0) {} else { - def minVolts = 2.1 - def maxVolts = 3.0 - def pct = (volts - minVolts) / (maxVolts - minVolts) - result.value = Math.min(100, (int) pct * 100) - result.descriptionText = "${linkText} battery was ${result.value}%" + if (volts > 3.5) { + result.descriptionText = "${linkText} battery has too much power (${volts} volts)." + } + else if (volts > 0){ + def minVolts = 2.1 + def maxVolts = 3.0 + def pct = (volts - minVolts) / (maxVolts - minVolts) + result.value = Math.min(100, (int) pct * 100) + result.descriptionText = "${linkText} battery was ${result.value}%" + } } return result @@ -273,50 +276,54 @@ private Map getMotionResult(value) { ] } -def refresh() -{ +def refresh() { log.debug "refresh called" - [ + def refreshCmds = [ "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20" - + "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200" ] + + return refreshCmds + enrollResponse() } def configure() { + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + log.debug "Configuring Reporting, IAS CIE, and Bindings." - String zigbeeId = swapEndianHex(device.hub.zigbeeId) - log.debug "Confuguring Reporting, IAS CIE, and Bindings." def configCmds = [ - "zcl global write 0x500 0x10 0xf0 {${zigbeeId}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", - - "zcl global send-me-a-report 1 0x20 0x20 300 3600 {01}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", - - "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", - - - "zdo bind 0x${device.deviceNetworkId} 1 1 0x402 {${device.zigbeeId}} {}", "delay 200", - "zdo bind 0x${device.deviceNetworkId} 1 1 0x001 {${device.zigbeeId}} {}", "delay 1500", - - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x20 {${device.zigbeeId}} {}", "delay 200", + "zcl global send-me-a-report 1 0x20 0x20 300 3600 {01}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x402 {${device.zigbeeId}} {}", "delay 200", + "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 1 {${device.zigbeeId}} {}", "delay 200" ] return configCmds + refresh() // send refresh cmds as part of config } def enrollResponse() { log.debug "Sending enroll response" - [ - - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1" - + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + [ + //Resending the CIE in case the enroll request is sent before CIE is written + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + //Enroll Response + "raw 0x500 {01 23 00 00 00}", + "send 0x${device.deviceNetworkId} 1 1", "delay 200" ] } +private getEndpointId() { + new BigInteger(device.endpointId, 16).toString() +} + private hex(value) { new BigInteger(Math.round(value).toString()).toString(16) } 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 3cd5126..2608cce 100644 --- a/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy +++ b/devicetypes/smartthings/smartsense-multi-sensor.src/smartsense-multi-sensor.groovy @@ -158,6 +158,7 @@ private boolean shouldProcessMessage(cluster) { return !ignoredMessage } +//TODO: Not sure why this is here. Clean up if not required during refactor private int getHumidity(value) { return Math.round(Double.parseDouble(value)) } @@ -313,52 +314,48 @@ def getTemperature(value) { ] } - def refresh() - { + def refresh() { log.debug "Refreshing Values " - [ + def refreshCmds = [ /* sensitivity - default value (8) */ "zcl mfg-code 0x104E", "delay 200", "zcl global write 0xFC02 0 0x20 {02}", "delay 200", "send 0x${device.deviceNetworkId} 1 1", "delay 400", - - "zcl mfg-code 0x104E", "delay 200", - "zcl global read 0xFC02 0x0000", "delay 200", - "send 0x${device.deviceNetworkId} 1 1","delay 400", - + "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200", "zcl mfg-code 0x104E", "delay 200", - "zcl global read 0xFC02 0x0010", "delay 100", + "zcl global read 0xFC02 0x0010", "send 0x${device.deviceNetworkId} 1 1","delay 400", "zcl mfg-code 0x104E", "delay 200", - "zcl global read 0xFC02 0x0012", "delay 100", + "zcl global read 0xFC02 0x0012", "send 0x${device.deviceNetworkId} 1 1","delay 400", "zcl mfg-code 0x104E", "delay 200", - "zcl global read 0xFC02 0x0013", "delay 100", + "zcl global read 0xFC02 0x0013", "send 0x${device.deviceNetworkId} 1 1","delay 400", "zcl mfg-code 0x104E", "delay 200", - "zcl global read 0xFC02 0x0014", "delay 100", - "send 0x${device.deviceNetworkId} 1 1" + "zcl global read 0xFC02 0x0014", + "send 0x${device.deviceNetworkId} 1 1", "delay 400" + ] - ] + return refreshCmds + enrollResponse() } def configure() { - String zigbeeId = swapEndianHex(device.hub.zigbeeId) + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) log.debug "Configuring Reporting" def configCmds = [ "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 1 {${device.zigbeeId}} {}", "delay 200", - "zcl global write 0x500 0x10 0xf0 {${zigbeeId}}", + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x20 {${device.zigbeeId}} {}", "delay 200", @@ -397,11 +394,14 @@ private getEndpointId() { def enrollResponse() { log.debug "Sending enroll response" + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) [ - - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1" - + //Resending the CIE in case the enroll request is sent before CIE is written + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + //Enroll Response + "raw 0x500 {01 23 00 00 00}", + "send 0x${device.deviceNetworkId} 1 1", "delay 200" ] } diff --git a/devicetypes/smartthings/smartsense-open-closed-accelerometer-sensor.src/smartsense-open-closed-accelerometer-sensor.groovy b/devicetypes/smartthings/smartsense-open-closed-accelerometer-sensor.src/smartsense-open-closed-accelerometer-sensor.groovy index 8ef9a52..2582580 100644 --- a/devicetypes/smartthings/smartsense-open-closed-accelerometer-sensor.src/smartsense-open-closed-accelerometer-sensor.groovy +++ b/devicetypes/smartthings/smartsense-open-closed-accelerometer-sensor.src/smartsense-open-closed-accelerometer-sensor.groovy @@ -284,52 +284,61 @@ def getTemperature(value) { ] } - def refresh() - { + def refresh() { log.debug "Refreshing Temperature and Battery " - [ + def refreshCmds = [ "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", //"st rattr 0x${device.deviceNetworkId} 1 0xFC02 2", "delay 200", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20" + "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200" ] + + return refreshCmds + enrollResponse() } def configure() { - String zigbeeId = swapEndianHex(device.hub.zigbeeId) - log.debug "Confuguring Reporting, IAS CIE, and Bindings." + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + log.debug "Configuring Reporting, IAS CIE, and Bindings." def configCmds = [ - "zcl global write 0x500 0x10 0xf0 {${zigbeeId}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", - "zcl global send-me-a-report 1 0x20 0x20 600 3600 {01}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "zdo bind 0x${device.deviceNetworkId} 1 ${endpointId} 0x20 {${device.zigbeeId}} {}", "delay 200", + "zcl global send-me-a-report 1 0x20 0x20 600 3600 {01}", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", - "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", - - "zcl global send-me-a-report 0xFC02 2 0x18 300 3600 {01}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "zdo bind 0x${device.deviceNetworkId} 1 1 0x402 {${device.zigbeeId}} {}", "delay 500", + "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", "zdo bind 0x${device.deviceNetworkId} 1 1 0xFC02 {${device.zigbeeId}} {}", "delay 500", - "zdo bind 0x${device.deviceNetworkId} 1 1 0x402 {${device.zigbeeId}} {}", "delay 500", - "zdo bind 0x${device.deviceNetworkId} 1 1 1 {${device.zigbeeId}} {}" + "zcl global send-me-a-report 0xFC02 2 0x18 300 3600 {01}", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", + "zdo bind 0x${device.deviceNetworkId} 1 1 1 {${device.zigbeeId}} {}", "delay 500" ] return configCmds + refresh() // send refresh cmds as part of config } def enrollResponse() { log.debug "Sending enroll response" + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) [ - - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1" - + //Resending the CIE in case the enroll request is sent before CIE is written + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + //Enroll Response + "raw 0x500 {01 23 00 00 00}", + "send 0x${device.deviceNetworkId} 1 1", "delay 200" ] } + +private getEndpointId() { + new BigInteger(device.endpointId, 16).toString() +} + private hex(value) { new BigInteger(Math.round(value).toString()).toString(16) } diff --git a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy index 4b2c8a0..cde1438 100644 --- a/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy +++ b/devicetypes/smartthings/smartsense-open-closed-sensor.src/smartsense-open-closed-sensor.groovy @@ -260,30 +260,29 @@ private Map getContactResult(value) { ] } -def refresh() -{ +def refresh() { log.debug "Refreshing Temperature and Battery" - [ - + def refreshCmds = [ "st rattr 0x${device.deviceNetworkId} 1 0x402 0", "delay 200", - "st rattr 0x${device.deviceNetworkId} 1 1 0x20" - + "st rattr 0x${device.deviceNetworkId} 1 1 0x20", "delay 200" ] + + return refreshCmds + enrollResponse() } def configure() { - String zigbeeId = swapEndianHex(device.hub.zigbeeId) - log.debug "Confuguring Reporting, IAS CIE, and Bindings." + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + log.debug "Configuring Reporting, IAS CIE, and Bindings." def configCmds = [ - "zcl global write 0x500 0x10 0xf0 {${zigbeeId}}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", - "zcl global send-me-a-report 1 0x20 0x20 600 3600 {01}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "zcl global send-me-a-report 1 0x20 0x20 600 3600 {01}", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", - "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1", "delay 1500", + "zcl global send-me-a-report 0x402 0 0x29 300 3600 {6400}", + "send 0x${device.deviceNetworkId} 1 1", "delay 500", //"raw 0x500 {01 23 00 00 00}", "delay 200", @@ -291,20 +290,28 @@ def configure() { "zdo bind 0x${device.deviceNetworkId} 1 1 0x402 {${device.zigbeeId}} {}", "delay 500", - "zdo bind 0x${device.deviceNetworkId} 1 1 1 {${device.zigbeeId}} {}" + "zdo bind 0x${device.deviceNetworkId} 1 1 1 {${device.zigbeeId}} {}", "delay 500" ] return configCmds + refresh() // send refresh cmds as part of config } def enrollResponse() { log.debug "Sending enroll response" - [ - - "raw 0x500 {01 23 00 00 00}", "delay 200", - "send 0x${device.deviceNetworkId} 1 1" - - ] + String zigbeeEui = swapEndianHex(device.hub.zigbeeEui) + [ + //Resending the CIE in case the enroll request is sent before CIE is written + "zcl global write 0x500 0x10 0xf0 {${zigbeeEui}}", + "send 0x${device.deviceNetworkId} 1 ${endpointId}", "delay 500", + //Enroll Response + "raw 0x500 {01 23 00 00 00}", + "send 0x${device.deviceNetworkId} 1 1", "delay 200" + ] } + +private getEndpointId() { + new BigInteger(device.endpointId, 16).toString() +} + private hex(value) { new BigInteger(Math.round(value).toString()).toString(16) }