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:
Any ideas?
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:
Any ideas?
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)
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:
Okay, to get it working:
basic="4" generic="17" specific="2"
basic="4" generic="17" specific="1"
<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>
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?
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.
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.
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:
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:
Awesome! This looks fantastic appreciate the extra info!