My tutorial on setting up Fibaro RGBW Controller 2 - Device unknown

Tags: #<Tag:0x00007f3281ac1470>

I bought a Fibaro RGBW Controller 2 without knowing that it is not supported in HA.
I am posting here the steps to get it working so other people won’t struggle like me.

The current version of OpenZWave used in Home Assistant does not recognize this device.
After inclusion it will appear as Unknown. No switches will be added, only sensors.
It seems that this device is very similar to Zooz ZEN31, if not the same device. It actually looks the same.

You need to edit the zwcfg_*.xml file from the configuration folder. The configuration folder on hassio is located at /usr/share/hassio/homeassistant
You can install the File Editor Addon to edit this file from within HA.

In the zwcfg_*.xml file find the section with your node id. To get the updated file go to the ZWave integration, click Configure and Stop the network. At this point the file will be written. If you still can’t see the node in that file, restart HA.

Identify the node config

Should be the one labeled Unknown

Set a friendly device name in the Manufacturer section for that node

<Manufacturer id="10f" name="FIBARO System">
			<Product type="902" id="1000" name="Fibaro RGBW Controller 2" />
		</Manufacturer>

Update the specific parameter for this node from 2 to 1

<Node ... specific="1"

Replace CommandClass 38 with this:

<CommandClass id="38" name="COMMAND_CLASS_SWITCH_MULTILEVEL" version="4" request_flags="1" innif="true">
				<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="83" />
				<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="73" />
				<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="75" />
				<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="57" />
				<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="55" />
				<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>

Replace CommandClass 112 with this to have the parameters list:

