GE Jasco Dimmer Switch won't respect 'transition' seconds

Since I wrote that post (which I believe is all still true and valid), I now have newer Z-Wave Plus models of both a GE/Jasco switch and a plug-in dimmer. I just checked supported_features of the newer dimmer, and it’s value is 33, meaning both brightness and transition! I haven’t tried using transition when turning it on, but in theory, it supports it. It is a GE model 28167. I can give it a try and let you know if you like.

1 Like

Yes please do! I would like to get some plug in dimmers as well, so that would be helpful information. Still looking to see if I can find an actual in-wall dimmer that supports it as well though.

Thanks!

It does work.

The problem is updating the entity. Per the discussion above, I have polling disabled and a refresh time of 3 sec. So, although the light actually transitions per the turn_on service parameters (i.e., brightness and transition), the entity is not updating when it’s done. E.g., if I set the transition to 10 sec, the entity updates after only 3 sec (i.e., refresh delay), so it only sees an intermediate value and never updates (automatically) again when the transition is complete (i.e., another 7 sec.)

I suppose this can be compensated for by enabling polling so that it does eventually update. The other way is to call the zwave.refresh_node service (using the node_id of the light.)

It’s kind of disappointing that the zwave code is given a transition time, but isn’t smart enough to force a refresh when that time has completed. :frowning_face:

Anyway, I would think any of the newer GE/Jasco Z-Wave Plus dimmers (including in-wall models) support this feature, although I can only vouch for the 28167.

2 Likes

Great, thanks for the info. I actually just bought the GE 14294, so I guess those just don’t support transition :frowning: .

Regarding the issue you were reporting, I had that same issue with the Homeseer HS-WD100+ switch I was using, and was able to fix that by adding this to my config:

zwave:
  device_config: !include zwave_device_config.yaml

And then including this in the zwave_device_config.yaml file:

light.homeseer_switch:
  refresh_value: true

Maybe try that and see if it helps?

I have refresh_value enabled, but with a delay of 3. I think the default is 5, but I’m not sure. As long as I don’t use transition, it works fine (even when using the default, internal transition time of 2.97 sec as explained previously.) So the problem only happens if I specify a transition in the turn_on service that is longer than the static refresh delay specified in the config.

Why do you say the 14294 doesn’t support transition? Do you have it connected to HA, and is there a light entity for it? If so, check its supported_features attribute. That will tell you if it should work.

Ah gotcha. Yeah I agree that as “smart” as these devices are supposed to be, I wish they would just know to force a refresh.

Yes I have the 14294 added to HA and it has supported_features: 1.

Does your GE/Jasco in-wall switch support transitions?

I only have in-wall switches, not dimmers. Only dimmers would support transition (since it doesn’t make sense for a switch.) The only dimmers I have are plug-ins – one older that doesn’t, and the one newer that does that I was talking about above.

So I’m trying to figure out how I can figure out before buying any more switches which ones support transition.

It seems like what you said is true; only those that implement index 5 for command class 38 do. But how would I know which ones do ahead of time? I figured it was just based purely on the command class/version number, i.e. all COMMAND_CLASS_SWITCH_MULTILEVEL_V4 would support it. But it seems like that’s not the case?

Looking at a site like THIS tells me what command classes a device supports, but that doesn’t really do anyone any good if those command classes are not the same for each device.

Also @pnbruckner if it’s not too much trouble, for my own troubleshooting, would you be willing to take a look at your zwcfg_xxxxxxxx.xml file for me and see what you have for your GE/Jasco 28167? I’m curious what version your COMMAND_CLASS_SWITCH_MULTILEVEL is.

For reference here is what I have for one of my switches I’m testing:

<Node id="16" name="" location="" basic="4" generic="17" specific="1" roletype="5" devicetype="1536" nodetype="0" type="Multilevel Power Switch" listening="true" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
	<Manufacturer id="c" name="HomeSeer">
		<Product type="4447" id="3036" name="HS-WD200+ Wall Dimmer" />
	</Manufacturer>
	<CommandClasses>
		<CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" mapping="38">
			<Instance index="1" />
		</CommandClass>
		<CommandClass id="38" name="COMMAND_CLASS_SWITCH_MULTILEVEL" version="4" innif="true">
			<Instance index="1" />
			<Value type="byte" genre="user" instance="1" index="0" label="Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="22" />
			<Value type="button" genre="user" instance="1" index="1" label="Bright" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
			<Value type="button" genre="user" instance="1" index="2" label="Dim" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
			<Value type="bool" genre="system" instance="1" index="3" label="Ignore Start Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="True" />
			<Value type="byte" genre="system" instance="1" index="4" label="Start Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
		</CommandClass>

