mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 21:27:38 +00:00
Fix MQTT JSON light not reporting color temp status if color is not supported (#140113)
This commit is contained in:
parent
fc53322c07
commit
fd2dee3c11
@ -31,7 +31,6 @@ from homeassistant.components.light import (
|
|||||||
LightEntity,
|
LightEntity,
|
||||||
LightEntityFeature,
|
LightEntityFeature,
|
||||||
brightness_supported,
|
brightness_supported,
|
||||||
color_supported,
|
|
||||||
valid_supported_color_modes,
|
valid_supported_color_modes,
|
||||||
)
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -293,7 +292,7 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
elif values["state"] is None:
|
elif values["state"] is None:
|
||||||
self._attr_is_on = 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)
|
self._update_color(values)
|
||||||
|
|
||||||
if brightness_supported(self.supported_color_modes):
|
if brightness_supported(self.supported_color_modes):
|
||||||
|
@ -432,6 +432,65 @@ async def test_brightness_only(
|
|||||||
assert state.state == STATE_OFF
|
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(
|
@pytest.mark.parametrize(
|
||||||
"hass_config",
|
"hass_config",
|
||||||
[
|
[
|
||||||
|
Loading…
x
Reference in New Issue
Block a user