[RELEASE] HomeSeer HS-WX300 Driver (dimmer and switch)

Greetings! I have written two drivers for the new HS-WX300 dimmer/switch. (The first one will also likely work with the HS-WD200+, but I do not have one to test with.) Here are the "raw" links you can use for import or copy/paste:

(Or, view the GitHub repo folder to see the "pretty" formatted files if you prefer: https://github.com/RMoRobert/Hubitat/tree/master/drivers/homeseer.) I may add these to HPM if there is interest.

If you are not familiar with this device, it defaults to "dimmer mode," but it can also operate in "switch mode." This decision must be made before including the device into your Z-Wave network; see the manual for details. If you have both drivers above installed, the correct one should be chosen on pairing; otherwise, you can always choose it manually afterwards.

The stock HS-WD200+ driver will likely work with the HS-WX300 in dimmer mode, and if not, I expect a future Hubitat platform revision to include a dedicated driver, which it likely also will for the HS-WX300 in switch mode. However, unlike the built-in driver, this driver exposes all configuration parameters as a preference or command, plus all 5 taps in each direction (rather than maxing out at double taps):

  • Taps 1-5 up: buttons 1, 3, 5, 7, 9 pushed (odd numbers)
  • Taps 1-5 down: buttons 2, 4, 6, 8, 10 pushed (even numbers)
  • Hold and release up: button 1 held, button 1 released
  • Hold and release down: button 2 held, button 2 released

(This is similar to what I've done with my custom Inovelli and Zooz drivers if you have seen those.)

As with all custom code, understand that this is not officially supported by Hubitat or HomeSeer. I will do my best to address any issues you find, so let me know!

PS - If you have questions or problems with the HS-WX300 device itself, please find or create an appropriate thread; I would like to keep discussion here focused on issues that may relate to the drivers. Thanks!

9 Likes

Does your driver support setting the minimum brightness/dimming level parameter for the switch?

For the dimmer (i.e., in dimmer mode), yes. All parameters documented in the manual are exposed via either preferences or commands (mostly preferences, just commands for things you might want to automate like the LEDs).

The "switch mode" driver does not expose this parameter, as that is one of a few dimmer-specific parameters the device does not support in switch mode.

HI! I have Hubitat version: 2.3.2.141.

  1. Do i need this driver, or is support of the HS-WX300 now built in to Hubitat?
  2. I have several HS-WX300 switches, but have been unsuccessful getting them added as devices in Hubitat. Can't ever see any action when trying to include or exclude them, even when hub is within inches of the switches. Would this driver be needed to include the switches, or is it only used after switches are included?

Thanks!

The driver will not affect the ability of a device to pair. If you are having problems with that, I'd try the usual Z-Wave troubleshooting: exclude the device before pairing, check for ghosts in Settings > Z-Wave Details, make sure the frequency of your hub and the device are for the same region, make sure you're following the right inclusion/exclusion sequence for the device according to the manual, etc. If you still have trouble with that, I might start a separate thread.

Regarding the first question, Hubitat does have a built-in driver for this, so you no longer need a community offering, though some may still prefer it for other reasons (e.g., to use more than double-taps).

1 Like

I've just uploaded a new version (1.1) of both drivers with the following changes, mostly for new features in HS-WX300 firmware 1.13 that was recently released:

  • Smart bulb mode preference (device will still internally track on/off or level state but not actually control load)
  • Set LED level command to set brightness/level of indicator LEDs on device (0-6, dimmest to brightest)
  • Toggle mode preference (switch only) -- pressing either top or bottom paddle will toggle light on or off, instead of top turning on and bottom turning off
  • Default level with on press from paddle preference (dimmer only) -- can turn on to specified level instead of last on level (the default) with paddle press if desired

Links to code are in first post, or existing users can select the Import button in the driver code editor window to download/import the latest code via the URL that should be pre-filled. (Not in HPM, but could add if there is interest...)

Would this driver work if the switch is used in a 3-way setup? Thanks

I've never tested that setup specially, but I don't see why it wouldn't. I believe three-way behavior is handled automatically entirely on the device, with nothing to worry about on the Z-Wave (and therefore driver) side, since the only thing I see in their manual regarding this is different wiring.

Thanks for the insight. :+1:

Getting error adding the code: Metadata Error:Please check if you inadvertently pasted driver code into apps code window on line 107. New to hubitat not sure if I missed a step or instruction - any hint/help appreciated.

Cheers.

Did you, by any chance, past the driver code into Apps Code instead of Drivers Code? :slight_smile:

I just want to say thanks for making this. The lack of triple taps on the HE built in driver was driving me mad. I am going to test this out tomorrow with my WX300s

One question though. Should i use the driver from this post or from your earlier post for a WD200 ?

1 Like

I would not recommend that driver anymore--it was a port I attempted before I actually had a device. I haven't tested my WX300 driver with a WD200 and there are a few preferences that won't work (if you use the original release instead of the ones with the updates, those won't even be there--though it should also be fine as long as you don't set them, and even if you try, the device will probably ignore them unless there are in fact undocumented parameters there). But if it doesn't work, there may be a more appropriate version somewhere.

1 Like

Understood, I'll test this new driver out with my 200s before i attempt anything else. Thanks again for all the work on this!!!

So I've been using this driver on my HS-WX300s and it has been fantastic. I do have something a bit odd going on with ONE of my HS-WX300s though - for some reason with this driver it doesn't report state change when triggered physically or through hubitat, when I switch to the hubitat built in driver it works just fine. None of my other HS-WX300s demonstrate this behavior using the custom driver. Switching back to this driver the same behavior pops up right away.

If I press "refresh" on the device page with the custom driver it does update the state just fine.

In case it's useful: C8 hub, latest firmware (2.3.5.113)

here's the details of the HS-WX300 which is direct connected to the hub as is another HS-WX300 which is in the two gang plastic box right next to it (the other one works just fine with the custom driver)
image

Happy to share any other details that might help troubleshoot this - I tend to think it's a driver issue since the thing works fine with the built in driver, but still super weird since none of my other HS-WX300s demonstrate the same problem with the custom driver.

I'd suggest turning on debug logging and sharing what you see in Logs after an "on" or an "off" (especially if there is some skipped report). It's also possible lifeline association got lost, maybe if you did a firmware update, though that would likely have affected the built-in driver too (it's normally set on inclusion and I don't have, but could add, a way to specifically do it).

Here's a debug log using the native driver:

dev:792023-03-20 04:17:54.308 PMinfoBasement Main Lights was turned off
dev:792023-03-20 04:17:54.305 PMinfoBasement Main Lights was set to 0
dev:792023-03-20 04:17:54.301 PMdebugparse:zw device: 5B, command: 2603, payload: 00 00 00 , isMulticast: false
dev:792023-03-20 04:17:52.330 PMinfoBasement Main Lights was turned off
dev:792023-03-20 04:17:52.327 PMinfoBasement Main Lights was set to 0
dev:792023-03-20 04:17:52.322 PMdebugparse:zw device: 5B, command: 2603, payload: 55 00 01 , isMulticast: false
dev:792023-03-20 04:17:51.978 PMdebugoff()
dev:792023-03-20 04:17:41.865 PMdebugparse:zw device: 5B, command: 7006, payload: 1F 01 00 , isMulticast: false
dev:792023-03-20 04:17:41.563 PMdebugparse:zw device: 5B, command: 7006, payload: 1B 01 00 , isMulticast: false
dev:792023-03-20 04:17:41.264 PMdebugparse:zw device: 5B, command: 7006, payload: 1A 01 00 , isMulticast: false
dev:792023-03-20 04:17:40.963 PMdebugparse:zw device: 5B, command: 7006, payload: 19 01 00 , isMulticast: false
dev:792023-03-20 04:17:40.661 PMdebugparse:zw device: 5B, command: 7006, payload: 18 01 00 , isMulticast: false
dev:792023-03-20 04:17:40.364 PMdebugparse:zw device: 5B, command: 7006, payload: 17 01 00 , isMulticast: false
dev:792023-03-20 04:17:40.060 PMdebugparse:zw device: 5B, command: 7006, payload: 16 01 00 , isMulticast: false
dev:792023-03-20 04:17:39.758 PMdebugparse:zw device: 5B, command: 7006, payload: 15 01 00 , isMulticast: false
dev:792023-03-20 04:17:39.458 PMdebugparse:zw device: 5B, command: 7006, payload: 03 01 00 , isMulticast: false
dev:792023-03-20 04:17:39.157 PMdebugparse:zw device: 5B, command: 7006, payload: 0E 01 00 , isMulticast: false
dev:792023-03-20 04:17:38.855 PMdebugparse:zw device: 5B, command: 7006, payload: 04 01 00 , isMulticast: false
dev:792023-03-20 04:17:38.574 PMdebugAssociation Report - Group: 1, Nodes: [01]
dev:792023-03-20 04:17:38.554 PMdebugparse:zw device: 5B, command: 8503, payload: 01 05 00 01 , isMulticast: false
dev:792023-03-20 04:17:37.953 PMdebugparse:zw device: 5B, command: 5B02, payload: 02 83 7F , isMulticast: false
dev:792023-03-20 04:17:37.658 PMinfoBasement Main Lights was turned on
dev:792023-03-20 04:17:37.656 PMinfoBasement Main Lights was set to 99
dev:792023-03-20 04:17:37.651 PMdebugparse:zw device: 5B, command: 2603, payload: 63 63 00 , isMulticast: false
dev:792023-03-20 04:17:37.366 PMdebugDevice Specific Report - DeviceIdType: 1, DeviceIdFormat: 1, Data: [132, 180, 219, 255, 254, 179, 191, 51]
dev:792023-03-20 04:17:37.352 PMdebugparse:zw device: 5B, command: 7207, payload: 01 28 84 B4 DB FF FE B3 BF 33 , isMulticast: false
dev:792023-03-20 04:17:37.069 PMdebugVersion3 Report - FirmwareVersion: 1.13, ProtocolVersion: 7.15, HardwareVersion: 1
dev:792023-03-20 04:17:37.051 PMdebugparse:zw device: 5B, command: 8612, payload: 03 07 0F 01 0D 01 00 , isMulticast: false
dev:792023-03-20 04:17:31.863 PMdebugconfigure()
dev:792023-03-20 04:17:30.706 PMdebugparse:zw device: 5B, command: 7006, payload: 0E 01 00 , isMulticast: false
dev:792023-03-20 04:17:30.104 PMdebugparse:zw device: 5B, command: 7006, payload: 04 01 00 , isMulticast: false
dev:792023-03-20 04:17:29.729 PMwarndescription logging is: true
dev:792023-03-20 04:17:29.727 PMwarndebug logging is: true

And here is one using this custom driver:

dev:792023-03-20 04:20:07.044 PMinfoBasement Main Lights switch is off
dev:792023-03-20 04:20:07.042 PMdebugSwitchMultilevelReport: SwitchMultilevelReport(value:0)
dev:792023-03-20 04:20:07.039 PMdebugparse description: zw device: 5B, command: 2603, payload: 00 00 00 , isMulticast: false
dev:792023-03-20 04:20:04.705 PMdebugoff()
dev:792023-03-20 04:19:57.706 PMinfoBasement Main Lights level is 99%
dev:792023-03-20 04:19:57.703 PMinfoBasement Main Lights switch is on
dev:792023-03-20 04:19:57.701 PMdebugSwitchMultilevelReport: SwitchMultilevelReport(value:99)
dev:792023-03-20 04:19:57.695 PMdebugparse description: zw device: 5B, command: 2603, payload: 63 63 00 , isMulticast: false
dev:792023-03-20 04:19:55.352 PMdebugon()
dev:792023-03-20 04:19:29.925 PMdebugDevice serial number is 84B4DBFFFEB3BF33
dev:792023-03-20 04:19:29.921 PMdebugDeviceSpecificReport v2: DeviceSpecificReport(deviceIdType:1, deviceIdDataFormat:1, deviceIdDataLengthIndicator:8, deviceIdData:[132, 180, 219, 255, 254, 179, 191, 51])
dev:792023-03-20 04:19:29.918 PMdebugparse description: zw device: 5B, command: 7207, payload: 01 28 84 B4 DB FF FE B3 BF 33 , isMulticast: false
dev:792023-03-20 04:19:29.725 PMdebugBasement Main Lights hardwareVersion is 1
dev:792023-03-20 04:19:29.722 PMdebugBasement Main Lights zWaveProtocolVersion and subversion is 7.15
dev:792023-03-20 04:19:29.720 PMdebugBasement Main Lights firmware0Version and subversion is 1.13
dev:792023-03-20 04:19:29.717 PMdebugVersionReport: VersionReport(zWaveLibraryType:3, zWaveProtocolVersion:7, zWaveProtocolSubVersion:15, firmware0Version:1, firmware0SubVersion:13, hardwareVersion:1, firmwareTargets:0, targetVersions:[])
dev:792023-03-20 04:19:29.713 PMdebugparse description: zw device: 5B, command: 8612, payload: 03 07 0F 01 0D 01 00 , isMulticast: false
dev:792023-03-20 04:19:28.569 PMdebugSetting parameter 37 (size: 1) to 0
dev:792023-03-20 04:19:28.567 PMdebugSetting parameter 36 (size: 1) to 0
dev:792023-03-20 04:19:28.564 PMdebugSetting parameter 32 (size: 1) to 0
dev:792023-03-20 04:19:28.561 PMdebugSetting parameter 12 (size: 1) to 2
dev:792023-03-20 04:19:28.558 PMdebugSetting parameter 11 (size: 1) to 2
dev:792023-03-20 04:19:28.528 PMdebugDebug logging will be automatically disabled in 30 minutes...
dev:792023-03-20 04:19:28.525 PMwarnDescription logging is: enabled
dev:792023-03-20 04:19:28.515 PMwarnDebug logging is: enabled
dev:792023-03-20 04:19:28.512 PMdebugupdated()
dev:792023-03-20 04:19:28.468 PMdebugconfigure()
dev:792023-03-20 04:19:26.222 PMdebugDevice serial number is 84B4DBFFFEB3BF33
dev:792023-03-20 04:19:26.218 PMdebugDeviceSpecificReport v2: DeviceSpecificReport(deviceIdType:1, deviceIdDataFormat:1, deviceIdDataLengthIndicator:8, deviceIdData:[132, 180, 219, 255, 254, 179, 191, 51])
dev:792023-03-20 04:19:26.196 PMdebugparse description: zw device: 5B, command: 7207, payload: 01 28 84 B4 DB FF FE B3 BF 33 , isMulticast: false
dev:792023-03-20 04:19:26.034 PMdebugBasement Main Lights hardwareVersion is 1
dev:792023-03-20 04:19:26.031 PMdebugBasement Main Lights zWaveProtocolVersion and subversion is 7.15
dev:792023-03-20 04:19:26.028 PMdebugBasement Main Lights firmware0Version and subversion is 1.13
dev:792023-03-20 04:19:26.026 PMdebugVersionReport: VersionReport(zWaveLibraryType:3, zWaveProtocolVersion:7, zWaveProtocolSubVersion:15, firmware0Version:1, firmware0SubVersion:13, hardwareVersion:1, firmwareTargets:0, targetVersions:[])
dev:792023-03-20 04:19:25.993 PMdebugparse description: zw device: 5B, command: 8612, payload: 03 07 0F 01 0D 01 00 , isMulticast: false
dev:792023-03-20 04:19:24.832 PMdebugSetting parameter 37 (size: 1) to 0
dev:792023-03-20 04:19:24.829 PMdebugSetting parameter 36 (size: 1) to 0
dev:792023-03-20 04:19:24.825 PMdebugSetting parameter 32 (size: 1) to 0
dev:792023-03-20 04:19:24.823 PMdebugSetting parameter 12 (size: 1) to 2
dev:792023-03-20 04:19:24.807 PMdebugSetting parameter 11 (size: 1) to 2
dev:792023-03-20 04:19:24.756 PMdebugDebug logging will be automatically disabled in 30 minutes...
dev:792023-03-20 04:19:24.753 PMwarnDescription logging is: enabled
dev:792023-03-20 04:19:24.751 PMwarnDebug logging is: enabled

sigh.... of course NOW it has started working. I have no earthly idea why it would have, nothing else has changed. If it happens again I'll try to capture logs immediately

Thank you! Thank you! Thank you!

I have been searching for a driver that allows access to all of the features of the WD200+ since I switched to hubitat!

I think it works better than the driver for Smartthings as you have the button numbers in a logical order. (top = 1,3,4,5,9 | bottom 2, 4, 6, 8, 10).

Would anyone be willing to share what app they are using to program the 3,4,5 taps with with a few steps to get me started. I did a few test with multiple app options but I was not able to get it to work properly. I am coming over over from a homeseer hub with HS4. Only have homeseer light switches about 50 of them. Would love to get this functionality working.

The easiest and most powerful way is to use Button Controller. If you are intimidated by its UI, I might suggest Basic Button Controller instead. Depending on what you're actually trying to do (I don't see a description of that above), another app may be more appropriate, but these two are capable of creating about any automation that you want that is "triggered" by a button event, which you'll get from taps/multi-taps on these devices.

One piece of information you'll need to know -- no matter what app you use -- is what button numbers correspond to what real-world events. This is summarized in the first post.

If you need more help, I'd suggest creating another topic describing what you want to do and where you have problems: