How to send a “basic command class” value to z-wave device?

I own a Spirit Z-Wave Plus radiator valve. I must set it into “manufacturer specific mode”. On page 15 of that manual, it says that I need to use the basic command class for this by sending 0xFE to this command class. I cannot find this in the possible settings at Configuration --> z-wave --> Node Management. So, how do I do that?

Use /dev-service (the remote control icon) and then zwave.set_config_parameter.
For payload add something like:
{ "node_id": 5, "parameter": XY, "value": 0xFE }

NodeID is the device’s numerical ID.
The parameter ID should be listed in your command documentation for that specific setting.
For value enter your desired setting - it’s possible that you’d have to translate it into decimal, i.e. 254 instead of 0xFE.
Be extra picky about the format, especially not to quote the colon characters (:).
When everything worked, you should see a corresponding log message in your OZW_Log.txt.

Usually, when the device is fully recognized by HA, you can change those settings under config / z-wave, then select the node and scroll down to “Node config options” where you can choose the option from the dropdown list.

Sebastian

Thank you for the reply! This brings me one step further. However, the “parameter” name is a problem. If you look at page 15 of https://products.z-wavealliance.org/ProductManual/File?folder=&filename=Manuals/2543/Spirit%20Z-Wave%20Plus_DRAFT_V4.pdf, there is no name to give – or do you mean “basic command” as the parameter name?

Hm, I’m not sure how this is supposed to work.
You’d use the command I mentioned to configure the settings on p. 16, section 6.3.
There you have the parameter numbers and their possible values.

Sebastian

Were you able to join the node to your zwave network?
If so, can you find it in the zwcfg XML file and post the entry here?

Strange … the node is definitely in the z-wave network, and I can see the node’s sensors in HA, but the node does not appear in zwconfig….xml.

Have you restarted HASS (or the z-wave network) since including the node? I don’t think the zwcfg xml file will be written until the network is stopped. Easiest way to do that is just restart HASS.

Thank you, a restart helped! Here is the node: https://pastebin.com/YxrPWAdy

Ok so it should show up as a thermostat in HomeAssistant.

You’ll need to add this to your configuration:

climate:
  - platform: zwave

Then it will show up and you’ll be able to control it.

I need to send a “basic command class” value to the device, rather than setting temperture etc.

I don’t think you can send Basic commands.

In your XML file, the basic command class is mapped to COMMAND_CLASS_THERMOSTAT_MODE (64), line #6.

  <CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" mapping="64">
      <Instance index="1" />
  </CommandClass>

This means that OZW will interpret any Basic commands as thermostat commands (https://github.com/OpenZWave/open-zwave/wiki/Basic-Command-Class). When the Basic class is mapped, access to it is not exposed in the API, AFAIK.

If the Basic class was exposed, you could use the zwave.set_node_level to send commands via HASS. But since there’s no instance of the Basic class, you can’t.

If you look in the thermostat docs, the Basic commands (6.2) all map to equivalents in the Thermostat mode (6.8). Thermostat mode 0x1F also enables manufacturer specific mode. Does the ZWave control panel not give you the ability to change it?

I reviewed the XML you posted for your device, the command you’re attempting to change is in the Zwave control panel as an option.

Torston: Did you manage to get any further with this?
firstof9: The ‘modes’ listed in the thermostat mode command class only partially work for me; I can set Off/Heat/Heat Eco/but Manufacturer specific only partially works - if I set it, it never reads back as that.
And the manual lists the entries that are under thermostat mode, but also lists the ‘basic’ set that I think Torsten was trying to use. They all just have a single value (that doesn’t match the value used by the thermostat/mode).
I think I’ve been able to get it into ‘Manufacturer Specific’ mode and then setting the dimmer level; but I don’t think it’s letting me set the dimmer level to anything other than 0.
Getting it back out of manufactuer specific mode seems curious as well; setting the mode (via thermostat) back to ‘heat’ seems to wkr, but then a few seconds later it switches to ‘Off’ - even when my zwave code has exited; so it’s not obvious to me what’s happening there.
So trying those Basic mode commands would be interesting.

No, I hoped to be successful with a newer HA version but I haven’t had the time to give it a try.

OK; I wrote up my experiences at:
http://www.treblig.org/zwave/index.html if you follow it down there’s a link to my python code; I’m managing to set it to 0 level, but it’s taken a bit of fiddling to get it to reliably go into and out of this mode. (It’s still taking two repetitions to get it to come back to heat mode). I hadn’t manage to get it to a non-0 level.

Looks like the latest version of OpenZwave has the XML for this device now. Once the python-openzwave library is updated and the HA devs update to that your valve will have the “Manufacturer Specific” setting you’re looking for.

Looks like the 1.4 version exists too so you can place it in your config_path directory and it should work fine:

That still looks like it’s the ‘mode’ setting on the thermostat class which has been there for ages. It just doesn’t behave as-expected for me. The codes the manual describes for the basic class commands are different.

Per the manual:

0x1F = 31 in decimal format, this should be the same exact setting as your “basic command” mode with just a different value since it’s being mapped to the thermostat mode.

When you set this mode what happens?

When I select the Manufacturer Specific mode from the thermostat it does seem to switch the LCD display, and as far as I can tell is letting me set the valve to 0% - but I’ve not succeeded in setting it to any non-0 value. Also it’s a bit odd, reading the mode back never shows as Manufacturer Specific - it seems always to read back as the mode you had it in before that. Getting out of Manufacturer specific also seems to be odd; I’ve tried setting it to Heat directly but I’ve seen it then flick to Off a few seconds later even though I didn’t ask it. So at the moment I’m going to Off->Heat and that’s working - but normally takes two goes for it to actually get back to Heat.

Here’s the other bit of the manual (This is the v5 manual, and I can’t find an English version)

Note the codes are different for the basic commands.

Right but those are getting mapped by openzwave per their XML:

  <CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" mapping="64">
      <Instance index="1" />
  </CommandClass>

64 = Thermostat command class, so setting the mode to “31” should set your “BASIC COMMAND” to “0xFE” so by all accounts it should be working.

When you do try to set it to any non-0 value do you get an error?