From 0c5a3fab22c3831efcf5e3f37a54001478be4c2d Mon Sep 17 00:00:00 2001 From: Michael <35783820+mib1185@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:53:35 +0200 Subject: [PATCH] Cleanup the Fritz!Smarthome light entity (#123488) * use self.data when ever possible * use short hand attributes for color mode and supported color modes * color mode can change during runtime * group executer jobs --- homeassistant/components/fritzbox/light.py | 31 ++++++++++------------ 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/fritzbox/light.py b/homeassistant/components/fritzbox/light.py index 1009b0fb368..c19d7a8600d 100644 --- a/homeassistant/components/fritzbox/light.py +++ b/homeassistant/components/fritzbox/light.py @@ -20,8 +20,6 @@ from . import FritzboxDataUpdateCoordinator, FritzBoxDeviceEntity from .const import COLOR_MODE, LOGGER from .coordinator import FritzboxConfigEntry -SUPPORTED_COLOR_MODES = {ColorMode.COLOR_TEMP, ColorMode.HS} - async def async_setup_entry( hass: HomeAssistant, @@ -61,6 +59,12 @@ class FritzboxLight(FritzBoxDeviceEntity, LightEntity): super().__init__(coordinator, ain, None) self._supported_hs: dict[int, list[int]] = {} + self._attr_supported_color_modes = {ColorMode.ONOFF} + if self.data.has_color: + self._attr_supported_color_modes = {ColorMode.COLOR_TEMP, ColorMode.HS} + elif self.data.has_level: + self._attr_supported_color_modes = {ColorMode.BRIGHTNESS} + @property def is_on(self) -> bool: """If the light is currently on or off.""" @@ -95,15 +99,6 @@ class FritzboxLight(FritzBoxDeviceEntity, LightEntity): return ColorMode.BRIGHTNESS return ColorMode.ONOFF - @property - def supported_color_modes(self) -> set[ColorMode]: - """Flag supported color modes.""" - if self.data.has_color: - return SUPPORTED_COLOR_MODES - if self.data.has_level: - return {ColorMode.BRIGHTNESS} - return {ColorMode.ONOFF} - async def async_turn_on(self, **kwargs: Any) -> None: """Turn the light on.""" if kwargs.get(ATTR_BRIGHTNESS) is not None: @@ -157,12 +152,14 @@ class FritzboxLight(FritzBoxDeviceEntity, LightEntity): async def async_added_to_hass(self) -> None: """Get light attributes from device after entity is added to hass.""" await super().async_added_to_hass() - supported_colors = await self.hass.async_add_executor_job( - self.coordinator.data.devices[self.ain].get_colors - ) - supported_color_temps = await self.hass.async_add_executor_job( - self.coordinator.data.devices[self.ain].get_color_temps - ) + + def _get_color_data() -> tuple[dict, list]: + return (self.data.get_colors(), self.data.get_color_temps()) + + ( + supported_colors, + supported_color_temps, + ) = await self.hass.async_add_executor_job(_get_color_data) if supported_color_temps: # only available for color bulbs