From dba8ea7b990173e7f86b848fc079603efd74847f Mon Sep 17 00:00:00 2001 From: Juan Pablo Risso Date: Sat, 30 Jul 2016 17:14:02 -0400 Subject: [PATCH] SSVD-1823 - Z-wave Switch Generic (#1083) Remove Indicator Update Name deviceJoinName --- .../zwave-switch-generic.groovy | 143 ++++++++++++++++++ .../zwave-switch.src/zwave-switch.groovy | 13 +- 2 files changed, 147 insertions(+), 9 deletions(-) create mode 100644 devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy diff --git a/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy new file mode 100644 index 0000000..1f2912d --- /dev/null +++ b/devicetypes/smartthings/zwave-switch-generic.src/zwave-switch-generic.groovy @@ -0,0 +1,143 @@ +/** + * Copyright 2015 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. + * + */ +metadata { + definition (name: "Z-Wave Switch (Generic)", namespace: "smartthings", author: "SmartThings") { + capability "Actuator" + capability "Switch" + capability "Polling" + capability "Refresh" + capability "Sensor" + + fingerprint inClusters: "0x25", deviceJoinName: "Z-Wave Switch" + } + + // simulator metadata + simulator { + status "on": "command: 2003, payload: FF" + status "off": "command: 2003, payload: 00" + + // reply messages + reply "2001FF,delay 100,2502": "command: 2503, payload: FF" + reply "200100,delay 100,2502": "command: 2503, payload: 00" + } + + // tile definitions + tiles(scale: 2) { + multiAttributeTile(name:"switch", type: "lighting", width: 6, height: 4, canChangeIcon: true){ + tileAttribute ("device.switch", key: "PRIMARY_CONTROL") { + attributeState "on", label: '${name}', action: "switch.off", icon: "st.switches.switch.on", backgroundColor: "#79b821" + attributeState "off", label: '${name}', action: "switch.on", icon: "st.switches.switch.off", backgroundColor: "#ffffff" + } + } + + standardTile("refresh", "device.switch", width: 2, height: 2, inactiveLabel: false, decoration: "flat") { + state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh" + } + + main "switch" + details(["switch","refresh"]) + } +} + +def parse(String description) { + def result = null + def cmd = zwave.parse(description, [0x20: 1, 0x70: 1]) + if (cmd) { + result = createEvent(zwaveEvent(cmd)) + } + if (result?.name == 'hail' && hubFirmwareLessThan("000.011.00602")) { + result = [result, response(zwave.basicV1.basicGet())] + log.debug "Was hailed: requesting state update" + } else { + log.debug "Parse returned ${result?.descriptionText}" + } + return result +} + +def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) { + [name: "switch", value: cmd.value ? "on" : "off", type: "physical"] +} + +def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) { + [name: "switch", value: cmd.value ? "on" : "off", type: "physical"] +} + +def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) { + [name: "switch", value: cmd.value ? "on" : "off", type: "digital"] +} + +def zwaveEvent(physicalgraph.zwave.commands.configurationv1.ConfigurationReport cmd) { + def value = "when off" + if (cmd.configurationValue[0] == 1) {value = "when on"} + if (cmd.configurationValue[0] == 2) {value = "never"} + [name: "indicatorStatus", value: value, display: false] +} + +def zwaveEvent(physicalgraph.zwave.commands.hailv1.Hail cmd) { + [name: "hail", value: "hail", descriptionText: "Switch button was pressed", displayed: false] +} + +def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) { + log.debug "manufacturerId: ${cmd.manufacturerId}" + log.debug "manufacturerName: ${cmd.manufacturerName}" + log.debug "productId: ${cmd.productId}" + log.debug "productTypeId: ${cmd.productTypeId}" + def msr = String.format("%04X-%04X-%04X", cmd.manufacturerId, cmd.productTypeId, cmd.productId) + updateDataValue("MSR", msr) + updateDataValue("manufacturer", cmd.manufacturerName) + createEvent([descriptionText: "$device.displayName MSR: $msr", isStateChange: false]) +} + + +def zwaveEvent(physicalgraph.zwave.Command cmd) { + // Handles all Z-Wave commands we aren't interested in + [:] +} + +def on() { + delayBetween([ + zwave.basicV1.basicSet(value: 0xFF).format(), + zwave.switchBinaryV1.switchBinaryGet().format() + ]) +} + +def off() { + delayBetween([ + zwave.basicV1.basicSet(value: 0x00).format(), + zwave.switchBinaryV1.switchBinaryGet().format() + ]) +} + +def poll() { + delayBetween([ + zwave.switchBinaryV1.switchBinaryGet().format(), + zwave.manufacturerSpecificV1.manufacturerSpecificGet().format() + ]) +} + +def refresh() { + delayBetween([ + zwave.switchBinaryV1.switchBinaryGet().format(), + zwave.manufacturerSpecificV1.manufacturerSpecificGet().format() + ]) +} + +def invertSwitch(invert=true) { + if (invert) { + zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 4, size: 1).format() + } + else { + zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 4, size: 1).format() + } +} diff --git a/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy b/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy index c46c6a7..afec29b 100644 --- a/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy +++ b/devicetypes/smartthings/zwave-switch.src/zwave-switch.groovy @@ -20,7 +20,10 @@ metadata { capability "Refresh" capability "Sensor" - fingerprint inClusters: "0x25" + fingerprint mfr:"0063", prod:"4952", deviceJoinName: "Z-Wave Wall Switch" + fingerprint mfr:"0063", prod:"5257", deviceJoinName: "Z-Wave Wall Switch" + fingerprint mfr:"0063", prod:"5052", deviceJoinName: "Z-Wave Plug-In Switch" + fingerprint mfr:"0113", prod:"5257", deviceJoinName: "Z-Wave Wall Switch" } // simulator metadata @@ -60,15 +63,7 @@ metadata { } } -def installed(){ - initialized() -} - def updated(){ - initialized() -} - -def initialized() { switch (ledIndicator) { case "on": indicatorWhenOn()