<CommandClass id="112" name="COMMAND_CLASS_CONFIGURATION" version="1" request_flags="5" innif="true">
				<Instance index="1" />
				<Value type="list" genre="config" instance="1" index="1" label="On Off Status After Power Failure" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="2" vindex="0" size="1">
					<Help>On Off Status After Power Failure. Default: forced to OFF</Help>
					<Item label="forced to OFF" value="0" />
					<Item label="restore to previous state" value="1" />
					<Item label="forced to on" value="2" />
				</Value>
				<Value type="list" genre="config" instance="1" index="20" label="Switch / Input Type for IN1" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="4" vindex="2" size="1">
					<Help>Switch / Input Type for IN1. Choose the input/switch type you want to connect to the IN1 terminal. Default: momentary switch</Help>
					<Item label="analog sensor w/no pullup" value="0" />
					<Item label="analog sensor with pull-up" value="1" />
					<Item label="momentary switch" value="2" />
					<Item label="toggle switch (on when swithc is on)" value="3" />
					<Item label="toggle switch (toggles with switch toggle)" value="4" />
				</Value>
				<Value type="list" genre="config" instance="1" index="21" label="Switch / Input Type for IN2" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="4" vindex="2" size="1">
					<Help>Switch / Input Type for IN2. Choose the input/switch type you want to connect to the IN2 terminal. Default: momentary switch</Help>
					<Item label="analog sensor w/no pullup" value="0" />
					<Item label="analog sensor with pull-up" value="1" />
					<Item label="momentary switch" value="2" />
					<Item label="toggle switch (on when swithc is on)" value="3" />
					<Item label="toggle switch (toggles with switch toggle)" value="4" />
				</Value>
				<Value type="list" genre="config" instance="1" index="22" label="Switch / Input Type for IN3" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="4" vindex="2" size="1">
					<Help>Switch / Input Type for IN3. Choose the input/switch type you want to connect to the IN3 terminal. Default: momentary switch</Help>
					<Item label="analog sensor w/no pullup" value="0" />
					<Item label="analog sensor with pull-up" value="1" />
					<Item label="momentary switch" value="2" />
					<Item label="toggle switch (on when swithc is on)" value="3" />
					<Item label="toggle switch (toggles with switch toggle)" value="4" />
				</Value>
				<Value type="list" genre="config" instance="1" index="23" label="Switch / Input Type for IN4" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="4" vindex="2" size="1">
					<Help>Switch / Input Type for IN4. Choose the input/switch type you want to connect to the IN4 terminal. Default: momentary switch</Help>
					<Item label="analog sensor w/no pullup" value="0" />
					<Item label="analog sensor with pull-up" value="1" />
					<Item label="momentary switch" value="2" />
					<Item label="toggle switch (on when swithc is on)" value="3" />
					<Item label="toggle switch (toggles with switch toggle)" value="4" />
				</Value>
				<Value type="short" genre="config" instance="1" index="40" label="Scene Control for IN1" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="15" value="0">
					<Help>Assign scene activation trigger for IN1 terminal. Enter the sum of values to enable more than 1 trigger.Values: 0 – scene control disabled. 1 – click / toggle the connected switch once to trigger a scene; 2 – click / toggle the connected switch twice to trigger a scene; 4 – click / toggle the connected switch 3 times to trigger a scene; 8 – hold and release the connected momentary switch to trigger a scene. Default: 15</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="41" label="Scene Control for IN2" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="15" value="0">
					<Help>Assign scene activation trigger for IN2 terminal. Enter the sum of values to enable more than 1 trigger.Values: 0 – scene control disabled. 1 – click / toggle the connected switch once to trigger a scene; 2 – click / toggle the connected switch twice to trigger a scene; 4 – click / toggle the connected switch 3 times to trigger a scene; 8 – hold and release the connected momentary switch to trigger a scene. Default: 15</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="42" label="Scene Control for IN3" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="15" value="0">
					<Help>Assign scene activation trigger for IN3 terminal. Enter the sum of values to enable more than 1 trigger.Values: 0 – scene control disabled. 1 – click / toggle the connected switch once to trigger a scene; 2 – click / toggle the connected switch twice to trigger a scene; 4 – click / toggle the connected switch 3 times to trigger a scene; 8 – hold and release the connected momentary switch to trigger a scene. Default: 15</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="43" label="Scene Control for IN4" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="15" value="0">
					<Help>Assign scene activation trigger for IN4 terminal. Enter the sum of values to enable more than 1 trigger.Values: 0 – scene control disabled. 1 – click / toggle the connected switch once to trigger a scene; 2 – click / toggle the connected switch twice to trigger a scene; 4 – click / toggle the connected switch 3 times to trigger a scene; 8 – hold and release the connected momentary switch to trigger a scene. Default: 15</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="62" label="Power Report Frequency" units="seconds" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="32400" value="3600">
					<Help>Power Report Frequency. Choose how often you want your RGBW Dimmer to report power consumption (W) to your controller. NOTE: must be 0, or an increment of 30. Default: 3600</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="65" label="Energy Report Threshold" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="500" value="10">
					<Help>Energy Report Threshold. Choose how you want your RGBW Dimmer to report energy use (kWh) to your hub. The number entered as value corresponds to decimal values in energy useage change. So if 10 is entered by default, the RGBW Dimmer will report any change in energy use over 0.1 kWh. Energy reports are sent in t least 30-second intervals.</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="66" label="Energy Report Frequency" units="seconds" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="32400" value="3600">
					<Help>Energy Report Frequency. Choose how often you want your RGBW Dimmer to report energy (kWh) to your controller. NOTE: must be 0, or an increment of 30. Default: 3600</Help>
				</Value>
				<Value type="list" genre="config" instance="1" index="150" label="RGBW/HSB Wall Switch Mode" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="1" vindex="0" size="1">
					<Help>RGBW/HSB Wall Switch Mode. Choose how switches connected to the input terminals control your LED strip. In the default RGBW mode, each switch connected to each input terminal controls the RGBW chnnels separately (so IN1 for red, IN2 for green, etc.) with a single click for ON/OFF, double click to full brightness, and press-and-hold to dim (momentary switches only). In the HSB, IN1 controls hue, IN2 - saturation, IN3 - brightness, IN4 - white with single click for last set value or value 0, double click to max value, and press-and-hold to set custom value. Default: RGBW mode</Help>
					<Item label="RGBW mode" value="0" />
					<Item label="HSB mode" value="1" />
				</Value>
				<Value type="short" genre="config" instance="1" index="151" label="Ramp Rate (switch)" units="seconds" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="127" value="3">
					<Help>Ramp Rate (switch). Adjust the ramp rate for your RGBW dimmer (fade-in/fade-out effect for on/off operation). Values correspond to the number of seconds it takes for the dimmer to reach full brightness or turn off when operated from the connected wall switch. Note that 0 is instant on/off. Default : 3 seconds</Help>
				</Value>
				<Value type="short" genre="config" instance="1" index="152" label="Ramp Rate (Z-Wave)" units="seconds" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="127" value="1">
					<Help>Ramp Rate (Z-Wave). Adjust the ramp rate for your RGBW dimmer (fade-in/fade-out effect for on/off operation). Values correspond to the number of seconds it takes for the dimmer to reach full brightness or turn off when operated remotely from the Z-Wave hub Note that 0 is instant on/off. Default : 3 seconds</Help>
				</Value>
				<Value type="list" genre="config" instance="1" index="157" label="Preset Programs" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="10" vindex="2" size="1">
					<Help>Enable one of the preset animated color programs to set the mood with a click. Default: preset programs disabled</Help>
					<Item label="preset programs disabled" value="0" />
					<Item label="fireplace" value="6" />
					<Item label="storm" value="7" />
					<Item label="rainbow" value="8" />
					<Item label="polar lights" value="9" />
					<Item label="police" value="10" />
				</Value>
			</CommandClass>

