Fix zwave_js cover control for Up/Down and Open/Close (#45965)

* Fix issue with control of cover when the target value is Up/Down instead of Open/Close

* Adjust open/close/stop cover control to account for no Open/Up or Close/Down targets

* Revert back to using values of 0/99 to close/open a cover since it is supported by all covers

* Replace RELEASE_BUTTON with False and remove unused PRESS_BUTTON in zwave_js cover
This commit is contained in:
Nathan Spencer 2021-02-05 02:48:47 -07:00 committed by GitHub
parent 2b17ba1dc4
commit 92886cafe9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 21 deletions

View File

@ -21,8 +21,6 @@ from .entity import ZWaveBaseEntity
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
SUPPORT_GARAGE = SUPPORT_OPEN | SUPPORT_CLOSE SUPPORT_GARAGE = SUPPORT_OPEN | SUPPORT_CLOSE
PRESS_BUTTON = True
RELEASE_BUTTON = False
async def async_setup_entry( async def async_setup_entry(
@ -79,17 +77,19 @@ class ZWaveCover(ZWaveBaseEntity, CoverEntity):
async def async_open_cover(self, **kwargs: Any) -> None: async def async_open_cover(self, **kwargs: Any) -> None:
"""Open the cover.""" """Open the cover."""
target_value = self.get_zwave_value("Open") target_value = self.get_zwave_value("targetValue")
await self.info.node.async_set_value(target_value, PRESS_BUTTON) await self.info.node.async_set_value(target_value, 99)
async def async_close_cover(self, **kwargs: Any) -> None: async def async_close_cover(self, **kwargs: Any) -> None:
"""Close cover.""" """Close cover."""
target_value = self.get_zwave_value("Close") target_value = self.get_zwave_value("targetValue")
await self.info.node.async_set_value(target_value, PRESS_BUTTON) await self.info.node.async_set_value(target_value, 0)
async def async_stop_cover(self, **kwargs: Any) -> None: async def async_stop_cover(self, **kwargs: Any) -> None:
"""Stop cover.""" """Stop cover."""
target_value = self.get_zwave_value("Open") target_value = self.get_zwave_value("Open") or self.get_zwave_value("Up")
await self.info.node.async_set_value(target_value, RELEASE_BUTTON) if target_value:
target_value = self.get_zwave_value("Close") await self.info.node.async_set_value(target_value, False)
await self.info.node.async_set_value(target_value, RELEASE_BUTTON) target_value = self.get_zwave_value("Close") or self.get_zwave_value("Down")
if target_value:
await self.info.node.async_set_value(target_value, False)

View File

@ -95,14 +95,16 @@ async def test_cover(hass, client, chain_actuator_zws12, integration):
"commandClassName": "Multilevel Switch", "commandClassName": "Multilevel Switch",
"commandClass": 38, "commandClass": 38,
"endpoint": 0, "endpoint": 0,
"property": "Open", "property": "targetValue",
"propertyName": "Open", "propertyName": "targetValue",
"metadata": { "metadata": {
"type": "boolean", "label": "Target value",
"max": 99,
"min": 0,
"type": "number",
"readable": True, "readable": True,
"writeable": True, "writeable": True,
"label": "Perform a level change (Open)", "label": "Target value",
"ccSpecific": {"switchType": 3},
}, },
} }
assert args["value"] assert args["value"]
@ -194,17 +196,19 @@ async def test_cover(hass, client, chain_actuator_zws12, integration):
"commandClassName": "Multilevel Switch", "commandClassName": "Multilevel Switch",
"commandClass": 38, "commandClass": 38,
"endpoint": 0, "endpoint": 0,
"property": "Close", "property": "targetValue",
"propertyName": "Close", "propertyName": "targetValue",
"metadata": { "metadata": {
"type": "boolean", "label": "Target value",
"max": 99,
"min": 0,
"type": "number",
"readable": True, "readable": True,
"writeable": True, "writeable": True,
"label": "Perform a level change (Close)", "label": "Target value",
"ccSpecific": {"switchType": 3},
}, },
} }
assert args["value"] assert args["value"] == 0
client.async_send_command.reset_mock() client.async_send_command.reset_mock()