From af4eaed5ed42d7fa9bea75bc3c43a635edab2082 Mon Sep 17 00:00:00 2001 From: Markus Adrario Date: Wed, 3 Jun 2026 19:34:56 +0000 Subject: [PATCH] Homee: Use constants for cover states for readability (#172840) --- homeassistant/components/homee/cover.py | 64 +++++++++++++++++-------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/homee/cover.py b/homeassistant/components/homee/cover.py index 6614348e4d9b..4b56c3a7fd9b 100644 --- a/homeassistant/components/homee/cover.py +++ b/homeassistant/components/homee/cover.py @@ -1,5 +1,6 @@ """The homee cover platform.""" +from enum import Enum import logging from typing import TYPE_CHECKING, Any, cast @@ -24,12 +25,6 @@ _LOGGER = logging.getLogger(__name__) PARALLEL_UPDATES = 0 -OPEN_CLOSE_ATTRIBUTES = [ - AttributeType.OPEN_CLOSE, - AttributeType.SLAT_ROTATION_IMPULSE, - AttributeType.UP_DOWN, -] -POSITION_ATTRIBUTES = [AttributeType.POSITION, AttributeType.SHUTTER_SLAT_POSITION] COVER_DEVICE_PROFILES = { NodeProfile.GARAGE_DOOR_OPERATOR: CoverDeviceClass.GARAGE, NodeProfile.ENTRANCE_GATE_OPERATOR: CoverDeviceClass.GATE, @@ -43,6 +38,23 @@ IS_CLOSED_ATTRIBUTES = [ ] +class HomeeCoverState(float, Enum): + """Open/closed states for covers in homee.""" + + OPEN = 0.0 + CLOSED = 1.0 + STOPPED = 2.0 + OPENING = 3.0 + CLOSING = 4.0 + + +class HomeeSlatState(float, Enum): + """Slat states for covers in homee.""" + + CLOSED = 1.0 + OPEN = 2.0 + + def get_open_close_attribute(node: HomeeNode) -> HomeeAttribute | None: """Return the attribute used for opening/closing the cover.""" # We assume, that no device has UP_DOWN and OPEN_CLOSE, but only one of them. @@ -187,9 +199,9 @@ class HomeeCover(HomeeNodeEntity, CoverEntity): """Return the opening status of the cover.""" if self._open_close_attribute is not None: return ( - self._open_close_attribute.get_value() == 3 + self._open_close_attribute.get_value() == HomeeCoverState.OPENING if not self._open_close_attribute.is_reversed - else self._open_close_attribute.get_value() == 4 + else self._open_close_attribute.get_value() == HomeeCoverState.CLOSING ) return None @@ -199,9 +211,9 @@ class HomeeCover(HomeeNodeEntity, CoverEntity): """Return the closing status of the cover.""" if self._open_close_attribute is not None: return ( - self._open_close_attribute.get_value() == 4 + self._open_close_attribute.get_value() == HomeeCoverState.CLOSING if not self._open_close_attribute.is_reversed - else self._open_close_attribute.get_value() == 3 + else self._open_close_attribute.get_value() == HomeeCoverState.OPENING ) return None @@ -216,9 +228,9 @@ class HomeeCover(HomeeNodeEntity, CoverEntity): if self._open_close_attribute is not None: if not self._open_close_attribute.is_reversed: - return self._open_close_attribute.get_value() == 1 + return self._open_close_attribute.get_value() == HomeeCoverState.CLOSED - return self._open_close_attribute.get_value() == 0 + return self._open_close_attribute.get_value() == HomeeCoverState.OPEN # If none of the above is present, it will be a slat only cover. attribute = self._node.get_attribute_by_type( @@ -235,17 +247,25 @@ class HomeeCover(HomeeNodeEntity, CoverEntity): """Open the cover.""" assert self._open_close_attribute is not None if not self._open_close_attribute.is_reversed: - await self.async_set_homee_value(self._open_close_attribute, 0) + await self.async_set_homee_value( + self._open_close_attribute, HomeeCoverState.OPEN + ) else: - await self.async_set_homee_value(self._open_close_attribute, 1) + await self.async_set_homee_value( + self._open_close_attribute, HomeeCoverState.CLOSED + ) async def async_close_cover(self, **kwargs: Any) -> None: """Close cover.""" assert self._open_close_attribute is not None if not self._open_close_attribute.is_reversed: - await self.async_set_homee_value(self._open_close_attribute, 1) + await self.async_set_homee_value( + self._open_close_attribute, HomeeCoverState.CLOSED + ) else: - await self.async_set_homee_value(self._open_close_attribute, 0) + await self.async_set_homee_value( + self._open_close_attribute, HomeeCoverState.OPEN + ) async def async_set_cover_position(self, **kwargs: Any) -> None: """Move the cover to a specific position.""" @@ -265,7 +285,9 @@ class HomeeCover(HomeeNodeEntity, CoverEntity): async def async_stop_cover(self, **kwargs: Any) -> None: """Stop the cover.""" if self._open_close_attribute is not None: - await self.async_set_homee_value(self._open_close_attribute, 2) + await self.async_set_homee_value( + self._open_close_attribute, HomeeCoverState.STOPPED + ) async def async_open_cover_tilt(self, **kwargs: Any) -> None: """Open the cover tilt.""" @@ -275,9 +297,9 @@ class HomeeCover(HomeeNodeEntity, CoverEntity): ) ) is not None: if not slat_attribute.is_reversed: - await self.async_set_homee_value(slat_attribute, 2) + await self.async_set_homee_value(slat_attribute, HomeeSlatState.OPEN) else: - await self.async_set_homee_value(slat_attribute, 1) + await self.async_set_homee_value(slat_attribute, HomeeSlatState.CLOSED) async def async_close_cover_tilt(self, **kwargs: Any) -> None: """Close the cover tilt.""" @@ -287,9 +309,9 @@ class HomeeCover(HomeeNodeEntity, CoverEntity): ) ) is not None: if not slat_attribute.is_reversed: - await self.async_set_homee_value(slat_attribute, 1) + await self.async_set_homee_value(slat_attribute, HomeeSlatState.CLOSED) else: - await self.async_set_homee_value(slat_attribute, 2) + await self.async_set_homee_value(slat_attribute, HomeeSlatState.OPEN) async def async_set_cover_tilt_position(self, **kwargs: Any) -> None: """Move the cover tilt to a specific position."""