New device (Zooz RGBW dimmer ZEN31) only partially working (no switches)

Hi,
I’ve obtained a Zooz RGBW dimmer (ZEN31) and written an XML config file for it. I can add it to my HA, but all I get are the sensors, no switches/lights. I’m running HA 0.106.5. My OZW_Log.txt file is available from:

https://pastebin.com/kbE4yiDG

Any ideas?

1 Like

Did you figure this out? I’m about to give up and try a different model. I really want to like the Zooz. It looks like it would work really well if fully supported in Home Assistant. I like the local control feature with momentary buttons.

I also just recently got a Zen31.
from the zwave2mqtt interface, i can set the various user values, including the individual RGBW channels, or a color value. so the controller ‘works’ in so far as setting colors / lights.
but in HA, i only have switches for channels 1-6, which dont seem to work.

I’ll be playing with it more, so hopefully can get it figured out.

Hey OP.
I’ve made a little more progress with my Zen31. I wouldn’t say it’s perfect, but I do have it working enough to be relatively functional with some specific device idiosyncrasies.

first off, i had to re-define the dimmers, as there were some issues with a 0-255 range vs a 0-99 range.
I still haven’t gotten to where i can off and on the light and have it resume at the last setting… on = full brightness with my config currently, but other than that… not too bad.

the other things… when you set the color via 11/51/1/0 (RGBW) the controller doesn’t update the level values of the individual RGBW channels, which makes for some interesting behavior. and using an RGB color picker does a set then a read, but the controller fades the color from current to new value, so the ‘read’ RGB value doesn’t reflect the actual color.

my end result is; i can set RGB, brightness, and white using a color wheel (but cant’ turn off rgb using the wheel if you want just white). OR i can use the individual channels to set RGB and W separately along with the master level.

(i added two custom plugins to my lovelace for the screenshots, Light Entity Card for the color picker, and slider-entity-row for the channel sliders)


i can set the color (or effect) using the top color wheel control, or use the channel sliders on the bottom. the “on” switch is channel 2. on the RGB control, that sets the value to 99 (full bright).
the dimmer controll on the top is the same as the dimmer slider_2 on the bottom.

The controller always takes the last value set, but generally doesn’t update any of the user values for feedback. so if you set color using the colorwheel, then change one of the color sliders, it wont quite do what you are expecting, cause the other color sliders are actually set differently than what you see (until you update them). so best to 0 out everything, then set your values via the sliders.

this makes for a little fugly UI… but for automatons, it’s not bad, as you can just set all values in a scene or script.