Now restart the ZWave Network. You should now see the updated name and 6 switch entities.

You can stop here, if you can manage to work with these entities. They should provide you access to each channel from RGBW.
Some options would be:

  • using the individual generated entities (could not manage to use the colorpicker on the main entity)
  • creating a script and using sliders
  • creating scenes for different colors and brightness
    Note: By default a Ramp Parameter is enabled that is making a transition when changing colors. For this reason the entity sliders update their state in a weird way. They pick-up the previous ramp values. One simple option is to disable this feature using the zwave parameter.

The option below tries to circumvent all of these limitations.

If you want a fully working card, with color picker, brightness and white value sliders, read below

We will use the MQTT integration for the RGBW card support. We will convert the UI events to commands given to our Fibaro RGBW Controller so we control it’s channels when the UI from the MQTT light is used.
The command topic can be anything that does not exist. Just put “dummy” there.
It might sound weird to use the MQTTintegration only for the UI control it offers but it does the job quicker than creating a custom card.

  • Install Mosquito or a different MQTT broker. I used the Mosquitto addon
  • Add the MQTT Integration

Edit configuration.yml from the HA configuration folder:

Add these lines in the light section:

light:
  - platform: mqtt
    schema: json
    name: living_rgb_strip
    brightness: true
    rgb: true
    command_topic: "dummy"
    optimistic: true
    white_value: true

Restart HA to get your new MQTT light entity.

I am gonna create three automations to control power, color and white channel.

The first automation is for turning the lights on/off when using the light card

alias: Living-room light control (power)
description: ''
trigger:
  - platform: state
    entity_id: light.living_rgb_strip
    to: 'off'
  - platform: state
    entity_id: light.living_rgb_strip
    to: 'on'
condition: []
action:
  - service: light.toggle
    data: {}
    entity_id: light.fibaro_system_unknown_type_0902_id_1000_level
mode: single

The second one is for controlling the color and turning the device on. Make sure you identify each RGB entity so you can add the id here:

alias: Living-room Lights control
description: ''
trigger:
  - platform: state
    entity_id: light.living_rgb_strip
    attribute: brightness
  - platform: state
    entity_id: light.living_rgb_strip
    attribute: rgb_color
condition: []
action:
  - service: light.turn_on
    data:
      brightness: >
        {{ (states.light.living_rgb_strip.attributes.rgb_color[0] *
        (states.light.living_rgb_strip.attributes.brightness / 255)) | int  }}
    entity_id: light.fibaro_system_unknown_type_0902_id_1000_level_3
  - service: light.turn_on
    data:
      brightness: >
        {{ (states.light.living_rgb_strip.attributes.rgb_color[1] *
        (states.light.living_rgb_strip.attributes.brightness / 255)) | int  }}
    entity_id: light.fibaro_system_unknown_type_0902_id_1000_level_4
  - service: light.turn_on
    data:
      brightness: >
        {{ (states.light.living_rgb_strip.attributes.rgb_color[2] *
        (states.light.living_rgb_strip.attributes.brightness / 255)) | int  }}
    entity_id: light.fibaro_system_unknown_type_0902_id_1000_level_5

The third one is for controlling the white channel

alias: Living-room light control (white)
description: ''
trigger:
  - platform: state
    entity_id: light.living_rgb_strip
    attribute: white_value
condition: []
action:
  - service: light.turn_on
    data:
      brightness: >
        {{ (states.light.living_rgb_strip.attributes.white_value *
        (states.light.living_rgb_strip.attributes.brightness / 255)) | int  }}
    entity_id: light.fibaro_system_unknown_type_0902_id_1000_level_6
mode: single

At the end, add a card for the MQTT light entity to your dashboard and have fun using it.

3 Likes

Pardon me for jumping in, but I’m new to HA. I suspect that I’m going to have to edit the zwcfg_*xml file, because not all my ZWave devices are known to OpenZWave at the moment. So I’m bookmarking your useful post.

However, I don’t seem to have the hassio directory at /usr/share? All I have in the /usr/share directory is:

