I am trying out a product called Aspire RF, specifically the RF9542-ZWS. This is a “slave” switch designed to integrate with the matching “master” switch but it talks over RF. I was hoping to simply link it to HA and do my own thing with it. But when I look at the logs I’m not really clear how to interpret the messages. This supports on/off and you can set the dim level too. I think the problem is that I need to modify my zwcfg.xml file so it knows it is a light switch and not related to an alarm system?
When I run ozwcp I see this when I turn the switch off and on (level is 0 or 99 and I confirmed the set level on the switch affects the “on” level of 99 to make it lower).
2016-10-03 21:01:06.397 Info, Node004, Received Basic set from node 4: level=0. Sending event notification.
2016-10-03 21:01:06.397 Info, Notification: Node Event Home fe3de09a Node 4 Status 0 Genre basic Class NO OPERATION Instance 1 Index 0 Type bool
2016-10-03 21:01:14.497 Info, Node004, Received Basic set from node 4: level=99. Sending event notification.
2016-10-03 21:01:14.497 Info, Notification: Node Event Home fe3de09a Node 4 Status 99 Genre basic Class NO OPERATION Instance 1 Index 0 Type bool
But the home assistant logs don’t show the level at all; see below with me turning the switch ON, OFF, ON, and OFF.
INFO:homeassistant.core:Bus:Handling <Event zwave.node_event[L]: object_id=game_room_remote_4, basic_level=99> INFO:homeassistant.core:Bus:Handling <Event state_changed[L]: new_state=<state sensor.game_room_remote_alarm_type_4=116; location=game_room, node_id=4, friendly_name=game_room_remote Alarm Type @ 2016-10-02T19:09:35.051752-04:00>, entity_id=sensor.game_room_remote_alarm_type_4, old_state=<state sensor.game_room_remote_alarm_type_4=118; location=game_room, node_id=4, friendly_name=game_room_remote Alarm Type @ 2016-10-02T19:09:26.319776-04:00>>
INFO:homeassistant.core:Bus:Handling <Event zwave.node_event[L]: object_id=game_room_remote_4, basic_level=0> INFO:homeassistant.core:Bus:Handling <Event state_changed[L]: new_state=<state sensor.game_room_remote_alarm_type_4=121; location=game_room, node_id=4, friendly_name=game_room_remote Alarm Type @ 2016-10-02T19:09:43.381768-04:00>, entity_id=sensor.game_room_remote_alarm_type_4, old_state=<state sensor.game_room_remote_alarm_type_4=116; location=game_room, node_id=4, friendly_name=game_room_remote Alarm Type @ 2016-10-02T19:09:35.051752-04:00>>
INFO:homeassistant.core:Bus:Handling <Event zwave.node_event[L]: object_id=game_room_remote_4, basic_level=99> INFO:homeassistant.core:Bus:Handling <Event state_changed[L]: new_state=<state sensor.game_room_remote_alarm_type_4=127; location=game_room, node_id=4, friendly_name=game_room_remote Alarm Type @ 2016-10-02T19:09:50.221869-04:00>, entity_id=sensor.game_room_remote_alarm_type_4, old_state=<state sensor.game_room_remote_alarm_type_4=121; location=game_room, node_id=4, friendly_name=game_room_remote Alarm Type @ 2016-10-02T19:09:43.381768-04:00>>
INFO:homeassistant.core:Bus:Handling <Event zwave.node_event[L]: object_id=game_room_remote_4, basic_level=0> INFO:homeassistant.core:Bus:Handling <Event state_changed[L]: new_state=<state sensor.game_room_remote_alarm_type_4=125; location=game_room, node_id=4, friendly_name=game_room_remote Alarm Type @ 2016-10-02T19:09:55.152774-04:00>, entity_id=sensor.game_room_remote_alarm_type_4, old_state=<state sensor.game_room_remote_alarm_type_4=127; location=game_room, node_id=4, friendly_name=game_room_remote Alarm Type @ 2016-10-02T19:09:50.221869-04:00>>
Here is the relevant portion of my zwcfg.xml file:
<Node id="4" name="game_room_remote" location="game_room" basic="4" generic="18" specific="2" type="Multilevel Remote Switch" listening="true" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
<Manufacturer id="1a" name="Cooper">
<Product type="4441" id="0" name="Unknown: type=4441, id=0000" />
</Manufacturer>
<CommandClasses>
<CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" after_mark="true" mapping="38">
<Instance index="1" />
</CommandClass>
<CommandClass id="38" name="COMMAND_CLASS_SWITCH_MULTILEVEL" version="2" after_mark="true" innif="true">
<Instance index="1" />
<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" />
</CommandClass>
<CommandClass id="39" name="COMMAND_CLASS_SWITCH_ALL" version="1" request_flags="4" innif="true">
<Instance index="1" />
<Value type="list" genre="system" instance="1" index="0" label="Switch All" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="3" size="1">
<Item label="Disabled" value="0" />
<Item label="Off Enabled" value="1" />
<Item label="On Enabled" value="2" />
<Item label="On and Off Enabled" value="255" />
</Value>
</CommandClass>
<CommandClass id="43" name="COMMAND_CLASS_SCENE_ACTIVATION" version="1" request_flags="4" innif="true">
<Instance index="1" />
</CommandClass>
<CommandClass id="112" name="COMMAND_CLASS_CONFIGURATION" version="1" request_flags="4" innif="true">
<Instance index="1" />
</CommandClass>
<CommandClass id="113" name="COMMAND_CLASS_ALARM" version="1" request_flags="2" innif="true">
<Instance index="1" />
<Value type="byte" genre="user" instance="1" index="0" label="Alarm Type" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="116" />
<Value type="byte" genre="user" instance="1" index="1" label="Alarm Level" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
</CommandClass>
<CommandClass id="114" name="COMMAND_CLASS_MANUFACTURER_SPECIFIC" version="1" request_flags="4" innif="true">
<Instance index="1" />
</CommandClass>
<CommandClass id="115" name="COMMAND_CLASS_POWERLEVEL" version="1" request_flags="4" innif="true">
<Instance index="1" />
<Value type="list" genre="system" instance="1" index="0" label="Powerlevel" units="dB" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
<Item label="Normal" value="0" />
<Item label="-1dB" value="1" />
<Item label="-2dB" value="2" />
<Item label="-3dB" value="3" />
<Item label="-4dB" value="4" />
<Item label="-5dB" value="5" />
<Item label="-6dB" value="6" />
<Item label="-7dB" value="7" />
<Item label="-8dB" value="8" />
<Item label="-9dB" value="9" />
</Value>
<Value type="byte" genre="system" instance="1" index="1" label="Timeout" units="seconds" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
<Value type="button" genre="system" instance="1" index="2" label="Set Powerlevel" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
<Value type="byte" genre="system" instance="1" index="3" label="Test Node" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
<Value type="list" genre="system" instance="1" index="4" label="Test Powerlevel" units="dB" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
<Item label="Normal" value="0" />
<Item label="-1dB" value="1" />
<Item label="-2dB" value="2" />
<Item label="-3dB" value="3" />
<Item label="-4dB" value="4" />
<Item label="-5dB" value="5" />
<Item label="-6dB" value="6" />
<Item label="-7dB" value="7" />
<Item label="-8dB" value="8" />
<Item label="-9dB" value="9" />
</Value>
<Value type="short" genre="system" instance="1" index="5" label="Frame Count" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="-32768" max="32767" value="0" />
<Value type="button" genre="system" instance="1" index="6" label="Test" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
<Value type="button" genre="system" instance="1" index="7" label="Report" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
<Value type="list" genre="system" instance="1" index="8" label="Test Status" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
<Item label="Failed" value="0" />
<Item label="Success" value="1" />
<Item label="In Progress" value="2" />
</Value>
<Value type="short" genre="system" instance="1" index="9" label="Acked Frames" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="-32768" max="32767" value="0" />
</CommandClass>
<CommandClass id="117" name="COMMAND_CLASS_PROTECTION" version="1" request_flags="4" innif="true">
<Instance index="1" />
<Value type="list" genre="system" instance="1" index="0" label="Protection" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" vindex="0" size="1">
<Item label="Unprotected" value="0" />
<Item label="Protection by Sequence" value="1" />
<Item label="No Operation Possible" value="2" />
</Value>
</CommandClass>
<CommandClass id="119" name="COMMAND_CLASS_NODE_NAMING" version="1" request_flags="4" innif="true">
<Instance index="1" />
</CommandClass>
<CommandClass id="133" name="COMMAND_CLASS_ASSOCIATION" version="1" request_flags="4" innif="true">
<Instance index="1" />
<Associations num_groups="1">
<Group index="1" max_associations="5" label="Group 1" auto="true">
<Node id="1" />
</Group>
</Associations>
</CommandClass>
<CommandClass id="134" name="COMMAND_CLASS_VERSION" version="1" request_flags="4" innif="true">
<Instance index="1" />
<Value type="string" genre="system" instance="1" index="0" label="Library Version" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="3" />
<Value type="string" genre="system" instance="1" index="1" label="Protocol Version" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="3.67" />
<Value type="string" genre="system" instance="1" index="2" label="Application Version" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="3.17" />
</CommandClass>
<CommandClass id="135" name="COMMAND_CLASS_INDICATOR" version="1" request_flags="4" innif="true">
<Instance index="1" />
<Value type="byte" genre="user" instance="1" index="0" label="Indicator" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="0" />
</CommandClass>
</CommandClasses>
</Node>
Update: I trimmed the XML and only left COMMAND_CLASS_BASIC:
<Node id="4" name="game_room_remote" location="game_room" basic="4" generic="18" specific="2" type="Multilevel Remote Switch" listening="true" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
<Manufacturer id="1a" name="Cooper">
<Product type="4441" id="0" name="Unknown: type=4441, id=0000" />
</Manufacturer>
<CommandClasses>
<CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" after_mark="true" mapping="38">
<Instance index="1" />
</CommandClass>
</CommandClasses>
</Node>
And I was able to get this to work:
automation 1:
alias: Test switch on
trigger:
platform: event
event_type: zwave.node_event
event_data:
object_id: game_room_remote_4
basic_level: 99
action:
service: light.turn_on
entity_id: light.miniatures
automation 2:
alias: Test switch off
trigger:
platform: event
event_type: zwave.node_event
event_data:
object_id: game_room_remote_4
basic_level: 0
action:
service: light.turn_off
entity_id: light.miniatures
Unfortunately this doesn’t support any dimming. I’d love something like this where I can basically pass the basic_level from 0 to 99 into the light to adjust how bright it is.