Fix MQTT JSON light not reporting color temp status if color is not supported (#140113)

This commit is contained in:
Jan Bouwhuis 2025-03-08 20:15:56 +01:00 committed by GitHub
parent 06fd6442b6
commit d94bdb7ecd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 60 additions and 2 deletions

View File

@ -31,7 +31,6 @@ from homeassistant.components.light import (
LightEntity,
LightEntityFeature,
brightness_supported,
color_supported,
valid_supported_color_modes,
)
from homeassistant.const import (
@ -293,7 +292,7 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
elif values["state"] is None:
self._attr_is_on = None
if color_supported(self.supported_color_modes) and "color_mode" in values:
if "color_mode" in values:
self._update_color(values)
if brightness_supported(self.supported_color_modes):

View File

@ -432,6 +432,65 @@ async def test_brightness_only(
assert state.state == STATE_OFF
@pytest.mark.parametrize(
"hass_config",
[
{
mqtt.DOMAIN: {
light.DOMAIN: {
"schema": "json",
"name": "test",
"state_topic": "test_light_rgb",
"command_topic": "test_light_rgb/set",
"supported_color_modes": ["color_temp"],
}
}
},
],
)
async def test_color_temp_only(
hass: HomeAssistant, mqtt_mock_entry: MqttMockHAClientGenerator
) -> None:
"""Test a light that only support color_temp as supported color mode."""
await mqtt_mock_entry()
state = hass.states.get("light.test")
assert state.state == STATE_UNKNOWN
assert state.attributes.get(light.ATTR_SUPPORTED_COLOR_MODES) == [
light.ColorMode.COLOR_TEMP
]
expected_features = (
light.LightEntityFeature.FLASH | light.LightEntityFeature.TRANSITION
)
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
assert state.attributes.get("rgb_color") is None
assert state.attributes.get("brightness") is None
assert state.attributes.get("color_temp_kelvin") is None
assert state.attributes.get("effect") is None
assert state.attributes.get("xy_color") is None
assert state.attributes.get("hs_color") is None
async_fire_mqtt_message(
hass,
"test_light_rgb",
'{"state":"ON", "color_mode": "color_temp", "color_temp": 250, "brightness": 50}',
)
state = hass.states.get("light.test")
assert state.state == STATE_ON
assert state.attributes.get("rgb_color") == (255, 206, 166)
assert state.attributes.get("brightness") == 50
assert state.attributes.get("color_temp_kelvin") == 4000
assert state.attributes.get("effect") is None
assert state.attributes.get("xy_color") == (0.42, 0.365)
assert state.attributes.get("hs_color") == (26.812, 34.87)
async_fire_mqtt_message(hass, "test_light_rgb", '{"state":"OFF"}')
state = hass.states.get("light.test")
assert state.state == STATE_OFF
@pytest.mark.parametrize(
"hass_config",
[