Cover entity for an insert module roller shutter not fully functioning

Hey there,

I am quite new to Home Assistant, but I’m loving it already. However I have trouble controlling my roller shutter controllers entirely. For starters here’s my setup:

HASS 0.84.6 on a RasPi
ZWave-me UZB1 stick
Philio PAN-08 roller shutter controllers

I now have 5 of the controllers connected and they communicate and work flawlessly on a basic level, meaning I can roll them up or down completely using the close_cover or open_cover commands and I can automate the covers using these two commands.
I also have a two button switches mounted on the walls to manually control the covers.

So what’s the problem?

  • Using the switch on the wall I can press upwards or downwards and then cancel the movement pressing the button for the opposite direction. I cannot do that from HASS. If I open the _level entity details I see an upward and downward arrow and a stop button. If rolled up I can roll down the cover, but during the process I cannot stop it. The stop button doesn’t do anything and the upward arrow button is disabled until the cover has finished rolling down.
    In addition I cannot set a specific level for the cover, for example setting it to 60% closed. I tried doing that using automations and the service zwave.set_node_value. The automation simply does nothing. The service call fails, because it doesn’t like the value_id. Error messages like this one appear:

    Error handling message: {‘type’: ‘call_service’, ‘domain’: ‘zwave’, ‘service’: ‘set_node_value’, ‘service_data’: {‘node_id’: ‘4’, ‘value_id’: 72057594109853700, ‘value’: 50}, ‘id’: 16}
    […]
    KeyError: 1

According to the manual (download here at Insert Modules - PAN08) even the basic set command should be able to receive a value between 0 and 100 to set a specific cover level. Other commands are supported as well.

PAN08 can accept Basic Set Command which value is either (0x00) Bottom or
Top (0x63/0xFF) or (0x01-0x62) the position between TOP and Bottom. Other
value (0x64-0xFE) is not acceptable.

I looked at the Open ZWave device file, but I only see configuration values for the device. I am not sure if the commands need to be added there (and if so how to do that) or if they conform to some sort of default behaviour and should just work.

I’d love to be able to stop the covers midway in opening or closing using the HASS frontend, but more importantly I really need to set a specific level for the covers to be able to automate them further.

Any help on how to achieve this would be deeply appreciated. I’m looking for other ways to debug this, opinions and hints on extending the device config to Open ZWave or anything helping me solve this.

Thank you!

