diff --git a/homeassistant/components/homekit_controller/light.py b/homeassistant/components/homekit_controller/light.py index 472ccfbd550..d8c48d81333 100644 --- a/homeassistant/components/homekit_controller/light.py +++ b/homeassistant/components/homekit_controller/light.py @@ -10,7 +10,7 @@ from propcache import cached_property from homeassistant.components.light import ( ATTR_BRIGHTNESS, - ATTR_COLOR_TEMP, + ATTR_COLOR_TEMP_KELVIN, ATTR_HS_COLOR, ColorMode, LightEntity, @@ -57,7 +57,12 @@ class HomeKitLight(HomeKitEntity, LightEntity): def _async_reconfigure(self) -> None: """Reconfigure entity.""" self._async_clear_property_cache( - ("supported_features", "min_mireds", "max_mireds", "supported_color_modes") + ( + "supported_features", + "min_color_temp_kelvin", + "max_color_temp_kelvin", + "supported_color_modes", + ) ) super()._async_reconfigure() @@ -90,25 +95,35 @@ class HomeKitLight(HomeKitEntity, LightEntity): ) @cached_property - def min_mireds(self) -> int: - """Return minimum supported color temperature.""" + def max_color_temp_kelvin(self) -> int: + """Return the coldest color_temp_kelvin that this light supports.""" if not self.service.has(CharacteristicsTypes.COLOR_TEMPERATURE): - return super().min_mireds - min_value = self.service[CharacteristicsTypes.COLOR_TEMPERATURE].minValue - return int(min_value) if min_value else super().min_mireds + return super().max_color_temp_kelvin + min_value_mireds = self.service[CharacteristicsTypes.COLOR_TEMPERATURE].minValue + return ( + color_util.color_temperature_mired_to_kelvin(min_value_mireds) + if min_value_mireds + else super().max_color_temp_kelvin + ) @cached_property - def max_mireds(self) -> int: - """Return the maximum color temperature.""" + def min_color_temp_kelvin(self) -> int: + """Return the warmest color_temp_kelvin that this light supports.""" if not self.service.has(CharacteristicsTypes.COLOR_TEMPERATURE): - return super().max_mireds - max_value = self.service[CharacteristicsTypes.COLOR_TEMPERATURE].maxValue - return int(max_value) if max_value else super().max_mireds + return super().min_color_temp_kelvin + max_value_mireds = self.service[CharacteristicsTypes.COLOR_TEMPERATURE].maxValue + return ( + color_util.color_temperature_mired_to_kelvin(max_value_mireds) + if max_value_mireds + else super().min_color_temp_kelvin + ) @property - def color_temp(self) -> int: - """Return the color temperature.""" - return self.service.value(CharacteristicsTypes.COLOR_TEMPERATURE) + def color_temp_kelvin(self) -> int: + """Return the color temperature value in Kelvin.""" + return color_util.color_temperature_mired_to_kelvin( + self.service.value(CharacteristicsTypes.COLOR_TEMPERATURE) + ) @property def color_mode(self) -> str: @@ -153,7 +168,7 @@ class HomeKitLight(HomeKitEntity, LightEntity): async def async_turn_on(self, **kwargs: Any) -> None: """Turn the specified light on.""" hs_color = kwargs.get(ATTR_HS_COLOR) - temperature = kwargs.get(ATTR_COLOR_TEMP) + temperature_kelvin = kwargs.get(ATTR_COLOR_TEMP_KELVIN) brightness = kwargs.get(ATTR_BRIGHTNESS) characteristics: dict[str, Any] = {} @@ -167,19 +182,18 @@ class HomeKitLight(HomeKitEntity, LightEntity): # does not support both, temperature will win. This is not # expected to happen in the UI, but it is possible via a manual # service call. - if temperature is not None: + if temperature_kelvin is not None: if self.service.has(CharacteristicsTypes.COLOR_TEMPERATURE): - characteristics[CharacteristicsTypes.COLOR_TEMPERATURE] = int( - temperature + characteristics[CharacteristicsTypes.COLOR_TEMPERATURE] = ( + color_util.color_temperature_kelvin_to_mired(temperature_kelvin) ) + elif hs_color is None: # Some HomeKit devices implement color temperature with HS # since the spec "technically" does not permit the COLOR_TEMPERATURE # characteristic and the HUE and SATURATION characteristics to be # present at the same time. - hue_sat = color_util.color_temperature_to_hs( - color_util.color_temperature_mired_to_kelvin(temperature) - ) + hue_sat = color_util.color_temperature_to_hs(temperature_kelvin) characteristics[CharacteristicsTypes.HUE] = hue_sat[0] characteristics[CharacteristicsTypes.SATURATION] = hue_sat[1]