From 06c10c7b5b382997e1fd9a54095204dfc5736e88 Mon Sep 17 00:00:00 2001 From: Konrad K <33450498+KKlimczukS@users.noreply.github.com> Date: Tue, 9 Feb 2021 00:19:14 +0100 Subject: [PATCH 1/4] ICP-14001 - add ocfDeviceType to the fingerprint (#57588) --- devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index 242f5e6d8be..dd7b9b783d7 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -83,7 +83,7 @@ metadata { fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL1KD", deviceJoinName: "Leviton Dimmer Switch", ocfDeviceType: "oic.d.switch" //Leviton Lumina RF Dimmer Switch fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "ZSD07", deviceJoinName: "Leviton Dimmer Switch", ocfDeviceType: "oic.d.switch" //Leviton Lumina RF 0-10V Dimming Wall Switch fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0301, 0B05", outClusters: "0019", manufacturer: "Leviton", model: "DG3HL", deviceJoinName: "Leviton Dimmer Switch" //Leviton Zigbee Plug-in DImmer DG3HL - fingerprint manufacturer: "Leviton", model: "DG6HD", deviceJoinName: "Leviton Dimmer Switch" //Leviton Zigbee Dimmer DG6HD, Raw Description: 01 0104 0101 00 08 0000 0003 0004 0005 0006 0008 0301 0B05 + fingerprint manufacturer: "Leviton", model: "DG6HD", deviceJoinName: "Leviton Dimmer Switch", ocfDeviceType: "oic.d.switch" //Leviton Zigbee Dimmer DG6HD, Raw Description: 01 0104 0101 00 08 0000 0003 0004 0005 0006 0008 0301 0B05 // LINKIND fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0B05, 1000, FC82", outClusters: "000A, 0019", manufacturer: "lk", model: "ZBT-DIMLight-GLS0010", deviceJoinName: "Linkind Light" //Linkind Dimmable A19 Bulb From 62da13c3627d141bbe2612669aa7f81eafbe9e00 Mon Sep 17 00:00:00 2001 From: Konrad K <33450498+KKlimczukS@users.noreply.github.com> Date: Tue, 9 Feb 2021 00:20:11 +0100 Subject: [PATCH 2/4] WWST-7205 - Enbrighten Smart Dimmer / new generic DTH to support dimmers that report both power [W] and energy [kWh] values. (#56598) * WWST-7205 - new generic DTH to support dimmers that report both power [W] and energy [kWh] values. * WWST-7205 - fixes indentations * WWST-7205 - fixes spacing * WWST-7205 - changes deviceJoinName * WWST-7205 - switches this DTH to local execution * WWST-7205 - adds minHubCoreVersion * WWST-7205 - fixes handling power and energy reports, fixes indentations * WWST-7205 - fixes handling power reports * WWST-7205 - changes ocfDeviceType to oic.d.switch --- .../zigbee-metering-dimmer.groovy | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 devicetypes/smartthings/zigbee-metering-dimmer.src/zigbee-metering-dimmer.groovy diff --git a/devicetypes/smartthings/zigbee-metering-dimmer.src/zigbee-metering-dimmer.groovy b/devicetypes/smartthings/zigbee-metering-dimmer.src/zigbee-metering-dimmer.groovy new file mode 100644 index 00000000000..0daad08df8f --- /dev/null +++ b/devicetypes/smartthings/zigbee-metering-dimmer.src/zigbee-metering-dimmer.groovy @@ -0,0 +1,142 @@ +/** + * Copyright 2021 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. + * + */ +import physicalgraph.zigbee.zcl.DataType +metadata { + definition (name: "ZigBee Metering Dimmer", namespace: "smartthings", author: "SmartThings", ocfDeviceType: "oic.d.switch", mnmn: "SmartThings", vid:"generic-dimmer-power-energy", runLocally: true, executeCommandsLocally: true, genericHandler: "Zigbee", minHubCoreVersion: '000.019.00012') { + + capability "Actuator" + capability "Configuration" + capability "Refresh" + capability "Power Meter" + capability "Energy Meter" + capability "Switch" + capability "Switch Level" + capability "Health Check" + + // Enbrighten/Jasco + fingerprint manufacturer: "Jasco Products", model: "43082", deviceJoinName: "Enbrighten Dimmer Switch" //Enbrighten, in-Wall Smart Dimmer With Energy Monitoring 43082, Raw Description: 01 0104 0101 00 08 0000 0003 0004 0005 0006 0008 0702 0B05 02 000A 0019 + } +} + +def getATTRIBUTE_READING_INFO_SET() { 0x0000 } +def getATTRIBUTE_HISTORICAL_CONSUMPTION() { 0x0400 } + +// Parse incoming device messages to generate events +def parse(String description) { + log.debug "description is $description" + List result = [] + + def event = zigbee.getEvent(description) + if (event) { + log.info event + if (event.name == "power") { + def powerDiv = device.getDataValue("divisor") + powerDiv = powerDiv ? (powerDiv as int) : 1 + event.value = event.value/powerDiv + event.unit = "W" + } else if (event.name == "energy") { + def energyDiv = device.getDataValue("energyDivisor") + energyDiv = energyDiv ? (energyDiv as int) : 100 + event.value = event.value/energyDiv + event.unit = "kWh" + } + log.info "event: $event" + result << event + } else { + def descMap = zigbee.parseDescriptionAsMap(description) + log.debug "descMap: $descMap" + + List attrData = [[clusterInt: descMap.clusterInt ,attrInt: descMap.attrInt, value: descMap.value]] + descMap.additionalAttrs.each { + attrData << [clusterInt: descMap.clusterInt, attrInt: it.attrInt, value: it.value] + } + + attrData.each { + def map = [:] + if (it.value && it.clusterInt == zigbee.SIMPLE_METERING_CLUSTER && it.attrInt == ATTRIBUTE_HISTORICAL_CONSUMPTION) { + log.debug "power" + map.name = "power" + def powerDiv = device.getDataValue("divisor") + powerDiv = powerDiv ? (powerDiv as int) : 1 + map.value = zigbee.convertHexToInt(it.value)/powerDiv + map.unit = "W" + } + else if (it.value && it.clusterInt == zigbee.SIMPLE_METERING_CLUSTER && it.attrInt == ATTRIBUTE_READING_INFO_SET) { + log.debug "energy" + map.name = "energy" + def energyDiv = device.getDataValue("energyDivisor") + energyDiv = energyDiv ? (energyDiv as int) : 100 + map.value = zigbee.convertHexToInt(it.value)/energyDiv + map.unit = "kWh" + } + + if (map) { + result << createEvent(map) + } + } + } + log.debug "result: ${result}" + return result +} + +def off() { + zigbee.off() +} + +def on() { + zigbee.on() +} + +def setLevel(value, rate = null) { + zigbee.setLevel(value) + (value?.toInteger() > 0 ? zigbee.on() : []) +} + +/** + * PING is used by Device-Watch in attempt to reach the Device + * */ +def ping() { + log.debug "ping" + return refresh() +} + +def refresh() { + log.debug "refresh" + zigbee.onOffRefresh() + + zigbee.levelRefresh() + + zigbee.simpleMeteringPowerRefresh() + + zigbee.readAttribute(zigbee.SIMPLE_METERING_CLUSTER, ATTRIBUTE_READING_INFO_SET) +} + +def configure() { + log.debug "Configuring Reporting and Bindings." + + if (isJascoProducts()) { + device.updateDataValue("divisor", "10") + device.updateDataValue("energyDivisor", "10000") + } else { + device.updateDataValue("divisor", "1") + device.updateDataValue("energyDivisor", "100") + } + + sendEvent(name: "checkInterval", value: 2 * 60 * 60 + 2 * 60, displayed: false, data: [protocol: "zigbee", hubHardwareId: device.hub.hardwareID]) + return refresh() + + zigbee.onOffConfig() + + zigbee.levelConfig() + + zigbee.simpleMeteringPowerConfig() + + zigbee.configureReporting(zigbee.SIMPLE_METERING_CLUSTER, ATTRIBUTE_READING_INFO_SET, DataType.UINT48, 1, 600, 1) +} + +private boolean isJascoProducts() { + device.getDataValue("manufacturer") == "Jasco Products" +} \ No newline at end of file From ffa0b5ed083c73f071ce90daf769f5b0354bc507 Mon Sep 17 00:00:00 2001 From: MGoralczykS <42434140+MGoralczykS@users.noreply.github.com> Date: Tue, 9 Feb 2021 14:41:28 +0100 Subject: [PATCH 3/4] [ICP-14010] Change icon for Leviton DG3HL (#57677) * Change icon for Leviton DG3HL * Shortening of fingerpring --- devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy index dd7b9b783d7..6b0a8220917 100644 --- a/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy +++ b/devicetypes/smartthings/zigbee-dimmer.src/zigbee-dimmer.groovy @@ -82,7 +82,7 @@ metadata { fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL3HL", deviceJoinName: "Leviton Dimmer Switch", ocfDeviceType: "oic.d.switch" //Leviton Lumina RF Plug-In Dimmer fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "DL1KD", deviceJoinName: "Leviton Dimmer Switch", ocfDeviceType: "oic.d.switch" //Leviton Lumina RF Dimmer Switch fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008", outClusters: "0003, 0006, 0008, 0019, 0406", manufacturer: "Leviton", model: "ZSD07", deviceJoinName: "Leviton Dimmer Switch", ocfDeviceType: "oic.d.switch" //Leviton Lumina RF 0-10V Dimming Wall Switch - fingerprint profileId: "0104", inClusters: "0000, 0003, 0004, 0005, 0006, 0008, 0301, 0B05", outClusters: "0019", manufacturer: "Leviton", model: "DG3HL", deviceJoinName: "Leviton Dimmer Switch" //Leviton Zigbee Plug-in DImmer DG3HL + fingerprint manufacturer: "Leviton", model: "DG3HL", deviceJoinName: "Leviton Dimmer Switch", ocfDeviceType: "oic.d.smartplug" //Leviton Zigbee Plug-in DImmer DG3HL, Raw Description: 01 0104 0101 00 08 0000 0003 0004 0005 0006 0008 0301 0B05 01 0019 fingerprint manufacturer: "Leviton", model: "DG6HD", deviceJoinName: "Leviton Dimmer Switch", ocfDeviceType: "oic.d.switch" //Leviton Zigbee Dimmer DG6HD, Raw Description: 01 0104 0101 00 08 0000 0003 0004 0005 0006 0008 0301 0B05 // LINKIND From a4d8d1f7bee83c6762e907fb7b69553f4c0ad921 Mon Sep 17 00:00:00 2001 From: MGoralczykS <42434140+MGoralczykS@users.noreply.github.com> Date: Tue, 9 Feb 2021 19:33:24 +0100 Subject: [PATCH 4/4] [ICP-13928] Delete Qubino 1D Relay model from defaultEndpoint() (#57678) * Add basicSet to update status when manual action is preformed * Space fix * Delete Qubino 1D Relay model from defaultEndpoint() --- .../qubino/qubino-flush-2-relay.src/qubino-flush-2-relay.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devicetypes/qubino/qubino-flush-2-relay.src/qubino-flush-2-relay.groovy b/devicetypes/qubino/qubino-flush-2-relay.src/qubino-flush-2-relay.groovy index 85970314057..a23cbf7f262 100644 --- a/devicetypes/qubino/qubino-flush-2-relay.src/qubino-flush-2-relay.groovy +++ b/devicetypes/qubino/qubino-flush-2-relay.src/qubino-flush-2-relay.groovy @@ -273,7 +273,7 @@ def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cm } def defaultEndpoint() { - if (zwaveInfo?.model?.equals("0052") || zwaveInfo?.model?.equals("0053")) { + if (zwaveInfo?.model?.equals("0052")) { return null } else { return 1