From 445c115c1456743198e938f511a113f96deb2948 Mon Sep 17 00:00:00 2001 From: Juan Pablo Risso Date: Fri, 20 Jan 2017 17:49:15 -0500 Subject: [PATCH] DVCSMP-2324 - Centralite Thermostat handle multiple attributes (#1606) - Curly braces - remove parseDescriptionAsMap - descMap to it - Appended to the result list - Convert to list and appended --- .../centralite-thermostat.groovy | 50 +++++++++---------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy b/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy index a92839f..394ac2d 100644 --- a/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy +++ b/devicetypes/smartthings/centralite-thermostat.src/centralite-thermostat.groovy @@ -81,51 +81,47 @@ metadata { // parse events into attributes def parse(String description) { log.debug "Parse description $description" - def map = [:] - if (description?.startsWith("read attr -")) { - def descMap = parseDescriptionAsMap(description) - log.debug "Desc Map: $descMap" - if (descMap.cluster == "0201" && descMap.attrId == "0000") { + List result = [] + def descMap = zigbee.parseDescriptionAsMap(description) + log.debug "Desc Map: $descMap" + List attrData = [[cluster: descMap.cluster ,attrId: descMap.attrId, value: descMap.value]] + descMap.additionalAttrs.each { + attrData << [cluster: descMap.cluster, attrId: it.attrId, value: it.value] + } + attrData.each { + def map = [:] + if (it.cluster == "0201" && it.attrId == "0000") { log.debug "TEMP" map.name = "temperature" - map.value = getTemperature(descMap.value) + map.value = getTemperature(it.value) map.unit = temperatureScale - } else if (descMap.cluster == "0201" && descMap.attrId == "0011") { + } else if (it.cluster == "0201" && it.attrId == "0011") { log.debug "COOLING SETPOINT" map.name = "coolingSetpoint" - map.value = getTemperature(descMap.value) + map.value = getTemperature(it.value) map.unit = temperatureScale - } else if (descMap.cluster == "0201" && descMap.attrId == "0012") { + } else if (it.cluster == "0201" && it.attrId == "0012") { log.debug "HEATING SETPOINT" map.name = "heatingSetpoint" - map.value = getTemperature(descMap.value) + map.value = getTemperature(it.value) map.unit = temperatureScale - } else if (descMap.cluster == "0201" && descMap.attrId == "001c") { + } else if (it.cluster == "0201" && it.attrId == "001c") { log.debug "MODE" map.name = "thermostatMode" - map.value = getModeMap()[descMap.value] - } else if (descMap.cluster == "0202" && descMap.attrId == "0000") { + map.value = getModeMap()[it.value] + } else if (it.cluster == "0202" && it.attrId == "0000") { log.debug "FAN MODE" map.name = "thermostatFanMode" - map.value = getFanModeMap()[descMap.value] + map.value = getFanModeMap()[it.value] } + if (map) { + result << createEvent(map) + } + log.debug "Parse returned $map" } - - def result = null - if (map) { - result = createEvent(map) - } - log.debug "Parse returned $map" return result } -def parseDescriptionAsMap(description) { - (description - "read attr - ").split(",").inject([:]) { map, param -> - def nameAndValue = param.split(":") - map += [(nameAndValue[0].trim()):nameAndValue[1].trim()] - } -} - def getModeMap() { [ "00":"off", "03":"cool",