config here:
your unique_id’s will obviously differ.
(i’m also using zwave2mqtt, and mosquito broker, but even if you are using the native openzwave, you should be able to get the gist of it.)

 
  - platform: mqtt
    command_topic: "homeassistant/11/38/2/0/set"
    on_command_type: "brightness"
    #payload_on: "{{ '%i' | format( state_attr( 'light.rgb_rgb_dimmer_2' ,'brightness') * 99/255 )}}"
    state_topic: "homeassistant/11/38/2/0"
    state_value_template: "{{ 'OFF' if value_json.value == 0 else 'ON' }}"
    brightness_state_topic: "homeassistant/11/38/2/0"
    brightness_command_topic: "homeassistant/11/38/2/0/set"
    brightness_value_template: "{{ value_json.value  }}"
    brightness_scale: 99
    rgb_command_template: "{{ '#%02x%02x%02x' | format(red, green, blue)}}"
    rgb_command_topic: "homeassistant/11/51/1/0/set"
    rgb_state_topic: "homeassistant/11/51/1/0"
    rgb_value_template: "{{ value_json.value[1:3] | int(0, 16)}},{{ value_json.value[3:5] | int(0, 16) }},{{ value_json.value[5:7] | int(0, 16) }}"
    white_value_command_topic: "homeassistant/11/38/6/0/set"
    white_value_scale: 99
    white_value_state_topic:  "homeassistant/11/38/6/0"
    white_value_template: "{{ value_json.value }}"
    effect_command_topic: "homeassistant/11/112/1/157/set"
    effect_state_topic: "homeassistant/11/112/1/157"
    effect_list:
      - "preset programs disabled"
      - "fireplace"
      - "storm"
      - "rainbow"
      - "polar lights"
      - "police"
    "name": "Zooz RGB_dimmer test"
    "unique_id": "zwave2mqtt_0xfd523452_11-38-1-0"
    retain: true


  - platform: mqtt
    state_topic: "homeassistant/11/38/2/0"
    command_topic: "homeassistant/11/38/2/0/set"
    brightness_state_topic: "homeassistant/11/38/2/0"
    brightness_command_topic: "homeassistant/11/38/2/0/set"
    on_command_type: "brightness"
    state_value_template: "{{ 'OFF' if value_json.value == 0 else 'ON' }}"
    "brightness_value_template": "{{ value_json.value  }}"
    brightness_scale: 99
    name: ALL_dimmer_2
    unique_id: "zwave2mqtt_0xfd523452_11-38-2-0"

  - platform: mqtt
    state_topic: "homeassistant/11/38/3/0"
    command_topic: "homeassistant/11/38/3/0/set"
    brightness_state_topic: "homeassistant/11/38/3/0"
    brightness_command_topic: "homeassistant/11/38/3/0/set"
    on_command_type: "brightness"
    state_value_template: "{{ 'OFF' if value_json.value == 0 else 'ON' }}"
    "brightness_value_template": "{{ value_json.value  }}"
    brightness_scale: 99
    name: R_dimmer_3
    unique_id: "zwave2mqtt_0xfd523452_11-38-3-0"
    
  - platform: mqtt
    state_topic: "homeassistant/11/38/4/0"
    command_topic: "homeassistant/11/38/4/0/set"
    brightness_state_topic: "homeassistant/11/38/4/0"
    brightness_command_topic: "homeassistant/11/38/4/0/set"
    on_command_type: "brightness"
    state_value_template: "{{ 'OFF' if value_json.value == 0 else 'ON' }}"
    "brightness_value_template": "{{ value_json.value  }}"
    brightness_scale: 99
    name: G_dimmer_4
    unique_id: "zwave2mqtt_0xfd523452_11-38-4-0"
    
  - platform: mqtt
    state_topic: "homeassistant/11/38/5/0"
    command_topic: "homeassistant/11/38/5/0/set"
    brightness_state_topic: "homeassistant/11/38/5/0"
    brightness_command_topic: "homeassistant/11/38/5/0/set"
    on_command_type: "brightness"
    state_value_template: "{{ 'OFF' if value_json.value == 0 else 'ON' }}"
    "brightness_value_template": "{{ value_json.value  }}"
    brightness_scale: 99
    name: B_dimmer_5
    unique_id: "zwave2mqtt_0xfd523452_11-38-5-0"
    
  - platform: mqtt
    state_topic: "homeassistant/11/38/6/0"
    command_topic: "homeassistant/11/38/6/0/set"
    brightness_state_topic: "homeassistant/11/38/6/0"
    brightness_command_topic: "homeassistant/11/38/6/0/set"
    on_command_type: "brightness"
    state_value_template: "{{ 'OFF' if value_json.value == 0 else 'ON' }}"
    "brightness_value_template": "{{ value_json.value  }}"
    brightness_scale: 99
    name: W_dimmer_6
    unique_id: "zwave2mqtt_0xfd523452_11-38-6-0"    
    

Were you able to get these working? I’m in the same boat, only seeing sensors. I’m using the integrated z-wave component running OZW 1.4.

Somebody already reported this as an issue. Seems it is related to the way home assistant discovers entities.

