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.