diff --git a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy index 49cf4c94215..4e3553571be 100644 --- a/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy +++ b/devicetypes/smartthings/zwave-dimmer-switch-generic.src/zwave-dimmer-switch-generic.groovy @@ -28,6 +28,7 @@ metadata { fingerprint mfr: "001D", prod: "3201", model: "0001", deviceJoinName: "Leviton Dimmer Switch" fingerprint mfr: "001D", prod: "1B03", model: "0334", deviceJoinName: "Leviton Universal Dimmer" fingerprint mfr: "011A", prod: "0102", model: "0201", deviceJoinName: "Enerwave In-Wall Dimmer" + fingerprint mfr: "001D", prod: "1001", model: "0334", deviceJoinName: "Leviton 3-Speed Fan Controller" fingerprint mfr: "001D", prod: "0602", model: "0334", deviceJoinName: "Leviton Magnetic Low Voltage Dimmer" fingerprint mfr: "001D", prod: "0401", model: "0334", deviceJoinName: "Leviton 600W Incandescent Dimmer" fingerprint mfr: "0111", prod: "8200", model: "0200", deviceJoinName: "Remotec Technology Plug-In Dimmer" @@ -36,6 +37,9 @@ metadata { fingerprint mfr: "0039", prod: "5044", model: "3038", deviceJoinName: "Honeywell Z-Wave Plug-in Dimmer" fingerprint mfr: "0039", prod: "4944", model: "3038", deviceJoinName: "Honeywell Z-Wave In-Wall Smart Dimmer" fingerprint mfr: "0039", prod: "4944", model: "3130", deviceJoinName: "Honeywell Z-Wave In-Wall Smart Toggle Dimmer" + fingerprint mfr: "0063", prod: "4944", model: "3034", deviceJoinName: "GE In-Wall Smart Fan Control" + fingerprint mfr: "0063", prod: "4944", model: "3131", deviceJoinName: "GE In-Wall Smart Fan Control" + fingerprint mfr: "0039", prod: "4944", model: "3131", deviceJoinName: "Honeywell Z-Wave Plus In-Wall Fan Speed Control" fingerprint mfr: "001A", prod: "4449", model: "0101", deviceJoinName: "Eaton RF Master Dimmer" fingerprint mfr: "001A", prod: "4449", model: "0003", deviceJoinName: "Eaton RF Dimming Plug-In Module" fingerprint mfr: "0086", prod: "0103", model: "0063", deviceJoinName: "Aeotec Smart Dimmer 6" diff --git a/devicetypes/smartthings/zwave-fan-controller.src/zwave-fan-controller.groovy b/devicetypes/smartthings/zwave-fan-controller.src/zwave-fan-controller.groovy deleted file mode 100644 index c4308be48c0..00000000000 --- a/devicetypes/smartthings/zwave-fan-controller.src/zwave-fan-controller.groovy +++ /dev/null @@ -1,160 +0,0 @@ -/** - * Copyright 2018 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 Fan Controller", namespace: "smartthings", author: "SmartThings", ocfDeviceType: "oic.d.fan") { - capability "Switch Level" - capability "Switch" - capability "Fan Speed" - capability "Health Check" - capability "Actuator" - capability "Refresh" - capability "Sensor" - - command "low" - command "medium" - command "high" - command "raiseFanSpeed" - command "lowerFanSpeed" - - fingerprint mfr: "001D", prod: "1001", model: "0334", deviceJoinName: "Leviton 3-Speed Fan Controller" - fingerprint mfr: "0063", prod: "4944", model: "3034", deviceJoinName: "GE In-Wall Smart Fan Control" - fingerprint mfr: "0063", prod: "4944", model: "3131", deviceJoinName: "GE In-Wall Smart Fan Control" - fingerprint mfr: "0039", prod: "4944", model: "3131", deviceJoinName: "Honeywell Z-Wave Plus In-Wall Fan Speed Control" - } - - simulator { - status "00%": "command: 2003, payload: 00" - status "33%": "command: 2003, payload: 21" - status "66%": "command: 2003, payload: 42" - status "99%": "command: 2003, payload: 63" - } - - tiles(scale: 2) { - multiAttributeTile(name: "fanSpeed", type: "generic", width: 6, height: 4, canChangeIcon: true) { - tileAttribute("device.fanSpeed", key: "PRIMARY_CONTROL") { - attributeState "0", label: "off", action: "switch.on", icon: "st.thermostat.fan-off", backgroundColor: "#ffffff" - attributeState "1", label: "low", action: "switch.off", icon: "st.thermostat.fan-on", backgroundColor: "#00a0dc" - attributeState "2", label: "medium", action: "switch.off", icon: "st.thermostat.fan-on", backgroundColor: "#00a0dc" - attributeState "3", label: "high", action: "switch.off", icon: "st.thermostat.fan-on", backgroundColor: "#00a0dc" - } - tileAttribute("device.fanSpeed", key: "VALUE_CONTROL") { - attributeState "VALUE_UP", action: "raiseFanSpeed" - attributeState "VALUE_DOWN", action: "lowerFanSpeed" - } - } - - standardTile("refresh", "device.switch", width: 2, height: 2, inactiveLabel: false, decoration: "flat") { - state "default", label: '', action: "refresh.refresh", icon: "st.secondary.refresh" - } - main "fanSpeed" - details(["fanSpeed", "refresh"]) - } - -} - -def installed() { - sendEvent(name: "checkInterval", value: 2 * 15 * 60 + 2 * 60, displayed: false, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID, offlinePingable: "1"]) - response(refresh()) -} - -def parse(String description) { - def result = null - if (description != "updated") { - log.debug "parse() >> zwave.parse($description)" - def cmd = zwave.parse(description, [0x20: 1, 0x26: 1]) - if (cmd) { - result = 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) { - fanEvents(cmd) -} - -def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) { - fanEvents(cmd) -} - -def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv1.SwitchMultilevelReport cmd) { - fanEvents(cmd) -} - -def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv1.SwitchMultilevelSet cmd) { - fanEvents(cmd) -} - -def fanEvents(physicalgraph.zwave.Command cmd) { - def value = (cmd.value ? "on" : "off") - def result = [createEvent(name: "switch", value: value)] - result << createEvent(name: "level", value: cmd.value == 99 ? 100 : cmd.value) - result << createEvent(name: "fanSpeed", value: cmd.value/33) - return result -} - -def on() { - setLevel(0xFF) -} - -def off() { - setLevel(0x00) -} - -def setLevel(value) { - log.debug "setLevel >> value: $value" - def level = value as Integer - level = level == 255 ? level : Math.max(Math.min(level, 99), 0) - sendEvent(name: "switch", value: level > 0 ? "on" : "off") - delayBetween([zwave.basicV1.basicSet(value: level).format(), zwave.switchMultilevelV1.switchMultilevelGet().format()], 5000) -} - -def setFanSpeed(speed) { - setLevel(speed * 33) -} - -def raiseFanSpeed() { - setFanSpeed(Math.min((device.currentValue("fanSpeed") as Integer) + 1, 3)) -} - -def lowerFanSpeed() { - setFanSpeed(Math.max((device.currentValue("fanSpeed") as Integer) - 1, 0)) -} - -def low() { - setFanSpeed(1) -} - -def medium() { - setFanSpeed(2) -} - -def high() { - setFanSpeed(3) -} - -def refresh() { - zwave.switchMultilevelV1.switchMultilevelGet().format() -} - -def ping() { - refresh() -} - diff --git a/smartapps/smartthings/logitech-harmony-connect.src/logitech-harmony-connect.groovy b/smartapps/smartthings/logitech-harmony-connect.src/logitech-harmony-connect.groovy index 98919ad3d1e..3522703f60a 100644 --- a/smartapps/smartthings/logitech-harmony-connect.src/logitech-harmony-connect.groovy +++ b/smartapps/smartthings/logitech-harmony-connect.src/logitech-harmony-connect.groovy @@ -521,6 +521,13 @@ def poll() { def pollResponse(response, data) { if (response.hasError()) { log.error "Harmony - response has error: $response.errorMessage" + def activities = getChildDevices() + // Device-Watch relies on the Logitech Harmony Cloud to get the Device state. + activities.each { activity -> + if ("${activity.deviceNetworkId}".contains("harmony-${it.key}")) { + activity.sendEvent(name: "DeviceWatch-DeviceStatus", value: "offline", displayed: false, isStateChange: true) + } + } if (response.status == 401) { // token is expired state.remove("HarmonyAccessToken") log.warn "Harmony - Access token has expired" @@ -539,10 +546,9 @@ def pollResponse(response, data) { def activities = getChildDevices() ResponseValues.hubs.each { // Device-Watch relies on the Logitech Harmony Cloud to get the Device state. - def isAlive = it.value.status activities.each { activity -> if ("${activity.deviceNetworkId}".contains("harmony-${it.key}")) { - activity.sendEvent(name: "DeviceWatch-DeviceStatus", value: isAlive!=504? "online":"offline", displayed: false, isStateChange: true) + activity.sendEvent(name: "DeviceWatch-DeviceStatus", value: "online", displayed: false, isStateChange: true) } } if (it.value.message == "OK") {