1
0
mirror of https://github.com/home-assistant/core.git synced 2026-07-08 23:34:22 +01:00

Homee: Use constants for cover states for readability (#172840)

This commit is contained in:
Markus Adrario
2026-06-03 19:34:56 +00:00
committed by GitHub
parent dba09c334a
commit af4eaed5ed
+43 -21
View File
@@ -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."""