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
pull/46061/head^2
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__)
SUPPORT_GARAGE = SUPPORT_OPEN | SUPPORT_CLOSE
PRESS_BUTTON = True
RELEASE_BUTTON = False
async def async_setup_entry(
@ -79,17 +77,19 @@ class ZWaveCover(ZWaveBaseEntity, CoverEntity):
async def async_open_cover(self, **kwargs: Any) -> None:
"""Open the cover."""
target_value = self.get_zwave_value("Open")
await self.info.node.async_set_value(target_value, PRESS_BUTTON)
target_value = self.get_zwave_value("targetValue")
await self.info.node.async_set_value(target_value, 99)
async def async_close_cover(self, **kwargs: Any) -> None:
"""Close cover."""
target_value = self.get_zwave_value("Close")
await self.info.node.async_set_value(target_value, PRESS_BUTTON)
target_value = self.get_zwave_value("targetValue")
await self.info.node.async_set_value(target_value, 0)
async def async_stop_cover(self, **kwargs: Any) -> None:
"""Stop cover."""
target_value = self.get_zwave_value("Open")
await self.info.node.async_set_value(target_value, RELEASE_BUTTON)
target_value = self.get_zwave_value("Close")
await self.info.node.async_set_value(target_value, RELEASE_BUTTON)
target_value = self.get_zwave_value("Open") or self.get_zwave_value("Up")
if target_value:
await self.info.node.async_set_value(target_value, False)
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",
"commandClass": 38,
"endpoint": 0,
"property": "Open",
"propertyName": "Open",
"property": "targetValue",
"propertyName": "targetValue",
"metadata": {
"type": "boolean",
"label": "Target value",
"max": 99,
"min": 0,
"type": "number",
"readable": True,
"writeable": True,
"label": "Perform a level change (Open)",
"ccSpecific": {"switchType": 3},
"label": "Target value",
},
}
assert args["value"]
@ -194,17 +196,19 @@ async def test_cover(hass, client, chain_actuator_zws12, integration):
"commandClassName": "Multilevel Switch",
"commandClass": 38,
"endpoint": 0,
"property": "Close",
"propertyName": "Close",
"property": "targetValue",
"propertyName": "targetValue",
"metadata": {
"type": "boolean",
"label": "Target value",
"max": 99,
"min": 0,
"type": "number",
"readable": True,
"writeable": True,
"label": "Perform a level change (Close)",
"ccSpecific": {"switchType": 3},
"label": "Target value",
},
}
assert args["value"]
assert args["value"] == 0
client.async_send_command.reset_mock()