From da316e154702e4c0c8723fbc2d44b6977acadc06 Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Tue, 25 Jan 2022 14:48:07 +0100 Subject: [PATCH] Use shorthand attributes in shelly light (#64831) * Use shorthand attributes in shelly light * Adjust mypy * Revert temperature conversions * Adjust initialisation * Invert min/max for mired * Make _attr_supported_color_modes an instance attribute Co-authored-by: epenet --- homeassistant/components/shelly/light.py | 50 +++++++++--------------- 1 file changed, 19 insertions(+), 31 deletions(-) diff --git a/homeassistant/components/shelly/light.py b/homeassistant/components/shelly/light.py index 3b96cd61f32..b0fb9cd1a8a 100644 --- a/homeassistant/components/shelly/light.py +++ b/homeassistant/components/shelly/light.py @@ -60,6 +60,10 @@ from .utils import ( _LOGGER: Final = logging.getLogger(__name__) +MIRED_MAX_VALUE_WHITE = color_temperature_kelvin_to_mired(KELVIN_MIN_VALUE_WHITE) +MIRED_MIN_VALUE = color_temperature_kelvin_to_mired(KELVIN_MAX_VALUE) +MIRED_MAX_VALUE_COLOR = color_temperature_kelvin_to_mired(KELVIN_MIN_VALUE_COLOR) + async def async_setup_entry( hass: HomeAssistant, @@ -130,33 +134,37 @@ async def async_setup_rpc_entry( class BlockShellyLight(ShellyBlockEntity, LightEntity): """Entity that controls a light on block based Shelly devices.""" + _attr_supported_color_modes: set[str] + def __init__(self, wrapper: BlockDeviceWrapper, block: Block) -> None: """Initialize light.""" super().__init__(wrapper, block) self.control_result: dict[str, Any] | None = None - self._supported_color_modes: set[str] = set() - self._supported_features: int = 0 + self._attr_supported_color_modes = set() + self._attr_min_mireds = MIRED_MIN_VALUE self._min_kelvin: int = KELVIN_MIN_VALUE_WHITE + self._attr_max_mireds = MIRED_MAX_VALUE_WHITE self._max_kelvin: int = KELVIN_MAX_VALUE if hasattr(block, "red") and hasattr(block, "green") and hasattr(block, "blue"): + self._attr_max_mireds = MIRED_MAX_VALUE_COLOR self._min_kelvin = KELVIN_MIN_VALUE_COLOR if wrapper.model in RGBW_MODELS: - self._supported_color_modes.add(COLOR_MODE_RGBW) + self._attr_supported_color_modes.add(COLOR_MODE_RGBW) else: - self._supported_color_modes.add(COLOR_MODE_RGB) + self._attr_supported_color_modes.add(COLOR_MODE_RGB) if hasattr(block, "colorTemp"): - self._supported_color_modes.add(COLOR_MODE_COLOR_TEMP) + self._attr_supported_color_modes.add(COLOR_MODE_COLOR_TEMP) - if not self._supported_color_modes: + if not self._attr_supported_color_modes: if hasattr(block, "brightness") or hasattr(block, "gain"): - self._supported_color_modes.add(COLOR_MODE_BRIGHTNESS) + self._attr_supported_color_modes.add(COLOR_MODE_BRIGHTNESS) else: - self._supported_color_modes.add(COLOR_MODE_ONOFF) + self._attr_supported_color_modes.add(COLOR_MODE_ONOFF) if hasattr(block, "effect"): - self._supported_features |= SUPPORT_EFFECT + self._attr_supported_features |= SUPPORT_EFFECT if wrapper.model in MODELS_SUPPORTING_LIGHT_TRANSITION: match = FIRMWARE_PATTERN.search(wrapper.device.settings.get("fw", "")) @@ -164,12 +172,7 @@ class BlockShellyLight(ShellyBlockEntity, LightEntity): match is not None and int(match[0]) >= LIGHT_TRANSITION_MIN_FIRMWARE_DATE ): - self._supported_features |= SUPPORT_TRANSITION - - @property - def supported_features(self) -> int: - """Supported features.""" - return self._supported_features + self._attr_supported_features |= SUPPORT_TRANSITION @property def is_on(self) -> bool: @@ -264,21 +267,6 @@ class BlockShellyLight(ShellyBlockEntity, LightEntity): return int(color_temperature_kelvin_to_mired(color_temp)) - @property - def min_mireds(self) -> int: - """Return the coldest color_temp that this light supports.""" - return int(color_temperature_kelvin_to_mired(self._max_kelvin)) - - @property - def max_mireds(self) -> int: - """Return the warmest color_temp that this light supports.""" - return int(color_temperature_kelvin_to_mired(self._min_kelvin)) - - @property - def supported_color_modes(self) -> set | None: - """Flag supported color modes.""" - return self._supported_color_modes - @property def effect_list(self) -> list[str] | None: """Return the list of supported effects.""" @@ -314,7 +302,7 @@ class BlockShellyLight(ShellyBlockEntity, LightEntity): return set_mode = None - supported_color_modes = self._supported_color_modes + supported_color_modes = self._attr_supported_color_modes params: dict[str, Any] = {"turn": "on"} if ATTR_TRANSITION in kwargs: