GE/Jasco Z-Wave Plus Motion Dimmer Combo Driver
This is a driver for the GE Motion Dimmer device (26933). It differs from the in-box driver in that it exposes all of the device parameters, and can optionally create child devices for the dimmer and motion sensor.
Light Off Time, Motion sensor on/off, Motion sensitivity, Light Sensing for light ON/OFF, Motion Reset time, Dimmer steps/duration, switch mode*
NOTE: Switch Mode simply makes the physical buttons work like a switch. And note that when switch mode is enabled the physical buttons do not obey the Default Dimmer Level setting - ON always = 100% level.
Commands added for direct access to the following features:
Default Dimmer Level - Can use this in rules (via custom commands in RM, for example) to set the default dimmer level. May be useful for mode/time based lighting where you want the light to come on a different level than the level it was at when it was turned off.
Manual / Vacancy / Occupancy motion lighting modes. Can be used in rules (via custom commands in RM, for example) to put motion lighting in Manual mode at night for bedroom switches.
Has the option to create child devices for the Dimmer and Motion sensor
Uses the in-box Dimmer and Motion Sensor component drivers for the child devices - no need to install additional drivers for those.
NOTE: One thing to point out for users of my previous drivers versions, I removed the "(default)" text from options and settings. So you may need to edit any rules/automations that used a command or event that previously had the "(default)" text in it!!!
To-Do:
none
Installation:
Install Driver code in Hubitat
Apply to a GE Motion Dimmer device. Click save.
Edit preferences, save preferences.
Click Configure command button
Driver can be found on my GitHub or Hubitat Package Manager
1.0.0 (06/12/2021) - First version
1.0.1 (06/12/2021) - Removed a (default) text I missed
1.0.2 (06/14/2021) - Modified some of the current value checking, as it would throw errors in some situations.
1.0.3 (10/07/2022) - Added better logic for digital on/off handling
1.1.0 (03/27/2023) - Fixed setLevel duration conversion, thanks to user jpt1081 on hubitat forum for the idea/example code
1.1.1 (03/02/2025) - Change to fix basic report issue on alternate zwave stack
1.1.2 (03/09/2025) - Fixed physical off event not creating a hub event
My plan is to make this my single motion dimmer driver moving forward. Moving to a single combined driver will be easier for me to maintain long term.
That said - If you are using one of my other motion dimmer drivers, you can continue using them - you don't have to switch. Functionally there is no difference (at this time) between this combo driver and the other two drivers.
One of the last platform updates prevented the RM changed trigger from activating when parentheses characters are in the string. I was hacking the driver to remove it from operating mode. Just one less thing to do now
Thanks for the great driver. Cheers!
I was using your "GE Z-Wave Plus Motion Dimmer Component" driver.
I notice I wasn't seeming to get the "Physical" on/off events for the device (in this case, I'm more interested in physically pressing the on/off buttons to turn it on/off/dim with the buttons vs. from the hub or motion.
So, I tried this newer driver--it seemed to "slip in" without any issues. However, I'm still not seeing events hitting the hub logs (nor physical switch events).
@JasonJoel Issue: I am receiving the following errors with a newly installed sensor when the light it manually turned on. Any Ideas?
app:852021-12-25 12:07:11.809 am errorjava.lang.NullPointerException: Cannot invoke method someOn() on null object on line 215 (method groupHandler)
app:862021-12-25 12:07:11.804 am errorjava.lang.NullPointerException: Cannot get property 'switchState' on null object on line 746 (method checkScene)
app:852021-12-25 12:07:11.793 am errorjava.lang.NullPointerException: Cannot get property 'currentSwitch' on null object on line 238 (method indicatorOffHandler)
dev:402021-12-25 12:07:11.745 am infoBathRmMD was turned on
dev:402021-12-25 12:07:11.742 am infoBathRmMD level was set to 99%
dev:412021-12-25 12:07:11.739 am infoBathRmMDim Dimmer level was set to 99%
dev:412021-12-25 12:07:11.736 am infoBathRmMDim Dimmer was turned on
First - awesome driver!
Second - I've noted that sometimes my device never registers a "Switch On" event when it fires due to motion in occupancy mode. Instead, I just see a Motion event. Here's what I think is "normal":
Maybe try turning on debug logging on the driver and see if a switch on event is even making it to the hub. If it is, but not making it to an event - that is a driver issue. If no log for a zwave event for switch on is received, then nothing can be done in the driver/hub to work around that as it is a device or zwave mesh issue.
@JasonJoel There was one thing missing from the Motion Dimmer (both Hubitat supplied and the ones you created) and I was curious if it could be added if the device supports it. The pre-staging option that is available in the Hubitat supplied GE (non-motion) dimmer drivers. A switch will appear in the preferences as in this image:
I have found the pre-staging option to be quite useful for setting my lights to a certain dimmer level before they turn on. I suppose it is similar to the default dimmer value that is in these drivers but I don't know how to set that based upon what mode my system is in. Still learning...
You would just use a custom command to set it in RM.
I did it that way instead of some "pre-staging" option, as the GE Motion Dimmers support that as a dedicated parameter in hardware.
Most of the "pre-staging" option rigmarole in drivers came from Hubitat adding it in software at the driver level for devices that didn't support it in hardware, and to make the option look/feel the same across multiple device brands. So it was really a different solution, to a different problem.
Since this device supports it out of the box, I used the device native way of doing it, not the kludgy Hubitat workaround way.
Obviously it you specifically wanted it to work the Hubitat pre-staging way, you could form the driver on github and add, it though.
I understand now. It took me awhile to actually figure out how it would work in RM but after some trial and error I have it working the way I want it to.
As for adding the pre-staging to the driver, I'll pass. Your drivers work good as they are and not very familiar with the language though I'm sure I could eventually hack it in and make it work.
Thanks for the reply. I appreciate it and the work that you have put into the drivers.
Since 2.3.3 release I've been moving my Motion Lighting apps to Room Lighting apps. I noticed that my lights were turning on OK, but not turning off. The root cause is that the switch component of the light never turns 'on'. The motion component activates (activating both ML and RL apps) and goes inactive correctly. Motion Lighting hides the issue because it sends an 'off' even if Hubitat believes the switch is off. Room Lighting does not send the 'off' event if it believes the light is off. Device control works fine from the Device page.
I don't know when the issue started due to ML sending 'off's. I've hit Configure and Refresh with no change.
Here is a debug log for the device, activated by Room Lighting: