Fix mqtt json light state updates using deprecated color handling (#105283)
parent
b0ef9623f9
commit
e5a115ce1f
|
@ -406,6 +406,9 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||
values["color_temp"],
|
||||
self.entity_id,
|
||||
)
|
||||
# Allow to switch back to color_temp
|
||||
if "color" not in values:
|
||||
self._attr_hs_color = None
|
||||
|
||||
if self.supported_features and LightEntityFeature.EFFECT:
|
||||
with suppress(KeyError):
|
||||
|
|
|
@ -725,6 +725,93 @@ async def test_controlling_state_via_topic2(
|
|||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"hass_config",
|
||||
[
|
||||
{
|
||||
mqtt.DOMAIN: {
|
||||
light.DOMAIN: {
|
||||
"schema": "json",
|
||||
"name": "test",
|
||||
"command_topic": "test_light_rgb/set",
|
||||
"state_topic": "test_light_rgb/set",
|
||||
"rgb": True,
|
||||
"color_temp": True,
|
||||
"brightness": True,
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
)
|
||||
async def test_controlling_the_state_with_legacy_color_handling(
|
||||
hass: HomeAssistant, mqtt_mock_entry: MqttMockHAClientGenerator
|
||||
) -> None:
|
||||
"""Test state updates for lights with a legacy color handling."""
|
||||
supported_color_modes = ["color_temp", "hs"]
|
||||
await mqtt_mock_entry()
|
||||
|
||||
state = hass.states.get("light.test")
|
||||
assert state.state == STATE_UNKNOWN
|
||||
expected_features = light.SUPPORT_FLASH | light.SUPPORT_TRANSITION
|
||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
||||
assert state.attributes.get("brightness") is None
|
||||
assert state.attributes.get("color_mode") is None
|
||||
assert state.attributes.get("color_temp") is None
|
||||
assert state.attributes.get("effect") is None
|
||||
assert state.attributes.get("hs_color") is None
|
||||
assert state.attributes.get("rgb_color") is None
|
||||
assert state.attributes.get("rgbw_color") is None
|
||||
assert state.attributes.get("rgbww_color") is None
|
||||
assert state.attributes.get("supported_color_modes") == supported_color_modes
|
||||
assert state.attributes.get("xy_color") is None
|
||||
assert not state.attributes.get(ATTR_ASSUMED_STATE)
|
||||
|
||||
for _ in range(0, 2):
|
||||
# Returned state after the light was turned on
|
||||
# Receiving legacy color mode: rgb.
|
||||
async_fire_mqtt_message(
|
||||
hass,
|
||||
"test_light_rgb/set",
|
||||
'{ "state": "ON", "brightness": 255, "level": 100, "hue": 16,'
|
||||
'"saturation": 100, "color": { "r": 255, "g": 67, "b": 0 }, '
|
||||
'"bulb_mode": "color", "color_mode": "rgb" }',
|
||||
)
|
||||
|
||||
state = hass.states.get("light.test")
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes.get("brightness") == 255
|
||||
assert state.attributes.get("color_mode") == "hs"
|
||||
assert state.attributes.get("color_temp") is None
|
||||
assert state.attributes.get("effect") is None
|
||||
assert state.attributes.get("hs_color") == (15.765, 100.0)
|
||||
assert state.attributes.get("rgb_color") == (255, 67, 0)
|
||||
assert state.attributes.get("rgbw_color") is None
|
||||
assert state.attributes.get("rgbww_color") is None
|
||||
assert state.attributes.get("xy_color") == (0.674, 0.322)
|
||||
|
||||
# Returned state after the lights color mode was changed
|
||||
# Receiving legacy color mode: color_temp
|
||||
async_fire_mqtt_message(
|
||||
hass,
|
||||
"test_light_rgb/set",
|
||||
'{ "state": "ON", "brightness": 255, "level": 100, '
|
||||
'"kelvin": 92, "color_temp": 353, "bulb_mode": "white", '
|
||||
'"color_mode": "color_temp" }',
|
||||
)
|
||||
|
||||
state = hass.states.get("light.test")
|
||||
assert state.state == STATE_ON
|
||||
assert state.attributes.get("brightness") == 255
|
||||
assert state.attributes.get("color_mode") == "color_temp"
|
||||
assert state.attributes.get("color_temp") == 353
|
||||
assert state.attributes.get("effect") is None
|
||||
assert state.attributes.get("hs_color") == (28.125, 61.661)
|
||||
assert state.attributes.get("rgb_color") == (255, 171, 97)
|
||||
assert state.attributes.get("rgbw_color") is None
|
||||
assert state.attributes.get("rgbww_color") is None
|
||||
assert state.attributes.get("xy_color") == (0.513, 0.386)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"hass_config",
|
||||
[
|
||||
|
|
Loading…
Reference in New Issue