I’m starting to wonder if it’s an issue with openzwave not currently supporting COMMAND_CLASS_SWITCH_MULTILEVEL v4.

No problem:

	<Node id="9" name="Master Bedroom Nightstand Lamp" location="" basic="4" generic="17" specific="1" roletype="5" devicetype="1536" nodetype="0" type="Multilevel Power Switch" listening="true" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
		<Manufacturer id="63" name="GE">
			<Product type="5044" id="3038" name="28167 Plug-in Smart Dimmer" />
		</Manufacturer>
		<CommandClasses>
			<CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" mapping="38">
				<Instance index="1" />
			</CommandClass>
			<CommandClass id="38" name="COMMAND_CLASS_SWITCH_MULTILEVEL" version="2" innif="true">
				<Instance index="1" />
				<Value type="byte" genre="user" instance="1" index="0" label="Dimmer" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
				<Value type="button" genre="user" instance="1" index="1" label="Bright" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
				<Value type="button" genre="user" instance="1" index="2" label="Dim" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
				<Value type="bool" genre="system" instance="1" index="3" label="Ignore Start Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="True" />
				<Value type="byte" genre="system" instance="1" index="4" label="Start Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
				<Value type="byte" genre="system" instance="1" index="5" label="Dimming Duration" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="255" />
			</CommandClass>

Looks like it has index 5, Dimming Duration:

<Value type="byte" genre="system" instance="1" index="5" label="Dimming Duration" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="255" />
1 Like

Excellent thank you!

Yep, and I am getting more confident that it’s because that switch (only) supports v2 of COMMAND_CLASS_MULTILEVEL. I think only those devices that have v2 or v3 will work.

Looking at the github HERE makes it seem as though it sets the indexes based on the version of command class, and there is nothing for v4.

There is also an open ticket to add support for v4 HERE. Looks like it was merged into dev but still not live in HA maybe???

HA doesn’t use the Dev branch of OZW. You’ll either need to convince HA to cherry-pick this particular fix to their OZW fork (if it can apply cleanly), or cherry-pick and build it yourself and use your own build with HA. The fix you need is actually much simpler than what was merged, all you need is for backwards compatibility with V3 and earlier, which means fixing the code that checks for version == 3 instead of >= 3 (the code you identified plus another line).

As a temporary workaround, you should probably be able to copy and paste the Dimming Duration Value posted here into your own zwcfg*.xml. Downside is that if OZW decides to re-write your cache file it might be lost.

1 Like

Thanks for your reply @freshcoast, pretty much confirms what I’ve been thinking. Unfortunately I’m pretty unfamiliar with compiling and don’t even know where to start with that.

I did actually try copying and pasting the “Dimming Duration” line into my own zwcfg_xxxxxxxx.xml file, but after restarting HA it disappeared.

You probably didn’t stop HA first. Stop HA first, then edit the file. HA will write the file when it shutsdown.

1 Like

That did it! And transition is working! After copying and pasting that line I now have supported_features: 33 and was successfully able to transition.

Thanks for both you guys help!

Going to keep playing with this and see if maybe I can just update the devices xml file to include this as an option for COMMAND_CLASS_SWITCH_MULTILEVEL without having to compile.

1 Like

Maybe something like this will work (with the correct value for Dimming Duration of course)? Not sure if that only overrides an existing Value, or forces the Value to be created…

Yeah that’s what I was going to try. I’m using hass.io though, and it looks like there is no config folder for OZW? I guess there is no way to edit the device config files and it just has to be done manually the way I did it after each device is added.

In hass.io you should be able to download the XML config files somewhere (/config ?) edit them and then update your z-wave config to use those files instead, using the config_path setting.

1 Like

Yes that worked perfectly. Thanks so very much for your help!

So, to recap for any future visitors, here’s a rundown of what I did to get transitions working on my HomeSeer HS-WD200+ dimmer switch (should also work on any dimmers that have COMMAND_CLASS_SWITCH_MULTILEVEL v4, e.g. the HS-WD100+, GE/Jasco 14294, etc):

  1. Since I’m on hass.io, I needed to download a copy of the OZW config folder HERE and put it somewhere on the rPi (I put it at “/config/OZW/config”). If you’re not on hass.io you should already have this folder somewhere I believe.

  2. Edit my configuration.yaml file to include this under my zwave config:

    config_path: /config/OZW/config

  3. Edit the file “/config/OZW/config/homeseer/hs-wd200plus.xml” to include this:

     <CommandClass id="38">
       <<Value type="byte" genre="system" instance="1" index="5" label="Dimming Duration" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="255" />
     </CommandClass>
    
  4. Restart Home Assistant

  5. Add the node in Home Assistant GUI

5 Likes