From 228e023a96e7eb6f9dc3513706ee8b92858921a4 Mon Sep 17 00:00:00 2001 From: Stefanie Jane Date: Thu, 25 Jul 2024 09:57:04 -0700 Subject: [PATCH] Pull attributes into the integration --- custom_components/signalrgb/light.py | 30 ++++++++++++++++++++++- custom_components/signalrgb/manifest.json | 18 +++++++++----- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/custom_components/signalrgb/light.py b/custom_components/signalrgb/light.py index dcc7c65..c768530 100644 --- a/custom_components/signalrgb/light.py +++ b/custom_components/signalrgb/light.py @@ -5,6 +5,7 @@ from typing import Any from signalrgb.client import SignalRGBClient, SignalRGBException +from signalrgb.model import Effect from homeassistant.components.light import ( ATTR_EFFECT, @@ -55,6 +56,7 @@ def __init__(self, client: SignalRGBClient, config_entry: ConfigEntry) -> None: self._last_active_effect: str | None = None self._current_effect: str | None = None self._effect_list: list[str] = [] + self._effect_attributes: dict[str, Any] = {} async def async_update(self) -> None: """Fetch new state data for this light.""" @@ -74,9 +76,11 @@ async def async_update(self) -> None: if current_effect.attributes.name == ALL_OFF_EFFECT: self._last_active_effect = None self._attr_is_on = False + self._effect_attributes = {} else: self._current_effect = current_effect.attributes.name self._attr_is_on = True + await self._update_effect_attributes(current_effect) except SignalRGBException as err: raise HomeAssistantError(f"Error communicating with API: {err}") from err @@ -85,6 +89,25 @@ async def async_update(self) -> None: "current_effect=%s is_on=%s", self._current_effect, self._attr_is_on ) + async def _update_effect_attributes(self, effect: Effect) -> None: + """Update the effect attributes.""" + self._effect_attributes = { + "effect_name": effect.attributes.name, + "effect_description": effect.attributes.description, + "effect_developer": effect.attributes.developer_effect, + "effect_publisher": effect.attributes.publisher, + "effect_uses_audio": effect.attributes.uses_audio, + "effect_uses_input": effect.attributes.uses_input, + "effect_uses_meters": effect.attributes.uses_meters, + "effect_uses_video": effect.attributes.uses_video, + "effect_parameters": effect.attributes.parameters, + } + + @property + def extra_state_attributes(self) -> dict[str, Any]: + """Return entity specific state attributes.""" + return self._effect_attributes + @property def effect_list(self) -> list[str]: """Return the list of supported effects.""" @@ -127,8 +150,11 @@ async def _apply_effect(self, effect: str) -> None: LOGGER.debug("apply effect %s", effect) try: + effect_obj: Effect = await self.hass.async_add_executor_job( + self._client.get_effect_by_name, effect + ) await self.hass.async_add_executor_job( - self._client.apply_effect_by_name, effect + self._client.apply_effect, effect_obj.id ) except SignalRGBException as err: LOGGER.error("Failed to apply effect %s: %s", effect, err) @@ -136,9 +162,11 @@ async def _apply_effect(self, effect: str) -> None: if effect == ALL_OFF_EFFECT: self._last_active_effect = self._current_effect + self._effect_attributes = {} else: self._last_active_effect = self._current_effect self._current_effect = effect + await self._update_effect_attributes(effect_obj) self.async_write_ha_state() diff --git a/custom_components/signalrgb/manifest.json b/custom_components/signalrgb/manifest.json index 7b73111..8c2b6b7 100644 --- a/custom_components/signalrgb/manifest.json +++ b/custom_components/signalrgb/manifest.json @@ -1,12 +1,18 @@ { "domain": "signalrgb", "name": "SignalRGB", - "codeowners": ["@hyperb1iss"], + "codeowners": [ + "@hyperb1iss" + ], "config_flow": true, "documentation": "https://github.com/hyperb1iss/signalrgb-homeassistant", "iot_class": "assumed_state", - "issue_tracker": "https://github.com/hyperb1iss/signalrgb-homeassistant/issues", - "loggers": ["signalrgb"], - "requirements": ["signalrgb==0.9.5"], - "version": "0.2.0" -} + "loggers": [ + "signalrgb" + ], + "requirements": [ + "signalrgb==0.9.6" + ], + "version": "0.2.3", + "issue_tracker": "https://github.com/hyperb1iss/signalrgb-homeassistant/issues" +} \ No newline at end of file