avahi
dbus-1
gettext
polkit-1
usb_modeswitch
ca-certificates  
et
glib-2.0
ss
xml
apparmor  
common-lisp
factory
locale
terminfo
zoneinfo

I’m running Home Assistant OS on an RPi4, and have logged into HA via SSH, and then into the host system. Do you have any idea where I can find the zwcfg_*.xml file? Thank you.

Thanks for this topic!

I followed your explanations, I have access to the configuration, but I have no any switch available.

I use HASS.IO 5.4 dev on a Rasp Pi 4 4go, updated yesterday to HA 5.8 and 2020.12.7 for the supervisor.

I stoped HA, I modified what you mentionned, in the file, I saved the file, I restarted HA, I waited that Zwave started, and… No any switch.

Please, do you have any idea?

Hey JeyC,

I was struggling with a similar problem. Got it solved the following way:

Change the “specific” parameter from “2” to “1”:

<Node id="x" name="" location="" basic="4" generic="17" specific="2"

to

<Node id="x" name="" location="" basic="4" generic="17" specific="1"

Reboot Home Assistant afterwards.

Good luck!

`

Thanks :slight_smile: !

Sorry, forgot about the specific param. I will update the tutorial

Sorry for the noob question: Does this cover the old ZWave stack or the new (beta) ZWave stack? I cannot find the file to edit so I presume it does not cover the new integration method?

If you install the addon “Samba share”, you can access/edit your file by accessing the network folder share, like :

\192.168.1.10\config

Or look the addon “File editor”.

Lucian.s

I have a weird behaviour with this module, and some “problems”.

1 - So I removed it from the Zwave network to be sure to install it from 0
But, I still have many devices in the devices list (like empty devices).
Is it normal that they are not deleted in the same time than the module (it is not any more in the list).

2 - Yesterday, I tried to use the switch for power on/off my white LED strip.
It was not working so well. At the end, I can activate it, but when I clicked (on the HA android app for example) on the switch to power off, the light was off but the switch came back on “on position” after a short moment (but the light was off).

3 - In HA,with my white LED strip, I can see a colour picker. But I don’t need it, I will don’t have any RGB light, only white+dimmer (like the B mode in the manual of the module). Is it possible to have a normal switch/dimmer ?

4 - I tried to link the switch to my physical switch (PUSHit 8) like other modules I already use, but the switch of the RGBW Controller 2 is not listed.
Do you know why?

Thanks ! :slight_smile:

4 - in addition, on android, I can’t find those switches in widgets > home assistant > switch.toggle (or on/off) like other switches.

I had the same problem with point 2)

You should set node configuration parameter 152: Ramp Rate (Z-Wave) to 0.
This means no fading, switch off immediately and the problems are gone.

RaKa

That file seems to be like from the old zwave stack. I have many devices but this file is almost empty so I presume this is left over from the first zwave implementation and not from the addon one (the currently beta stack). Am I correct?

I am still on OZW 1.4 …
I follow the discussion about the different Z-Wave variants and wait :frowning:

About my problem with this module on HA:

1 - So I removed it from the Zwave network to be sure to install it from 0
But, I still have many devices in the devices list (like empty devices).
Is it normal that they are not deleted in the same time than the module (it is not any more in the list).

2 - Yesterday, I tried to use the switch for power on/off my white LED strip.
It was not working so well. At the end, I can activate it, but when I clicked (on the HA android app for example) on the switch to power off, the light was off but the switch came back on “on position” after a short moment (but the light was off).

I reduce the fadding time to 1s and I think it’s ok now.

3 - In HA,with my white LED strip, I can see a colour picker. But I don’t need it, I will don’t have any RGB light, only white+dimmer (like the B mode in the manual of the module). Is it possible to have a normal switch/dimmer ?

please ?

4 - I tried to link the switch to my physical switch (PUSHit 8) like other modules I already use, but the switch of the RGBW Controller 2 is not listed.
Do you know why?

This is my biggest problem.
I want to link (make group association) some channel of the RGBW CONTROLLER 2 to a GROUP of my ZWAVE switch (PUSHit 8). When I choose the “group”, then I want to select 1 channel on the module, I see ONLY the RGBW module, not his 4 channels.

So I can’t control my 24v different light sources (except if I go in the Android App, here I see all channels, but it’s not what we want, we need to use our real/physical switches.

Please, do you have any idea?

4 - in addition, on android, I can’t find those switches in widgets > home assistant > switch.toggle (or on/off) like other switches.