diff --git a/blebox_uniapi/cover.py b/blebox_uniapi/cover.py index 794a328..553001c 100644 --- a/blebox_uniapi/cover.py +++ b/blebox_uniapi/cover.py @@ -118,6 +118,11 @@ def read_cover_type( def min_position(self) -> int: return 0 + @property + def is_position_inverted(self) -> bool: + # shutterBox/gateController: % closed (0=open, 100=closed), inverted vs HA convention + return True + @property def is_slider(self) -> bool: return True @@ -176,6 +181,11 @@ def read_cover_type( class GateBox(Gate): _control_type: Optional[GateBoxControlType] + @property + def is_position_inverted(self) -> bool: + # gateBox: (0=closed, 100=open), matches HA convention + return False + @property def is_slider(self) -> bool: return False @@ -189,8 +199,6 @@ def close_command(self) -> str: return "primary" def read_state(self, alias: str, raw_value: Any, product: "Box") -> int: - # Reinterpret state to match shutterBox - # NOTE: shutterBox is inverted (0 == closed), gateBox isn't current = raw_value("position") desired = raw_value("desired") @@ -329,6 +337,10 @@ def is_slider(self) -> Any: def has_tilt(self) -> bool: return self._attributes.has_tilt + @property + def is_position_inverted(self) -> bool: + return self._attributes.is_position_inverted + @property def has_stop(self) -> bool: return self._has_stop diff --git a/tests/test_cover.py b/tests/test_cover.py index c3c43fc..ecffcf1 100644 --- a/tests/test_cover.py +++ b/tests/test_cover.py @@ -242,6 +242,7 @@ async def test_init(self, aioclient_mock): assert entity.supported_features & SUPPORT_SET_POSITION assert entity.current_cover_position is None + assert entity._feature.is_position_inverted is True # TODO: tilt # assert entity.supported_features & SUPPORT_SET_TILT_POSITION @@ -385,6 +386,7 @@ async def test_init(self, aioclient_mock): assert not entity.supported_features & SUPPORT_SET_POSITION assert entity.current_cover_position is None + assert entity._feature.is_position_inverted is False self.assert_state(entity, None) async def test_device_info(self, aioclient_mock): @@ -561,6 +563,7 @@ async def test_init(self, aioclient_mock): assert entity.supported_features & SUPPORT_OPEN assert entity.supported_features & SUPPORT_CLOSE assert entity.current_cover_position is None + assert entity._feature.is_position_inverted is False self.assert_state(entity, None) async def test_device_info(self, aioclient_mock): @@ -693,6 +696,7 @@ async def test_init(self, aioclient_mock): assert entity.supported_features & SUPPORT_SET_POSITION assert entity.current_cover_position is None + assert entity._feature.is_position_inverted is True self.assert_state(entity, None) async def test_device_info(self, aioclient_mock):