Eaton Aspire RFWC5 scene controller with Z-Wave JS

The Eaton RFWC5 appears to be a tricky z-wave device to integrate. I’m a new Home Assistant user who used Z-Wave JS as it was the recommended Z-wave integration at the time I assembled my system. I am able to connect to the RFWC5 node, the Eaton RFWC5 make and model is listed as a device, and an entity titled Scene Control : Indicator Value is present with a 0.0 value.

Developer Tools -> Events -> Listen to events for “zwave_js_event”, “zwave.node_event” and “zwave.scene_activated” produces no output when buttons are pressed on the RFWC5. Z-Wave JS logs here: https://pastebin.com/TY4zrwpP no log entries upon pushing buttons on the RFWC5.

I found several threads where people grappled with integrating this device on deprecated Z-wave services:


I don’t find myself able to implement everything I found in these threads on Z-wave JS. In particular, one user states “In the Z-Wave settings, make sure that you have associated Group 255 to your Z-Wave controller (under Node Group Associations). If I’m remembering correctly, once you do that, you should get the events.” There does not appear to be any Node Group Association tools in Z-wave JS. I also don’t have a /config/zwcfg_*.xml file to adjust.

I also find the Z-Wave JS documentation states “While support for the most common devices is working, some command classes are not yet (fully) implemented in Z-Wave JS. You can track the status here.” It could be possible the command classes for this device are not yet supported.

Reddit user blackbear85 wrote a custom component to handle this particular scene controller, and I have populated my /custom_components/ folder with a directory of his scripts, but its not clear to me if more steps are needed. That custom component is here: https://github.com/blakeblackshear/rpi-zwave-hub/tree/master/homeassistant/custom_components/cooper_controllers

If I can get some direction to help me implement the controller with Z-Wave JS, that would be fantastic. Otherwise it may make sense for me to use the deprecated Z-Wave implementation for compatibility with this scene controller.

You also tried searching for the zwave_js_event ? the above are for the deprecated zwave.

Scene events are fully supported in zwave-js, so all those workarounds shouldn’t be needed…

The above custom component will not work, it is for the deprecated zwave.

Apologies, yes I tried zwave_js_event and there was no output. I’m setting up Z-Wave JS to MQTT now to try managing my devices in there.

I installed Z-wave JS to MQTT, stopped the Z-wave JS service in supervisor, and entered the device and network key from the Z-wave JS configuration into the Z-wave JS to MQTT configuration. The Z-wave JS to MQTT control panel reads: Controller Status “Driver: Port is not open”, my z-wave connected z-wave node is not listed.

Make sure that all components that might try to use that USB port are shut down fully. It can take minutes for other add-on’s to release the port.

Shut add-on’s down, wait for 2-3 mins, then start the add-on you want. Check the logs before you go to the UI. Should give you an indication of what is going on.

I stopped Z-wave JS in supervisor, even disabled it from starting at boot and restarted HA. I have nothing else in supervisor that would use z-wave. This is the only z-wave device I have attached right now.

Under configuration->integrations-> Z-wave JS is still a listed item with devices and entities. Should I delete the integration as well? There is nothing else that could be competing for that z-wave usb device. I also don’t seem to understand if Z-wave JS 2 Mqtt is an alternative to the Z-wave JS addon or a supplement.

In the current state (turned off Z-wave JS, and attempted connection in Z-wave JS 2 mqtt) HA logs note the following items:

Logger: homeassistant.components.websocket_api.http.connection
Source: components/websocket_api/connection.py:84
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 2:16:17 PM (1 occurrences)
Last logged: 2:16:17 PM

[2844966816] Received invalid command: zwave_js/network_status
Logger: homeassistant.config_entries
Source: config_entries.py:250
First occurred: 2:06:00 PM (11 occurrences)
Last logged: 2:16:01 PM

