diff --git a/homeassistant/components/elgato/helpers.py b/homeassistant/components/elgato/helpers.py index d512be0dba67..12753e76212d 100644 --- a/homeassistant/components/elgato/helpers.py +++ b/homeassistant/components/elgato/helpers.py @@ -8,8 +8,31 @@ from elgato import ElgatoConnectionError, ElgatoError from homeassistant.exceptions import HomeAssistantError from .const import DOMAIN +from .coordinator import ElgatoData from .entity import ElgatoEntity +# Elgato lights that can do color reach less far at either end. +COLOR_TEMPERATURE_RANGE = (2900, 6993) # 344 - 143 mireds +COLOR_TEMPERATURE_RANGE_COLOR = (3500, 6500) # 285 - 153 mireds + +COLOR_CAPABLE_PRODUCTS = ("Elgato Light Strip", "Elgato Light Strip Pro") + + +def supports_color(data: ElgatoData) -> bool: + """Return if an Elgato Light does more than white.""" + return bool( + data.info.product_name in COLOR_CAPABLE_PRODUCTS + or data.settings.power_on_hue + or data.state.hue is not None + ) + + +def color_temperature_range(data: ElgatoData) -> tuple[int, int]: + """Return the color temperature range in Kelvin a device supports.""" + if supports_color(data): + return COLOR_TEMPERATURE_RANGE_COLOR + return COLOR_TEMPERATURE_RANGE + def elgato_exception_handler[_ElgatoEntityT: ElgatoEntity, **_P]( func: Callable[Concatenate[_ElgatoEntityT, _P], Coroutine[Any, Any, Any]], diff --git a/homeassistant/components/elgato/light.py b/homeassistant/components/elgato/light.py index 3d5ba506df96..d223a24b6844 100644 --- a/homeassistant/components/elgato/light.py +++ b/homeassistant/components/elgato/light.py @@ -15,7 +15,7 @@ from homeassistant.util import color as color_util from .coordinator import ElgatoConfigEntry, ElgatoDataUpdateCoordinator from .entity import ElgatoEntity -from .helpers import elgato_exception_handler +from .helpers import color_temperature_range, elgato_exception_handler, supports_color PARALLEL_UPDATES = 1 @@ -34,8 +34,6 @@ class ElgatoLight(ElgatoEntity, LightEntity): """Defines an Elgato Light.""" _attr_name = None - _attr_min_color_temp_kelvin = 2900 # 344 Mireds - _attr_max_color_temp_kelvin = 6993 # 143 Mireds def __init__(self, coordinator: ElgatoDataUpdateCoordinator) -> None: """Initialize Elgato Light.""" @@ -43,19 +41,13 @@ class ElgatoLight(ElgatoEntity, LightEntity): self._attr_supported_color_modes = {ColorMode.COLOR_TEMP} self._attr_unique_id = coordinator.data.info.serial_number - # Elgato Light supporting color, have a different temperature range - if ( - self.coordinator.data.info.product_name - in ( - "Elgato Light Strip", - "Elgato Light Strip Pro", - ) - or self.coordinator.data.settings.power_on_hue - or self.coordinator.data.state.hue is not None - ): + if supports_color(coordinator.data): self._attr_supported_color_modes = {ColorMode.COLOR_TEMP, ColorMode.HS} - self._attr_min_color_temp_kelvin = 3500 # 285 Mireds - self._attr_max_color_temp_kelvin = 6500 # 153 Mireds + + ( + self._attr_min_color_temp_kelvin, + self._attr_max_color_temp_kelvin, + ) = color_temperature_range(coordinator.data) @property @override