From 7164d6e2fd57af2c91bfe1c547fd743d317e0f8e Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 21 Jan 2025 18:52:53 +0100 Subject: [PATCH] Slimming stuff down --- src/core/entity.py | 72 ++++++++++----------------------------------- src/core/pattern.py | 42 ++++++++++++++++++++++++++ src/core/room.py | 7 ----- 3 files changed, 58 insertions(+), 63 deletions(-) create mode 100644 src/core/pattern.py delete mode 100644 src/core/room.py diff --git a/src/core/entity.py b/src/core/entity.py index a890012..d57262a 100644 --- a/src/core/entity.py +++ b/src/core/entity.py @@ -8,22 +8,22 @@ class EntityOpNotSupportedError(Exception): class Entity: - def __init__( - self, - *, - id: str, - name: str, - room: str | None, - device_type: str, - groups: list[str] = [], - update_period: float = 1, - ) -> None: + def __init__(self, *, id: str, name: str, category: str) -> None: self._id = id self._name = name - self._room = room - self._device_type = device_type.strip().lower() - self._groups = set(groups) - self._update_period: float = update_period + self._category = category.strip().lower() + + self._on: bool = False + self._color: Color = Color() + self._message_queue: list[str] = [] + self._pattern + + def __str__(self) -> str: + return f"{self.name} [{self.id}, {self.category}]" + + async def update(self): + """Implements an entity specific update operation to get the latest state.""" + raise EntityOpNotSupportedError("update") @property def id(self) -> str: @@ -34,17 +34,8 @@ class Entity: return self._name @property - def room(self) -> str | None: - """Returns the room of the entity. Meta entities, like groups and rooms, are usually not part of rooms and likely return None.""" - return self._room - - @property - def device_type(self) -> str: - return self._device_type - - @property - def groups(self) -> set[str]: - return self._groups + def category(self) -> str: + return self._category @property def update_period(self) -> float: @@ -73,34 +64,3 @@ class Entity: @property def transition_time(self) -> float: raise EntityOpNotSupportedError("transition_time") - - def __str__(self) -> str: - return f"{self.name} [{self.id}, type {self.device_type}, room {self.room}, in {len(self.groups)} groups]" - - async def update(self): - """Implements an entity specific update operation to get the latest state.""" - raise EntityOpNotSupportedError("update") - - async def turn_on(self): - """Turns entity on, if action supported.""" - raise EntityOpNotSupportedError("turn_on") - - async def turn_off(self): - """Turns entity on, if action supported.""" - raise EntityOpNotSupportedError("turn_off") - - async def set_brightness(self, brightness: float): - """Does not turn an entity on if brightness > 0 and entity turned off.""" - raise EntityOpNotSupportedError("set_brightness") - - async def set_hue(self, hue: float): - raise EntityOpNotSupportedError("set_hue") - - async def set_saturation(self, saturation: float): - raise EntityOpNotSupportedError("set_saturation") - - async def set_color(self, color: Color): - raise EntityOpNotSupportedError("set_color") - - async def set_transition_duration(self, seconds: float): - raise EntityOpNotSupportedError("set_transition_duration") diff --git a/src/core/pattern.py b/src/core/pattern.py new file mode 100644 index 0000000..7629856 --- /dev/null +++ b/src/core/pattern.py @@ -0,0 +1,42 @@ +class Pattern: + def __init__( + self, *, sequence: str = "01", active_ms: int = 1000, inactive_ms: int = 1000 + ): + self._sequence = None + self._active_ms = None + self._inactive_ms = None + self.sequence = sequence # Use the setter for validation + self.active_ms = active_ms # Use the setter for validation + self.inactive_ms = inactive_ms # Use the setter for validation + + @property + def sequence(self) -> str: + return self._sequence + + @sequence.setter + def sequence(self, value: str): + if not isinstance(value, str): + raise ValueError("Sequence must be a string.") + if not all(char in "01" for char in value): + raise ValueError("Sequence must only contain '0' and '1'.") + self._sequence = value + + @property + def active_ms(self) -> int: + return self._active_ms + + @active_ms.setter + def active_ms(self, value: int): + if not isinstance(value, int) or value < 0: + raise ValueError("Active milliseconds must be a non-negative integer.") + self._active_ms = value + + @property + def inactive_ms(self) -> int: + return self._inactive_ms + + @inactive_ms.setter + def inactive_ms(self, value: int): + if not isinstance(value, int) or value < 0: + raise ValueError("Inactive milliseconds must be a non-negative integer.") + self._inactive_ms = value diff --git a/src/core/room.py b/src/core/room.py deleted file mode 100644 index df59f87..0000000 --- a/src/core/room.py +++ /dev/null @@ -1,7 +0,0 @@ -from .group import Group - - -class Room(Group): - def __init__(self, *, id: str, name: str): - super().__init__(id=id, name=name) - self._device_type = "room"