Config entry 'Z-Wave JS' for zwave_js integration not ready yet. Retrying in 5 seconds
Config entry 'Z-Wave JS' for zwave_js integration not ready yet. Retrying in 10 seconds
Config entry 'Z-Wave JS' for zwave_js integration not ready yet. Retrying in 20 seconds
Config entry 'Z-Wave JS' for zwave_js integration not ready yet. Retrying in 40 seconds
Config entry 'Z-Wave JS' for zwave_js integration not ready yet. Retrying in 80 seconds
Logger: homeassistant
Source: components/zwave_js/config_flow.py:56
First occurred: 2:06:06 PM (1 occurrences)
Last logged: 2:06:06 PM

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/hassio/discovery.py", line 96, in async_process_new
    await self.hass.config_entries.flow.async_init(
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 130, in async_init
    result = await self._async_handle_step(
  File "/usr/src/homeassistant/homeassistant/data_entry_flow.py", line 213, in _async_handle_step
    result: Dict = await getattr(flow, method)(user_input)
  File "/usr/src/homeassistant/homeassistant/components/zwave_js/config_flow.py", line 134, in async_step_hassio
    version_info = await async_get_version_info(self.hass, self.ws_address)
  File "/usr/src/homeassistant/homeassistant/components/zwave_js/config_flow.py", line 56, in async_get_version_info
    version_info: VersionInfo = await get_server_version(
  File "/usr/local/lib/python3.8/site-packages/zwave_js_server/version.py", line 11, in get_server_version
    return VersionInfo.from_message(await client.receive_json())
  File "/usr/local/lib/python3.8/site-packages/aiohttp/client_ws.py", line 291, in receive_json
    data = await self.receive_str(timeout=timeout)
  File "/usr/local/lib/python3.8/site-packages/aiohttp/client_ws.py", line 276, in receive_str
    raise TypeError(f"Received message {msg.type}:{msg.data!r} is not str")
TypeError: Received message 257:None is not str

I also had some z-wave switches listed in my configuration.yaml and automations.yaml from previous troubleshooting which I removed, and I also removed an entry from custom_components regarding my z-wave device. I restarted HA and I’m having the same issue of “Driver: Port is not open” device status while Z-Wave JS is turned off, and no output in device status when Z-wave JS is turned on /w no connection to z-wave device in that state. This is the log output for Z-Wave JS 2 MQTT: https://paste.ubuntu.com/p/kKRVRBzb6M/

I have one of these and was able to get it setup on the old zwave version. With the new, it does get recognized and I get events on zwave_js_event, but only when click a button “ON” and the indicator goes on, not when i click it “OFF”. Also the indicator entity created doesn’t do anything in HA. I’m not really sure how to get it to do any more than that.

Ok there is some wild stuff going on with Z-wave2MQTT.

If you look at my logs, the JS heap is running out of memory. Meanwhile Z-wave2MQTT was showing in supervisor to be using 30-50% CPU constantly. My Raspberry Pi was getting hot enough to cook eggs on. This bug: https://github.com/zwave-js/zwavejs2mqtt/issues/485 says “disable persistent storage in mqtt settings, it’s bugged”, but I don’t have MQTT setup and I don’t see an option in the Z-wave2MQTT interface nor am I aware of the configuration file address Z-wave2MQTT is operating on.

I tried switching to the deprecated z-wave implementation, but couldn’t get that to work either. This thing is a nightmare. They are the devil’s buttons.

Reviewing the command classes implementation:

Notes that “Scene Activation” has interview+api+setValue but not pollValue, meanwhile “Scene Actuator Configuration” and “Scene Controller Configuration” are not supported so far. In prior documentation here: https://www.home-assistant.io/docs/z-wave/device-specific/, there was a manual entry needed for “COMMAND_CLASS_CENTRAL_SCENE”. It’s not really clear to me if the this a supported command class yet in Z-wave JS.

Looks like “Scene Actuator Configuration” and “Scene Controller Configuration” are now supported but pollValue is not yet. I’m not sure what is needed but I don’t see any new events yet, have you had any luck yet?

I was able to make it work (not easy), only activating the buttons - deactivating appears to be trickier.

You need to go into ZwaveJS2MQTT webinterface, and associate every group with your controller (wait 2-3 minutes between each group association– not doing this caused a lot of errors). Important (or at least only worked for me this way), set node endpoint to “Endpoint 0”

Once you do this you will be able to see an event in ZwaveJS2MQTT, using zwave_js_value_notification. This event will notify Home Assistant every time a button is pressed (different event values are associated with the different numbers)

Finally, you just need to create an automation to listen to this event and execute the scene you needed to be executed.

Let me know if you have any success on making RFCW5 to send an event or information to Home Assistant when you deactivate a scene.

I am deep in the maze of trying to get this damn keypad to work, and your post gives me hope, but I can’t figure out how to do what you’re describing. Can you please elaborate? How do I associate groups with my controller? (And what are groups, in this context?)

Separately…it seems to be possible to set the LEDs on the buttons from ZWaveJS2MQTT, under the “Indicator Value” setting. It appears to be a binary representation… a value of 1 = first LED, 2 = second LED (because 2 is 01 in binary), 3 = first and second LED (11), 4 = third LED (001), etc. Unfortunately this doesn’t seem to be exposed to Home Assistant in any way.

OK I figured out how to associate groups to your controller. Go to the keypad node in ZWaveJS2MQTT control panel, then go to the “Groups” tab. See screenshots below. NodeID_1 is my Z-wave controller.

After doing this for all 5 groups, I now get events under zwave_js_value_notification…but I’m getting TWO identical events for every button press. :triumph:

1 Like

You can use the zwave_js.set_value service to set them.

Has anyone had any luck detecting the “power” button press on this controller?

Did you have any luck getting the buttons to “deactivate” after they are pressed, so they can be pressed again? I cannot figure this out.

I did an automation that changes the value of each button to zero a couple of seconds after they are pressed. The way it works for me, a press of a button activate a scene, and I have a scene that turns everything off

Well yes, of course use an automation… sorry I should have been more specific that I couldn’t figure out how to turn off that light/reset the button. I know the zwave_js.set_value service is available, but I couldn’t figure out the right parameters.

I figured it out digging around in the debug information for the device in the ZWave JS control panel. For posterity, if you want to turn off all the LEDs on this controller, call zwave_js.set_value with these parameters:

{
    "property": "value",
    "value": 0,
    "command_class": "135"
}
1 Like

Has anyone figured out how to deactivate a scene without clearing the status light?

I see this message every time I deactivate a scene:

INFO ZWAVE: Node 19: value updated: 32-0-currentValue 0 => 0

but I can’t find it in HA anywhere. It doesn’t seem to trigger an event. I’m wondering if zwave_js_value_updated can be used, but I’m not sure how to enable it.