I’m using z2m and the VZM30 is showing as a light not a switch which means I can’t reassign this to its correct usage within Home Assistant. Does anyone know a workaround?
This is expected behavior since it can control dimmable bulbs. You can make a template switch if you need it to be represented as a simple switch.
I’d argue that is not is primary purpose so probably not the best default. I shouldn’t have to make a template switch to use it for its primary purpose. If I want to dim lights I’d use the many VZM31’s I’ve purchased.
In your original post, you asked for a workaround. The template switch is that workaround.
Since the switch needs to support dimming bound devices (like smart bulbs or dumb bulbs connected to other dimmers), it has to show up as a dimmable device on the hub.
Zigbee devices cannot easily change their capabilities displayed to the hub (on most hubs). Zigbee2mqtt is an exception since it has a reconfigure functionality but most hubs do not.
By default, the switch will operate the same (be on) at any brightness above 0, so it should not actually be an issue controlling it from the hub.
It also appears the only way to actually work this in a meaningful way is to create a template switch, which calls the light service such that its a switch. Then create a Switch as X helper to convert it to the actual intention given.
Mind you the purpose of these switches is to do things such as exhaust fans and high loads such as my bathroom heaters, so now I’ve got a mess of a workaround, I strongly disagree this is a good behavior and so far, my effort hasn’t turned into a simple solution. It’s simply not working as intended.
I’m currently attempting to use this for the template switches template:
{{ is_state('light.basement_bathroom_exhaust_fan', 'on') }}
Then using the actions to turn on / off the light service, but this just made the switch and the actual light states non-operational sadly.
Seems like fiddling with all of the states of this did eventually trigger this to work, maybe because one was in the on state, and not correctly synced in Home Assistant it didn’t like it?
I still argue this is not a great choice. I shouldn’t have to do the following to have a reasonable experience:
- Create a template switch, which requires the usage of templating which is not user friendly.
- Create a switch as a x helper to actually convert it to the proper type
This now means when I look at my device I have 3 options for using it, not the best.
This is an example template I just put together:
You can mark the entities that you don’t want for the device “hidden” so that they disappear from the list on the device page.
Thanks for pointing out to hide it, I was not thinking about that.
Oddly now it just suddenly stopped working and I’m getting a weird dictionary error, but I can’t quite fathom why. My other switch is working. Maybe this is somehow related to the multiple steps now?
So that error appears to come and go for me and I’m not quite sure why but it’s happening on both switches. One works then suddenly stops, seems to go back and for so far.
Ah! So if you mark the light as hidden in Home Assistant these workarounds break. So you’ll just always have a light and a switch and if you have a valid translation (such as a fan) for Switch as a then you just get that one since it marks the intermediate as hidden but the original light you cannot mark as hidden or this breaks.
Which of course then breaks actions on areas since I can no longer just turn on the lights in that area and actually only get lights. Now I turn on the lights and all my things, neither of which is good for my scenario especially given voice assistant since it simply won’t know to ignore these.
I don’t think I could say this is a viable workaround and presenting as a light to home assistant is problematic when the user chooses to not use it as a light switch (which I’d argue is the expected behavior, I think presenting a VZ31 as a light switch is logical).
Did you mark it as hidden or as disabled? I’ve not had the behavior you described when it was hidden, only disabled. I am lagging a few versions behind on Home Assistant though (2025.4) so maybe the behavior changed at some point.
Marking this as “Visible” to the off value breaks this for me while still leaving this as “Enabled”. I did double check this!
FYI I am running 2025.7.2.
I have been digging into this and understand the frustration. @rohan has done a good job describing what is going on. We actually had a similar problem with the fan switch when it came out. It presented as a light device because it had the dimming cluster to be able to bind with other devices. We actually were able to get around that by adding the fan cluster in addition to the dimmer cluster. This created two devices though (a fan and a light), but the user could disable the light entity and it didn’t cause any further issues. This situation is a little different, because the device already has the on/off cluster but it is seeing the level cluster and assuming it is a dimmable device.
I don’t see an easy way around that this time from a firmware perspective. I looked into creating a blueprint or a simpler way to automate the template process, and I don’t think a blueprint can create an entity or device so it has be done via the configutation.yml file or through a few steps in the GUI. Unless someone else can point me in a different direction.
I think the best I can do right now is create a help article that can walk users through it. The strange thing is that it stops working when you mark the device as non-visible. I need to do some more testing on that, but it seems like the template should still be able to see the initial device.
I think template entity creation via blueprints is available now: Template - Home Assistant
Let me look at it once I upgrade Home Assistant in a few days.
This seems like a bug somewhere, especially since it works on my older version.