Edit:
I found the nodes in the zwcfg_xxx.xml file. Here’s one of them. But I still cannot make a connection to the commands documented in the device manual.

	<Node id="2" name="" location="" basic="4" generic="17" specific="7" roletype="5" devicetype="6656" nodetype="0" type="Motor Control Class C" listening="true" frequentListening="false" beaming="true" routing="true" max_baud_rate="40000" version="4" query_stage="Complete">
	<Manufacturer id="13c" name="Philio Technology Corporation">
		<Product type="1" id="15" name="PAN08-1 In Wall Roller Shutter Controller" />
	</Manufacturer>
	<CommandClasses>
		<CommandClass id="32" name="COMMAND_CLASS_BASIC" version="1" request_flags="4" mapping="38">
			<Instance index="1" />
		</CommandClass>
		<CommandClass id="37" name="COMMAND_CLASS_SWITCH_BINARY" version="1" request_flags="4" innif="true">
			<Instance index="1" />
			<Value type="bool" genre="user" instance="1" index="0" label="Switch" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="True" />
		</CommandClass>
		<CommandClass id="38" name="COMMAND_CLASS_SWITCH_MULTILEVEL" version="3" 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="99" />
			<Value type="button" genre="user" instance="1" index="1" label="Up" 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="Down" 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="system" instance="1" index="5" label="Dimming Duration" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="255" />
			<Value type="byte" genre="user" instance="1" index="6" label="Step Size" 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="7" label="Inc" 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="8" label="Dec" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
		</CommandClass>
		<CommandClass id="43" name="COMMAND_CLASS_SCENE_ACTIVATION" version="1" request_flags="4" innif="true">
			<Instance index="1" />
		</CommandClass>
		<CommandClass id="50" name="COMMAND_CLASS_METER" version="3" request_flags="2" innif="true">
			<Instance index="1" />
			<Value type="decimal" genre="user" instance="1" index="0" label="Energy" units="kWh" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.00" />
			<Value type="decimal" genre="user" instance="1" index="1" label="Previous Reading" units="kWh" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.00" />
			<Value type="int" genre="user" instance="1" index="2" label="Interval" units="seconds" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="-2147483648" max="2147483647" value="1164" />
			<Value type="decimal" genre="user" instance="1" index="8" label="Power" units="W" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.2" />
			<Value type="decimal" genre="user" instance="1" index="16" label="Voltage" units="V" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="235.5" />
			<Value type="decimal" genre="user" instance="1" index="20" label="Current" units="A" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.00" />
			<Value type="decimal" genre="user" instance="1" index="24" label="Power Factor" units="Power Factor" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="0.00" />
			<Value type="bool" genre="user" instance="1" index="32" label="Exporting" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="0" value="False" />
			<Value type="button" genre="system" instance="1" index="33" label="Reset" units="" read_only="false" write_only="true" verify_changes="false" poll_intensity="0" min="0" max="0" />
		</CommandClass>
		<CommandClass id="90" name="COMMAND_CLASS_DEVICE_RESET_LOCALLY" version="1" request_flags="4" innif="true">
			<Instance index="1" />
		</CommandClass>
		<CommandClass id="94" name="COMMAND_CLASS_ZWAVEPLUS_INFO" version="1" request_flags="4" innif="true">
			<Instance index="1" />
			<Value type="byte" genre="system" instance="1" index="0" label="ZWave+ Version" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="0" max="255" value="1" />
			<Value type="short" genre="system" instance="1" index="1" label="InstallerIcon" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="-32768" max="32767" value="6656" />
			<Value type="short" genre="system" instance="1" index="2" label="UserIcon" units="" read_only="true" write_only="false" verify_changes="false" poll_intensity="0" min="-32768" max="32767" value="6656" />
		</CommandClass>
		<CommandClass id="112" name="COMMAND_CLASS_CONFIGURATION" version="1" request_flags="4" innif="true">
			<Instance index="1" />
			<Value type="short" genre="config" instance="1" index="1" label="Watt meter report period" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="1" max="32767" value="720">
				<Help>Watt Meter Report Period. Unit: 5 seconds.</Help>
			</Value>
			<Value type="short" genre="config" instance="1" index="2" label="kWh meter report period" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="1" max="32767" value="6">
				<Help>kWH Meter Report Period. Unit: 10 minutes.</Help>
			</Value>
			<Value type="short" genre="config" instance="1" index="3" label="Threshold of Watt for Load Caution" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="10" max="1100" value="1100">
				<Help>Threshold of Watt for Load Caution. Unit: 1 watt</Help>
			</Value>
			<Value type="short" genre="config" instance="1" index="4" label="Threshold of kWh for Load Caution" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="1" max="10000" value="10000">
				<Help>Threshold of kWH for Load Caution. Unit: 1 kWH</Help>
			</Value>
			<Value type="byte" genre="config" instance="1" index="5" label="External switch type" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="1" max="2" value="1">
				<Help>External switch type: 1-&gt; One Push button, 2-&gt;Two Push button</Help>
			</Value>
			<Value type="byte" genre="config" instance="1" index="6" label="Level report mode" units="" read_only="false" write_only="false" verify_changes="false" poll_intensity="0" min="1" max="2" value="1">
				<Help>Level report mode: 1-&gt; Report destination level in 5s, 2-&gt; Report 10 percent level while running</Help>
			</Value>
		</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="0" />
			<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="133" name="COMMAND_CLASS_ASSOCIATION" version="1" request_flags="4" innif="true">
			<Instance index="1" />
			<Associations num_groups="1">
				<Group index="1" max_associations="1" label="Lifeline" 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="4.38" />
			<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="1.05" />
		</CommandClass>
	</CommandClasses>
</Node>

Okay, I solved it by chance. I figured out by tinkering that two of the covers actually were able to do the stuff above. After re-reading everything several times I stumbled upon the movement calibration of the roller shutter. I must have done that for the working blinds and missed it for the others. After calibration everything is working as expected. :ok_hand: