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:
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user