Found a workaround to get the ZOOZ ZEN31 working with the existing zwave integration (OZW 1.4). There seems to be two problems:

  1. The discovery schema in home assistant isn’t setup to find this device type (open issue: https://github.com/home-assistant/core/issues/31253)
  2. This device is using some zwave features that will hopefully be fixed in OZW 1.6 when the new integration comes out (this is just a guess, I am by no means an expert here).

Okay, to get it working:

  1. Add the device to your zwave network.
  2. Shutdown home assistant and open your OZW config file (zwcfg_xxxxx.xml) and find the ZEN31 device.
    Change this:
    basic="4" generic="17" specific="2"
    To this:
    basic="4" generic="17" specific="1"
    Replace CommandClass 38 with the following:
	<Instance index="1" />
	<Instance index="2" endpoint="1" />
	<Instance index="3" endpoint="2" />
	<Instance index="4" endpoint="3" />
	<Instance index="5" endpoint="4" />
	<Instance index="6" endpoint="5" />
	<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="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="user" instance="2" index="0" label="Level" 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="2" 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="2" 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="2" 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="2" 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="user" instance="3" index="0" label="Level" 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="3" 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="3" 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="3" 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="3" 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="user" instance="4" index="0" label="Level" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="90" />
	<Value type="button" genre="user" instance="4" 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="4" 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="4" 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="4" 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="user" instance="5" index="0" label="Level" 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="5" 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="5" 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="5" 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="5" 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="user" instance="6" index="0" label="Level" 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="6" 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="6" 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="6" 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="6" 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>
  1. Restart home assistant. You should see six entities. First one is overall brightness and overall on/off. Unsure what the 2nd one is, appears to function similarly to the first one. The next 4 are the individual color channels.
1 Like

Thanks for this! I have Fibaro RGBW Controller 2 (FGRBBW-442). I have followed the above instructions for Zooz ZEN31 and it kind of works for the Fibaro. I get all the entities that I should, but I cannot access the configuration parameters. For example, I cannot change parameter 20 from 2 (default) to 4. The list of configuration parameters in Home Assistant/Zwave is completely empty for this node. Also, I have tried with zwave.set_config_parameter but this also seems not to work: no error message but does not change the behavior as it should. Any ideas?

1 Like

Fun times! Thanks to those who’ve posted above with great info.

I’ve managed to get things partially working (can control each channel from HA).

I’m trying to read out when the different channels are turned on/off for an automation/NodeRed function. I get state_changed events for On/Off when triggered from within Home Assistant, but the physical buttons don’t trigger any events that I can read reliably.

I tried adding the ZWave controller to the on/off group for each channel in ZWave settings but there is no descriptor that tells which one was triggered.

Here is the Debug output from NodeRed reading “zwave.node_event”:

#6/8/2020, 1:29:33 AMnode: 4611df89.44858
zwave.node_event : msg.payload : Object
object
event_type: "zwave.node_event"
entity_id: "zwave.zooz_unknown_type_0902_id_2000"
event: object
entity_id: "zwave.zooz_unknown_type_0902_id_2000"
node_id: 47
basic_level: 255

#6/8/2020, 1:29:36 AMnode: 4611df89.44858
zwave.node_event : msg.payload : Object
object
event_type: "zwave.node_event"
entity_id: "zwave.zooz_unknown_type_0902_id_2000"
event: object
entity_id: "zwave.zooz_unknown_type_0902_id_2000"
node_id: 47
basic_level: 0

#6/8/2020, 1:29:38 AMnode: 4611df89.44858
zwave.node_event : msg.payload : Object
object
event_type: "zwave.node_event"
entity_id: "zwave.zooz_unknown_type_0902_id_2000"
event: object
entity_id: "zwave.zooz_unknown_type_0902_id_2000"
node_id: 47
basic_level: 255

As you can see the only info is the level and the node_id, no other way to tell which channel is being turned on or off.

There is some interesting information for other Zooz switches on this help page: https://www.home-assistant.io/docs/z-wave/device-specific/
But I haven’t gone through it all. I’m new to a bunch of this stuff, but I’m getting up to speed. haha!

Any suggestions or help would be awesome. :smiley:

FYI, I reached out to the zooz support team and they got back to me really quickly. (there aren’t any new firmware updates for this device)
They mentioned that another user had issues with setting/changing custom parameters, and they sent me a screenshot that helped me change some of mine (the ones listed in the manual).

Here are some example commands to change parameters on the Zen31:
(Go to ‘Developer Tools’>‘Services’>Enter ‘zwave.set_config_parameter’ as the service, then enter one of the below functions and click the “Call Service” button. There’s no feedback, but it worked for me (I’ve verified the new Ramp Rates).

RAMP RATE
	Buttons (1 second)
{
 "node_id": 47,
 "parameter": 151,
 "value": 1,
 "size": 2
}
	Home Assistant (Instant)
{
 "node_id": 47,
 "parameter": 152,
 "value": 0,
 "size": 2
}

Power Report Freq. (Disabled)
{
 "node_id": 47,
 "parameter": 62,
 "value": 0,
 "size": 2
}

Energy Report Thershold (Disabled)
{
 "node_id": 47,
 "parameter": 65,
 "value": 0,
 "size": 2
}

ON/OFF After Power Fail (Disabled)
{
 "node_id": 47,
 "parameter": 1,
 "value": 1,
 "size": 1
}

Energy Report Freq. (Disabled)
{
 "node_id": 47,
 "parameter": 66,
 "value": 0,
 "size": 2
}

This thread has been helpful, I’ve been able to control my ZEN31 by manually editing the xml schema. However, I have several ZEN31 devices I’d like to control, and I’m not sure how to address them individually. Ideally I’d love some way to correlate the zwave node id to the physical device’s serial number or QR code. Anyone have any suggestions?

You could maybe edit the device name/info in the XML config file for each node? You’d just have to keep track as you add them to the network so you can associate a nodeID with the correct device.

Made some more progress with this device!

I reached out to the Zooz support team again, and they have been very helpful. I got an updated xml config from them (found below) which allows parameters to be set from the GUI. The only main issue that is unresolved is that I can’t change parameters 40-44. Luckily the default for those is ‘15’ which means scene commands are issued by default for all Inputs (IN1-4) for all supported commands (Single, Double, and Triple Clicks, plus Hold & Release).

Here’s the list of IDs and ‘seconds’ that correspond to different IN# and button press types.
Zen31_CentralSceneValues

I’ve been able to read this info and utilize it for automations by tailing the OZW_Log.txt file using NodeRed. I haven’t figured out if there’s a way to see the events through Home Assistant directly, I’m sure there must be?

zwcfg_zen31.xml (from Zooz support team):

Steps to add it:

  1. The ZEN31 device must be added(included) to your network
  2. Stop the zwave network
  3. Copy and paste the code to replace the entire entry for the device (in the zwcfg_xxxxx.xml file)
  4. You’ll need to change the Node id=“61” to whatever value it was in your configuration file
  5. Save the new config file
  6. Restart the zwave network

Bonus, if you’re interested, I’m using this controller for custom RGBW light strips that are attached along the top of a climbing wall I built inside for my kids. There are three big 100mm lighted dome arcade buttons mounted to the ceiling that they can press to trigger different light patterns/colours (at least that’s the plan if I can get the automation/logic working correctly!). The buttons are lit by the white channel.

Thanks Luke! Can anyone help me understand how to make this schema change using OpenZWave (not the regular zwave integration)? OZW doesn’t seem to use the zwcfg file (at least it doesn’t create one).

in case anyone is wondering, it’s in the addon_core_zwave docker container at /data/ozw/config/ozwcache_0xe252b249.xml

I need to know everything about you “Bonus” section!!! I have been wanting to build a climbing wall for my 3yrd old for a while.

3/4" Plywood panels (with fittings for attaching holds) attached with rugged structural screws into the house framing.

Here’s some pictures:


Large buttons are big durable ‘arcade’ buttons, with 12V lights in them. Hooked into each of the Zooz device momentary switch channels.
At the moment I have each button triggering a different one of the built - in ‘scenes’ on the Zen31 unit. (for example the red button triggers the ‘police’ flashing light pattern) Each pattern/scene runs for a few seconds and then Home Assistant resets the colour channels to 0% and white to ~25%. The LED strips are custom lengths and contained within an aluminum channel with diffuser.
The electronics (Zen31 + AC/DC PSU) are contained in a wall panel above the room light switches. One of which controls power to the whole system (this way the wall lights can be operated independently of the room lights and I don’t have to deal with the finicky control of the Zen31 through home assistant; one button VS four)


Kids love it, and the buttons/lighting give them a goal/reward at the top.

2 Likes

Awesome! This looks fantastic appreciate the extra info!