Working Revision:
/**
* HomeSeer HS-WD200+
*
* Original Copyright 2018 HomeSeer
*
* Modified from the work by DarwinsDen device handler for the WD100 version 1.03
*
*
* 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.
*
* Author: HomeSeer
* Date: 12/2017
* Modified: 11/2020
*
* Changelog:
*
* 1.0 Initial Version (HomeSeer)
* 1.0 Adaped for Hubitat by RMoRobert
*
*
* Button Mappings:
*
* ACTION BUTTON# BUTTON ACTION
* Single-Tap Up 1 pushed
* Single-Tap Down 2 pushed
* Double-Tap Up 3 pushed
* Double-Tap Down 4 pushed
* Triple-Tap Up 5 pushed
* Triple-Tap Down 6 pushed
* 4 taps up 7 pushed
* 4 taps down 8 pushed
* 5 taps up 9 pushed
* 5 taps down 10 pushed
* Hold Up 1 held
* Hold Down 2 held
*
*/
import groovy.transform.Field
@Field static final Map commandClassVersions = [
0x20: 1, //Basic
0x26: 1, //SwitchMultiLevel
0x5B: 1, //CentralScene
0x70: 1 //Configuration
]
metadata {
definition (name: "WD200+ Dimmer", namespace: "homeseer", author: "support@homeseer.com") {
capability "Switch Level"
capability "Actuator"
capability "Indicator"
capability "Switch"
capability "Polling"
capability "Refresh"
capability "Sensor"
capability "PushableButton"
capability "HoldableButton"
//capability "ReleasableButton"
capability "Configuration"
command "push", ["NUMBER"]
command "hold", ["NUMBER"]
//command "release", ["NUMBER"]
command "setStatusLed", [[name:"LED*", type: "NUMBER", description: "LED number: 1-7 (bottom to top)"],
[name:"Color*", type: "NUMBER", description: "Color: 0=off, 1=red, 2=green, 3=blue, 4=magenta, 5=yellow, 6=cyan, 7=white"],
[name:"Blink", type: "NUMBER", description: "Blink: 0=no, 1=yes"]]
command "setSwitchModeNormal"
command "setSwitchModeStatus"
command "setDefaultColor", [[name:"Color*", type: "NUMBER", description: "Color: 0=white, 1=red, 2=green, 3=blue, 4=magenta, 5=yellow, 6=cyan"]]
fingerprint mfr: "000C", prod: "4447", model: "3036"
}
preferences {
input "doubleTapToFullBright", "bool", title: "Double-tap up sets to full brightness", defaultValue: false, displayDuringSetup: true, required: false
input "singleTapToFullBright", "bool", title: "Single-tap up sets to full brightness", defaultValue: false, displayDuringSetup: true, required: false
input "doubleTapDownToDim", "bool", title: "Double-tap down sets to 25% level", defaultValue: false, displayDuringSetup: true, required: false
input "reverseSwitch", "bool", title: "Reverse Switch", defaultValue: false, displayDuringSetup: true, required: false
input "bottomled", "bool", title: "Bottom LED On if Load is Off", defaultValue: false, displayDuringSetup: true, required: false
input "localcontrolramprate", "number", title: "Press Configure button after changing preferences\n\nLocal Ramp Rate: Duration (0-90) (1=1 sec) [default: 3]", defaultValue: 3,range: "0..90", required: false
input "remotecontrolramprate", "number", title: "Remote Ramp Rate: duration (0-90) (1=1 sec) [default: 3]", defaultValue: 3, range: "0..90", required: false
input "color", "enum", title: "Default LED Color", options: ["White", "Red", "Green", "Blue", "Magenta", "Yellow", "Cyan"], description: "Select Color", required: false
input "enableDebug", "bool", title: "Enable debug logging"
input "enableInfo", "bool", title: "Enable descriptionText logging"
}
}
def parse(String description) {
def result = null
if (enableDebug) log.debug "parse() for: $description"
if (description != "updated") {
def cmd = zwave.parse(description, commandClassVersions)
if (cmd) {
result = zwaveEvent(cmd)
}
}
if (!result){
if (enableDebug) log.debug "Parse returned ${result} for command ${cmd}"
}
else {
if (enableDebug) log.debug "Parse returned ${result}"
}
return result
}
String secure(String cmd){
return zwaveSecureEncap(cmd)
}
String secure(hubitat.zwave.Command cmd){
return zwaveSecureEncap(cmd)
}
def zwaveEvent(hubitat.zwave.commands.basicv1.BasicReport cmd) {
dimmerEvents(cmd)
}
def zwaveEvent(hubitat.zwave.commands.basicv1.BasicSet cmd) {
dimmerEvents(cmd)
}
def zwaveEvent(hubitat.zwave.commands.switchmultilevelv1.SwitchMultilevelReport cmd) {
dimmerEvents(cmd)
}
def zwaveEvent(hubitat.zwave.commands.switchmultilevelv1.SwitchMultilevelSet cmd) {
dimmerEvents(cmd)
}
private dimmerEvents(hubitat.zwave.Command cmd) {
def value = (cmd.value ? "on" : "off")
def result = [createEvent(name: "switch", value: value)]
if (state.lastLevel != cmd.value && enableInfo) log.info "$device.displayName level is ${cmd.value}%"
if (value != device.currentValue("switch") && enableInfo) log.info "$device.displayName switch is ${value}"
state.lastLevel = cmd.value
if (cmd.value && cmd.value <= 100) {
result << createEvent(name: "level", value: cmd.value, unit: "%")
}
return result
}
def zwaveEvent(hubitat.zwave.commands.configurationv1.ConfigurationReport cmd) {
if (enableDebug) log.debug "ConfigurationReport $cmd"
def value = "when off"
if (cmd.configurationValue[0] == 1) {value = "when on"}
if (cmd.configurationValue[0] == 2) {value = "never"}
createEvent([name: "indicatorStatus", value: value])
}
def zwaveEvent(hubitat.zwave.commands.hailv1.Hail cmd) {
createEvent([name: "hail", value: "hail", descriptionText: "Switch button was pressed", displayed: false])
}
def zwaveEvent(hubitat.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
if (enableDebug) log.debug "manufacturerId: ${cmd.manufacturerId}"
if (enableDebug) log.debug "manufacturerName: ${cmd.manufacturerName}"
state.manufacturer=cmd.manufacturerName
if (enableDebug) log.debug "productId: ${cmd.productId}"
if (enableDebug) log.debug "productTypeId: ${cmd.productTypeId}"
def msr = String.format("%04X-%04X-%04X", cmd.manufacturerId, cmd.productTypeId, cmd.productId)
updateDataValue("MSR", msr)
setFirmwareVersion()
createEvent([descriptionText: "$device.displayName MSR: $msr", isStateChange: false])
}
def zwaveEvent(hubitat.zwave.commands.versionv1.VersionReport cmd) {
//updateDataValue("applicationVersion", "${cmd.applicationVersion}")
if (enableDebug) log.debug ("received Version Report")
if (enableDebug) log.debug "applicationVersion: ${cmd.applicationVersion}"
if (enableDebug) log.debug "applicationSubVersion: ${cmd.applicationSubVersion}"
state.firmwareVersion=cmd.applicationVersion+'.'+cmd.applicationSubVersion
if (enableDebug) log.debug "zWaveLibraryType: ${cmd.zWaveLibraryType}"
if (enableDebug) log.debug "zWaveProtocolVersion: ${cmd.zWaveProtocolVersion}"
if (enableDebug) log.debug "zWaveProtocolSubVersion: ${cmd.zWaveProtocolSubVersion}"
setFirmwareVersion()
createEvent([descriptionText: "Firmware V"+state.firmwareVersion, isStateChange: false])
}
def zwaveEvent(hubitat.zwave.commands.firmwareupdatemdv2.FirmwareMdReport cmd) {
if (enableDebug) log.debug ("received Firmware Report")
if (enableDebug) log.debug "checksum: ${cmd.checksum}"
if (enableDebug) log.debug "firmwareId: ${cmd.firmwareId}"
if (enableDebug) log.debug "manufacturerId: ${cmd.manufacturerId}"
[:]
}
def zwaveEvent(hubitat.zwave.commands.switchmultilevelv1.SwitchMultilevelStopLevelChange cmd) {
if (enableInfo) log.info "$device.displayName level is on"
[createEvent(name:"switch", value:"on"), response(secure(zwave.switchMultilevelV1.switchMultilevelGet()))]
}
def zwaveEvent(hubitat.zwave.Command cmd) {
// Handles all Z-Wave commands we aren't interested in
if (enableDebug) log.debug "skip: $cmd"
return []
}
def zwaveEvent(hubitat.zwave.commands.supervisionv1.SupervisionGet cmd) {
result = null
hubitat.zwave.Command encapCmd = cmd.encapsulatedCommand(commandClassVersions)
if (encapCmd) {
result = zwaveEvent(encapCmd)
}
sendHubCommand(new hubitat.device.HubAction(secure(zwave.supervisionV1.supervisionReport(sessionID: cmd.sessionID, reserved: 0, moreStatusUpdates: false, status: 0xFF, duration: 0)), hubitat.device.Protocol.ZWAVE))
return result
}
def on() {
//sendEvent(tapUp1Response("digital"))
delayBetween([
secure(zwave.basicV1.basicSet(value: 0xFF)),
secure(zwave.switchMultilevelV1.switchMultilevelGet())
], 5000)
}
def off() {
//sendEvent(tapDown1Response("digital"))
delayBetween([
secure(zwave.basicV1.basicSet(value: 0x00)),
secure(zwave.switchMultilevelV1.switchMultilevelGet())
],5000)
}
List<String> setLevel(value) {
if (enableDebug) log.debug "setLevel >> value: $value"
def valueaux = value as Integer
def level = Math.max(Math.min(valueaux, 99), 0)
if (level <= 0) {
return delayBetween([
seucre(zwave.basicV1.basicSet(value: 0x00)),
secure(zwave.switchMultilevelV1.switchMultilevelGet())
],5000)
}
else {
def result = []
result += response(secure(zwave.basicV1.basicSet(value: level)))
result += response(secure("delay 5000"))
result += response(secure(zwave.switchMultilevelV1.switchMultilevelGet()))
result += response(secure("delay 5000"))
result += response(secure(zwave.switchMultilevelV1.switchMultilevelGet()))
return result
}
}
List<String> setLevel(value, duration) {
if (enableDebug) log.debug "setLevel >> value: $value, duration: $duration"
def dimmingDuration = duration < 128 ? duration : 128 + Math.round(duration / 60)
return [
secure(zwave.switchMultilevelV2.switchMultilevelSet(value: value < 100 ? value : 99, dimmingDuration: dimmingDuration))
]
}
/*
* Set dimmer to status mode, then set the color of the individual LED
*
* led = 1-7
* color = 0=0ff
* 1=red
* 2=green
* 3=blue
* 4=magenta
* 5=yellow
* 6=cyan
* 7=white
*/
def setStatusLed(led, color, blink) {
if (enableDebug) log.debug "setStatusLED >> led: $led, color: $color, blink: $blink"
List cmds= []
if(state.statusled1==null) {
state.statusled1=0
state.statusled2=0
state.statusled3=0
state.statusled4=0
state.statusled5=0
state.statusled6=0
state.statusled7=0
state.blinkval=0
}
state."statusled{$led}" = color
if(state.statusled1==0 && state.statusled2==0 && state.statusled3==0 && state.statusled4==0 && state.statusled5==0 && state.statusled6==0 && state.statusled7==0)
{
// no LEDS are set, put back to NORMAL mode
cmds << secure(zwave.configurationV2.configurationSet(scaledConfigurationValue: 0, parameterNumber: 13, size: 1))
}
else
{
// at least one LED is set, put to status mode
cmds << secure(zwave.configurationV2.configurationSet(scaledConfigurationValue: 1, parameterNumber: 13, size: 1))
// set the LED to color
cmds << secure(zwave.configurationV2.configurationSet(scaledConfigurationValue: color.toInteger(), parameterNumber: (led.toInteger() + 20), size: 1))
// check if LED should be blinking
Integer blinkval = state.blinkval ?: 0
if(blink)
{
switch(led) {
case 1:
blinkval = blinkval | 0x1
break
case 2:
blinkval = blinkval | 0x2
break
case 3:
blinkval = blinkval | 0x4
break
case 4:
blinkval = blinkval | 0x8
break
case 5:
blinkval = blinkval | 0x10
break
case 6:
blinkval = blinkval | 0x20
break
case 7:
blinkval = blinkval | 0x40
break
}
cmds << secure(zwave.configurationV2.configurationSet(scaledConfigurationValue: blinkval, parameterNumber: 31, size: 1))
// set blink speed, also enables blink, 1=100ms blink frequency
cmds << secure(zwave.configurationV2.configurationSet(scaledConfigurationValue: 5, parameterNumber: 30, size: 1))
state.blinkval = blinkval
}
else {
switch(led.toInteger()) {
case 1:
blinkval = blinkval & 0xFE
break
case 2:
blinkval = blinkval & 0xFD
break
case 3:
blinkval = blinkval & 0xFB
break
case 4:
blinkval = blinkval & 0xF7
break
case 5:
blinkval = blinkval & 0xEF
break
case 6:
blinkval = blinkval & 0xDF
break
case 7:
blinkval = blinkval & 0xBF
break
}
cmds << secure(zwave.configurationV2.configurationSet(scaledConfigurationValue: blinkval, parameterNumber: 31, size: 1))
state.blinkval = blinkval
}
}
return delayBetween(cmds, 500)
}
/*
* Set Dimmer to Normal dimming mode (exit status mode)
*
*/
def setSwitchModeNormal() {
def cmds= []
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [0], parameterNumber: 13, size: 1))
delayBetween(cmds, 500)
}
/*
* Set Dimmer to Status mode (exit normal mode)
*
*/
def setSwitchModeStatus() {
def cmds= []
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [1], parameterNumber: 13, size: 1))
delayBetween(cmds, 500)
}
/*
* Set the color of the LEDS for normal dimming mode, shows the current dim level
*/
def setDefaultColor(color) {
def cmds= []
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [color], parameterNumber: 14, size: 1))
delayBetween(cmds, 500)
}
def poll() {
secure(zwave.switchMultilevelV1.switchMultilevelGet())
}
def refresh() {
if (enableDebug) log.debug "refresh() called"
configure()
}
def zwaveEvent(hubitat.zwave.commands.centralscenev1.CentralSceneNotification cmd) {
if (enableDebug) log.debug("sceneNumber: ${cmd.sceneNumber} keyAttributes: ${cmd.keyAttributes}")
def result = []
switch (cmd.sceneNumber) {
case 1:
// Up
switch (cmd.keyAttributes) {
case 0:
// Press Once
result += createEvent(tapUp1Response("physical"))
result += createEvent([name: "switch", value: "on", type: "physical"])
if (singleTapToFullBright)
{
result += setLevel(99)
result += response(secure("delay 5000"))
result += response(secure(zwave.switchMultilevelV1.switchMultilevelGet()))
}
break
case 1:
result=createEvent([name: "switch", value: "on", type: "physical"])
break
case 2:
// Hold
result += createEvent(holdUpResponse("physical"))
result += createEvent([name: "switch", value: "on", type: "physical"])
break
case 3:
// 2 Times
result +=createEvent(tapUp2Response("physical"))
if (doubleTapToFullBright)
{
result += setLevel(99)
result += response(secure("delay 5000"))
result += response(secure(zwave.switchMultilevelV1.switchMultilevelGet()))
}
break
case 4:
// 3 times
result=createEvent(tapUp3Response("physical"))
break
case 5:
// 4 times
result=createEvent(tapUp4Response("physical"))
break
case 6:
// 5 times
result=createEvent(tapUp5Response("physical"))
break
default:
if (enableDebug) log.debug ("unexpected up press keyAttribute: $cmd.keyAttributes")
}
break
case 2:
// Down
switch (cmd.keyAttributes) {
case 0:
// Press Once
result += createEvent(tapDown1Response("physical"))
result += createEvent([name: "switch", value: "off", type: "physical"])
break
case 1:
result=createEvent([name: "switch", value: "off", type: "physical"])
break
case 2:
// Hold
result += createEvent(holdDownResponse("physical"))
result += createEvent([name: "switch", value: "off", type: "physical"])
break
case 3:
// 2 Times
result+=createEvent(tapDown2Response("physical"))
if (doubleTapDownToDim)
{
result += setLevel(25)
result += response(secure("delay 5000"))
result += response(secure(zwave.switchMultilevelV1.switchMultilevelGet()))
}
break
case 4:
// 3 Times
result=createEvent(tapDown3Response("physical"))
break
case 5:
// 4 Times
result=createEvent(tapDown4Response("physical"))
break
case 6:
// 5 Times
result=createEvent(tapDown5Response("physical"))
break
default:
if (enableDebug) log.debug ("unexpected down press keyAttribute: $cmd.keyAttributes")
}
break
default:
// unexpected case
if (enableDebug) log.debug ("unexpected scene: $cmd.sceneNumber")
}
return result
}
def tapUp1Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▲")
[name: "pushed", value: 1, descriptionText: "$device.displayName Tap-Up-1 (button 1) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapDown1Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▼")
[name: "pushed", value: 2, descriptionText: "$device.displayName Tap-Down-1 (button 2) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapUp2Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▲▲")
[name: "pushed", value: 3, descriptionText: "$device.displayName Tap-Up-2 (button 3) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapDown2Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▼▼")
[name: "pushed", value: 4, descriptionText: "$device.displayName Tap-Down-2 (button 4) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapUp3Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▲▲▲")
[name: "pushed", value: 5, descriptionText: "$device.displayName Tap-Up-3 (button 5) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapUp4Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▲▲▲▲")
[name: "pushed", value: 7, descriptionText: "$device.displayName Tap-Up-4 (button 7) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapUp5Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▲▲▲▲▲")
[name: "pushed", value: 9, descriptionText: "$device.displayName Tap-Up-5 (button 9) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapDown3Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▼▼▼")
[name: "pushed", value: 6, descriptionText: "$device.displayName Tap-Down-3 (button 6) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapDown4Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▼▼▼▼")
[name: "pushed", value: 8, descriptionText: "$device.displayName Tap-Down-3 (button 8) pushed",
isStateChange: true, type: "$buttonType"]
}
def tapDown5Response(String buttonType) {
sendEvent(name: "status" , value: "Tap ▼▼▼▼▼")
[name: "pushed", value: 10, descriptionText: "$device.displayName Tap-Down-3 (button 10) pushed",
isStateChange: true, type: "$buttonType"]
}
def holdUpResponse(String buttonType) {
sendEvent(name: "status" , value: "Hold ▲")
[name: "held", value: 1, descriptionText: "$device.displayName Hold-Up (button 1) held",
isStateChange: true, type: "$buttonType"]
}
def holdDownResponse(String buttonType) {
sendEvent(name: "status" , value: "Hold ▼")
[name: "held", value: 2, descriptionText: "$device.displayName Hold-Down (button 2) held",
isStateChange: true, type: "$buttonType"]
}
def push(Number button) {
switch (button as Integer) {
case 1:
sendEvent(tapUp1Response("digital"))
break
case 2:
sendEvent(tapDown1Response("digital"))
break
case 3:
sendEvent(tapUp2Response("digital"))
break
case 4:
sendEvent(tapDown2Response("digital"))
break
case 5:
sendEvent(tapUp3Response("digital"))
break
case 6:
sendEvent(tapDown3Response("digital"))
break
case 7:
sendEvent(tapUp4Response("digital"))
break
case 8:
sendEvent(tapDown4Response("digital"))
break
case 9:
sendEvent(tapUp5Response("digital"))
break
case 10:
sendEvent(tapDown5Response("digital"))
break
default:
log.warn "Invalid button number in push(): $button"
}
}
def hold(Number button) {
if (button as Integer == 1) {
sendEvent(holdUpResponse("digital"))
}
else if (button as Integer == 2) {
sendEvent(holdDownResponse("digital"))
}
else {
log.warn "Invalid button in hold(): $button"
}
}
/*
def release(Number button) {
if (button as Integer == 1) {
sendEvent(releaseUpResponse("digital"))
}
else if (button as Integer == 2) {
sendEvent(releaseDownResponse("digital"))
}
else {
log.warn "Invalid button in release(): $button"
}
}
*/
def setFirmwareVersion() {
def versionInfo = ''
if (state.manufacturer)
{
versionInfo=state.manufacturer+' '
}
if (state.firmwareVersion)
{
versionInfo=versionInfo+"Firmware V"+state.firmwareVersion
}
else
{
versionInfo=versionInfo+"Firmware unknown"
}
sendEvent(name: "firmwareVersion", value: versionInfo, isStateChange: true, displayed: false)
}
def configure() {
log.trace ("configure() called")
sendEvent(name: "numberOfButtons", value: 10)
def commands = []
commands << setDimRatePrefs()
commands << secure(zwave.switchMultilevelV1.switchMultilevelGet())
commands << secure(zwave.manufacturerSpecificV1.manufacturerSpecificGet())
commands << secure(zwave.versionV1.versionGet())
return delayBetween(commands,500)
}
def setDimRatePrefs()
{
if (enableDebug) log.trace ("set prefs")
def cmds = []
if (color)
{
switch (color) {
case "White":
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [0], parameterNumber: 14, size: 1))
break
case "Red":
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [1], parameterNumber: 14, size: 1))
break
case "Green":
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [2], parameterNumber: 14, size: 1))
break
case "Blue":
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [3], parameterNumber: 14, size: 1))
break
case "Magenta":
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [4], parameterNumber: 14, size: 1))
break
case "Yellow":
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [5], parameterNumber: 14, size: 1))
break
case "Cyan":
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [6], parameterNumber: 14, size: 1))
break
}
}
if(localcontrolramprate != null) {
//if (enableDebug) log.debug localcontrolramprate
def localcontrolramprate = Math.max(Math.min(localcontrolramprate, 90), 0)
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [localcontrolramprate], parameterNumber: 12, size: 1))
}
if(remotecontrolramprate != null) {
if (enableDebug) log.debug remotecontrolramprate
def remotecontrolramprate = Math.max(Math.min(remotecontrolramprate, 90), 0)
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [remotecontrolramprate], parameterNumber: 11, size: 1))
}
if (reverseSwitch)
{
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [1], parameterNumber: 4, size: 1))
}
else
{
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [0], parameterNumber: 4, size: 1))
}
if (bottomled)
{
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [0], parameterNumber: 3, size: 1))
}
else
{
cmds << secure(zwave.configurationV2.configurationSet(configurationValue: [1], parameterNumber: 3, size: 1))
}
//Enable the following configuration gets to verify configuration in the logs
//cmds << secure(zwave.configurationV1.configurationGet(parameterNumber: 7))
//cmds << secure(zwave.configurationV1.configurationGet(parameterNumber: 8))
//cmds << secure(zwave.configurationV1.configurationGet(parameterNumber: 9))
//cmds << secure(zwave.configurationV1.configurationGet(parameterNumber: 10))
return cmds
}
def updated()
{
def cmds= []
cmds << setDimRatePrefs
delayBetween(cmds, 500)
}