Z-Wave (Aspire RF) Compatibility

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.