mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 19:27:45 +00:00
Remove use of deprecated SUPPORT_* constants from MQTT light (#77828)
* Remove use of deprecated SUPPORT_* constants from MQTT light * Refactor
This commit is contained in:
parent
9a5fe950a4
commit
b21f8c9ea8
@ -977,20 +977,3 @@ class LightEntity(ToggleEntity):
|
|||||||
def supported_features(self) -> int:
|
def supported_features(self) -> int:
|
||||||
"""Flag supported features."""
|
"""Flag supported features."""
|
||||||
return self._attr_supported_features
|
return self._attr_supported_features
|
||||||
|
|
||||||
|
|
||||||
def legacy_supported_features(
|
|
||||||
supported_features: int, supported_color_modes: list[str] | None
|
|
||||||
) -> int:
|
|
||||||
"""Calculate supported features with backwards compatibility."""
|
|
||||||
# Backwards compatibility for supported_color_modes added in 2021.4
|
|
||||||
if supported_color_modes is None:
|
|
||||||
return supported_features
|
|
||||||
if any(mode in supported_color_modes for mode in COLOR_MODES_COLOR):
|
|
||||||
supported_features |= SUPPORT_COLOR
|
|
||||||
if any(mode in supported_color_modes for mode in COLOR_MODES_BRIGHTNESS):
|
|
||||||
supported_features |= SUPPORT_BRIGHTNESS
|
|
||||||
if ColorMode.COLOR_TEMP in supported_color_modes:
|
|
||||||
supported_features |= SUPPORT_COLOR_TEMP
|
|
||||||
|
|
||||||
return supported_features
|
|
||||||
|
@ -20,14 +20,13 @@ from homeassistant.components.light import (
|
|||||||
ENTITY_ID_FORMAT,
|
ENTITY_ID_FORMAT,
|
||||||
FLASH_LONG,
|
FLASH_LONG,
|
||||||
FLASH_SHORT,
|
FLASH_SHORT,
|
||||||
SUPPORT_BRIGHTNESS,
|
|
||||||
SUPPORT_COLOR,
|
|
||||||
SUPPORT_COLOR_TEMP,
|
|
||||||
VALID_COLOR_MODES,
|
VALID_COLOR_MODES,
|
||||||
ColorMode,
|
ColorMode,
|
||||||
LightEntity,
|
LightEntity,
|
||||||
LightEntityFeature,
|
LightEntityFeature,
|
||||||
legacy_supported_features,
|
brightness_supported,
|
||||||
|
color_supported,
|
||||||
|
filter_supported_color_modes,
|
||||||
valid_supported_color_modes,
|
valid_supported_color_modes,
|
||||||
)
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -198,6 +197,7 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
self._color_mode = None
|
self._color_mode = None
|
||||||
self._color_temp = None
|
self._color_temp = None
|
||||||
self._effect = None
|
self._effect = None
|
||||||
|
self._fixed_color_mode = None
|
||||||
self._flash_times = None
|
self._flash_times = None
|
||||||
self._hs = None
|
self._hs = None
|
||||||
self._rgb = None
|
self._rgb = None
|
||||||
@ -230,13 +230,20 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
)
|
)
|
||||||
self._supported_features |= config[CONF_EFFECT] and LightEntityFeature.EFFECT
|
self._supported_features |= config[CONF_EFFECT] and LightEntityFeature.EFFECT
|
||||||
if not self._config[CONF_COLOR_MODE]:
|
if not self._config[CONF_COLOR_MODE]:
|
||||||
self._supported_features |= config[CONF_BRIGHTNESS] and SUPPORT_BRIGHTNESS
|
color_modes = {ColorMode.ONOFF}
|
||||||
self._supported_features |= config[CONF_COLOR_TEMP] and SUPPORT_COLOR_TEMP
|
if config[CONF_BRIGHTNESS]:
|
||||||
self._supported_features |= config[CONF_HS] and SUPPORT_COLOR
|
color_modes.add(ColorMode.BRIGHTNESS)
|
||||||
self._supported_features |= config[CONF_RGB] and (
|
if config[CONF_COLOR_TEMP]:
|
||||||
SUPPORT_COLOR | SUPPORT_BRIGHTNESS
|
color_modes.add(ColorMode.COLOR_TEMP)
|
||||||
)
|
if config[CONF_HS] or config[CONF_RGB] or config[CONF_XY]:
|
||||||
self._supported_features |= config[CONF_XY] and SUPPORT_COLOR
|
color_modes.add(ColorMode.HS)
|
||||||
|
self._supported_color_modes = filter_supported_color_modes(color_modes)
|
||||||
|
if len(self._supported_color_modes) == 1:
|
||||||
|
self._fixed_color_mode = next(iter(self._supported_color_modes))
|
||||||
|
else:
|
||||||
|
self._supported_color_modes = self._config[CONF_SUPPORTED_COLOR_MODES]
|
||||||
|
if len(self._supported_color_modes) == 1:
|
||||||
|
self._color_mode = next(iter(self._supported_color_modes))
|
||||||
|
|
||||||
def _update_color(self, values):
|
def _update_color(self, values):
|
||||||
if not self._config[CONF_COLOR_MODE]:
|
if not self._config[CONF_COLOR_MODE]:
|
||||||
@ -332,7 +339,12 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
elif values["state"] is None:
|
elif values["state"] is None:
|
||||||
self._state = None
|
self._state = None
|
||||||
|
|
||||||
if self._supported_features and SUPPORT_COLOR and "color" in values:
|
if (
|
||||||
|
not self._config[CONF_COLOR_MODE]
|
||||||
|
and color_supported(self._supported_color_modes)
|
||||||
|
and "color" in values
|
||||||
|
):
|
||||||
|
# Deprecated color handling
|
||||||
if values["color"] is None:
|
if values["color"] is None:
|
||||||
self._hs = None
|
self._hs = None
|
||||||
else:
|
else:
|
||||||
@ -341,7 +353,7 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
if self._config[CONF_COLOR_MODE] and "color_mode" in values:
|
if self._config[CONF_COLOR_MODE] and "color_mode" in values:
|
||||||
self._update_color(values)
|
self._update_color(values)
|
||||||
|
|
||||||
if self._supported_features and SUPPORT_BRIGHTNESS:
|
if brightness_supported(self._supported_color_modes):
|
||||||
try:
|
try:
|
||||||
self._brightness = int(
|
self._brightness = int(
|
||||||
values["brightness"]
|
values["brightness"]
|
||||||
@ -354,10 +366,10 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
_LOGGER.warning("Invalid brightness value received")
|
_LOGGER.warning("Invalid brightness value received")
|
||||||
|
|
||||||
if (
|
if (
|
||||||
self._supported_features
|
ColorMode.COLOR_TEMP in self._supported_color_modes
|
||||||
and SUPPORT_COLOR_TEMP
|
|
||||||
and not self._config[CONF_COLOR_MODE]
|
and not self._config[CONF_COLOR_MODE]
|
||||||
):
|
):
|
||||||
|
# Deprecated color handling
|
||||||
try:
|
try:
|
||||||
if values["color_temp"] is None:
|
if values["color_temp"] is None:
|
||||||
self._color_temp = None
|
self._color_temp = None
|
||||||
@ -474,19 +486,25 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
@property
|
@property
|
||||||
def color_mode(self):
|
def color_mode(self):
|
||||||
"""Return current color mode."""
|
"""Return current color mode."""
|
||||||
return self._color_mode
|
if self._config[CONF_COLOR_MODE]:
|
||||||
|
return self._color_mode
|
||||||
|
if self._fixed_color_mode:
|
||||||
|
# Legacy light with support for a single color mode
|
||||||
|
return self._fixed_color_mode
|
||||||
|
# Legacy light with support for ct + hs, prioritize hs
|
||||||
|
if self._hs is not None:
|
||||||
|
return ColorMode.HS
|
||||||
|
return ColorMode.COLOR_TEMP
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def supported_color_modes(self):
|
def supported_color_modes(self):
|
||||||
"""Flag supported color modes."""
|
"""Flag supported color modes."""
|
||||||
return self._config.get(CONF_SUPPORTED_COLOR_MODES)
|
return self._supported_color_modes
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def supported_features(self):
|
def supported_features(self):
|
||||||
"""Flag supported features."""
|
"""Flag supported features."""
|
||||||
return legacy_supported_features(
|
return self._supported_features
|
||||||
self._supported_features, self._config.get(CONF_SUPPORTED_COLOR_MODES)
|
|
||||||
)
|
|
||||||
|
|
||||||
def _set_flash_and_transition(self, message, **kwargs):
|
def _set_flash_and_transition(self, message, **kwargs):
|
||||||
if ATTR_TRANSITION in kwargs:
|
if ATTR_TRANSITION in kwargs:
|
||||||
@ -510,7 +528,10 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
return tuple(round(i / 255 * brightness) for i in rgbxx)
|
return tuple(round(i / 255 * brightness) for i in rgbxx)
|
||||||
|
|
||||||
def _supports_color_mode(self, color_mode):
|
def _supports_color_mode(self, color_mode):
|
||||||
return self.supported_color_modes and color_mode in self.supported_color_modes
|
"""Return True if the light natively supports a color mode."""
|
||||||
|
return (
|
||||||
|
self._config[CONF_COLOR_MODE] and color_mode in self.supported_color_modes
|
||||||
|
)
|
||||||
|
|
||||||
async def async_turn_on(self, **kwargs): # noqa: C901
|
async def async_turn_on(self, **kwargs): # noqa: C901
|
||||||
"""Turn the device on.
|
"""Turn the device on.
|
||||||
@ -524,6 +545,7 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
if ATTR_HS_COLOR in kwargs and (
|
if ATTR_HS_COLOR in kwargs and (
|
||||||
self._config[CONF_HS] or self._config[CONF_RGB] or self._config[CONF_XY]
|
self._config[CONF_HS] or self._config[CONF_RGB] or self._config[CONF_XY]
|
||||||
):
|
):
|
||||||
|
# Legacy color handling
|
||||||
hs_color = kwargs[ATTR_HS_COLOR]
|
hs_color = kwargs[ATTR_HS_COLOR]
|
||||||
message["color"] = {}
|
message["color"] = {}
|
||||||
if self._config[CONF_RGB]:
|
if self._config[CONF_RGB]:
|
||||||
@ -548,6 +570,7 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
message["color"]["s"] = hs_color[1]
|
message["color"]["s"] = hs_color[1]
|
||||||
|
|
||||||
if self._optimistic:
|
if self._optimistic:
|
||||||
|
self._color_temp = None
|
||||||
self._hs = kwargs[ATTR_HS_COLOR]
|
self._hs = kwargs[ATTR_HS_COLOR]
|
||||||
should_update = True
|
should_update = True
|
||||||
|
|
||||||
@ -617,7 +640,9 @@ class MqttLightJson(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
message["color_temp"] = int(kwargs[ATTR_COLOR_TEMP])
|
message["color_temp"] = int(kwargs[ATTR_COLOR_TEMP])
|
||||||
|
|
||||||
if self._optimistic:
|
if self._optimistic:
|
||||||
|
self._color_mode = ColorMode.COLOR_TEMP
|
||||||
self._color_temp = kwargs[ATTR_COLOR_TEMP]
|
self._color_temp = kwargs[ATTR_COLOR_TEMP]
|
||||||
|
self._hs = None
|
||||||
should_update = True
|
should_update = True
|
||||||
|
|
||||||
if ATTR_EFFECT in kwargs:
|
if ATTR_EFFECT in kwargs:
|
||||||
|
@ -11,11 +11,10 @@ from homeassistant.components.light import (
|
|||||||
ATTR_HS_COLOR,
|
ATTR_HS_COLOR,
|
||||||
ATTR_TRANSITION,
|
ATTR_TRANSITION,
|
||||||
ENTITY_ID_FORMAT,
|
ENTITY_ID_FORMAT,
|
||||||
SUPPORT_BRIGHTNESS,
|
ColorMode,
|
||||||
SUPPORT_COLOR,
|
|
||||||
SUPPORT_COLOR_TEMP,
|
|
||||||
LightEntity,
|
LightEntity,
|
||||||
LightEntityFeature,
|
LightEntityFeature,
|
||||||
|
filter_supported_color_modes,
|
||||||
)
|
)
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
@ -129,6 +128,7 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
|
|
||||||
# features
|
# features
|
||||||
self._brightness = None
|
self._brightness = None
|
||||||
|
self._fixed_color_mode = None
|
||||||
self._color_temp = None
|
self._color_temp = None
|
||||||
self._hs = None
|
self._hs = None
|
||||||
self._effect = None
|
self._effect = None
|
||||||
@ -166,6 +166,21 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
or self._templates[CONF_STATE_TEMPLATE] is None
|
or self._templates[CONF_STATE_TEMPLATE] is None
|
||||||
)
|
)
|
||||||
|
|
||||||
|
color_modes = {ColorMode.ONOFF}
|
||||||
|
if self._templates[CONF_BRIGHTNESS_TEMPLATE] is not None:
|
||||||
|
color_modes.add(ColorMode.BRIGHTNESS)
|
||||||
|
if self._templates[CONF_COLOR_TEMP_TEMPLATE] is not None:
|
||||||
|
color_modes.add(ColorMode.COLOR_TEMP)
|
||||||
|
if (
|
||||||
|
self._templates[CONF_RED_TEMPLATE] is not None
|
||||||
|
and self._templates[CONF_GREEN_TEMPLATE] is not None
|
||||||
|
and self._templates[CONF_BLUE_TEMPLATE] is not None
|
||||||
|
):
|
||||||
|
color_modes.add(ColorMode.HS)
|
||||||
|
self._supported_color_modes = filter_supported_color_modes(color_modes)
|
||||||
|
if len(self._supported_color_modes) == 1:
|
||||||
|
self._fixed_color_mode = next(iter(self._supported_color_modes))
|
||||||
|
|
||||||
def _prepare_subscribe_topics(self):
|
def _prepare_subscribe_topics(self):
|
||||||
"""(Re)Subscribe to topics."""
|
"""(Re)Subscribe to topics."""
|
||||||
for tpl in self._templates.values():
|
for tpl in self._templates.values():
|
||||||
@ -200,11 +215,10 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
|
|
||||||
if self._templates[CONF_COLOR_TEMP_TEMPLATE] is not None:
|
if self._templates[CONF_COLOR_TEMP_TEMPLATE] is not None:
|
||||||
try:
|
try:
|
||||||
self._color_temp = int(
|
color_temp = self._templates[
|
||||||
self._templates[
|
CONF_COLOR_TEMP_TEMPLATE
|
||||||
CONF_COLOR_TEMP_TEMPLATE
|
].async_render_with_possible_json_value(msg.payload)
|
||||||
].async_render_with_possible_json_value(msg.payload)
|
self._color_temp = int(color_temp) if color_temp != "None" else None
|
||||||
)
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
_LOGGER.warning("Invalid color temperature value received")
|
_LOGGER.warning("Invalid color temperature value received")
|
||||||
|
|
||||||
@ -214,22 +228,21 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
and self._templates[CONF_BLUE_TEMPLATE] is not None
|
and self._templates[CONF_BLUE_TEMPLATE] is not None
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
red = int(
|
red = self._templates[
|
||||||
self._templates[
|
CONF_RED_TEMPLATE
|
||||||
CONF_RED_TEMPLATE
|
].async_render_with_possible_json_value(msg.payload)
|
||||||
].async_render_with_possible_json_value(msg.payload)
|
green = self._templates[
|
||||||
)
|
CONF_GREEN_TEMPLATE
|
||||||
green = int(
|
].async_render_with_possible_json_value(msg.payload)
|
||||||
self._templates[
|
blue = self._templates[
|
||||||
CONF_GREEN_TEMPLATE
|
CONF_BLUE_TEMPLATE
|
||||||
].async_render_with_possible_json_value(msg.payload)
|
].async_render_with_possible_json_value(msg.payload)
|
||||||
)
|
if red == "None" and green == "None" and blue == "None":
|
||||||
blue = int(
|
self._hs = None
|
||||||
self._templates[
|
else:
|
||||||
CONF_BLUE_TEMPLATE
|
self._hs = color_util.color_RGB_to_hs(
|
||||||
].async_render_with_possible_json_value(msg.payload)
|
int(red), int(green), int(blue)
|
||||||
)
|
)
|
||||||
self._hs = color_util.color_RGB_to_hs(red, green, blue)
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
_LOGGER.warning("Invalid color value received")
|
_LOGGER.warning("Invalid color value received")
|
||||||
|
|
||||||
@ -340,6 +353,7 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
|
|
||||||
if self._optimistic:
|
if self._optimistic:
|
||||||
self._color_temp = kwargs[ATTR_COLOR_TEMP]
|
self._color_temp = kwargs[ATTR_COLOR_TEMP]
|
||||||
|
self._hs = None
|
||||||
|
|
||||||
if ATTR_HS_COLOR in kwargs:
|
if ATTR_HS_COLOR in kwargs:
|
||||||
hs_color = kwargs[ATTR_HS_COLOR]
|
hs_color = kwargs[ATTR_HS_COLOR]
|
||||||
@ -363,6 +377,7 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
values["sat"] = hs_color[1]
|
values["sat"] = hs_color[1]
|
||||||
|
|
||||||
if self._optimistic:
|
if self._optimistic:
|
||||||
|
self._color_temp = None
|
||||||
self._hs = kwargs[ATTR_HS_COLOR]
|
self._hs = kwargs[ATTR_HS_COLOR]
|
||||||
|
|
||||||
if ATTR_EFFECT in kwargs:
|
if ATTR_EFFECT in kwargs:
|
||||||
@ -415,21 +430,26 @@ class MqttLightTemplate(MqttEntity, LightEntity, RestoreEntity):
|
|||||||
if self._optimistic:
|
if self._optimistic:
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def color_mode(self):
|
||||||
|
"""Return current color mode."""
|
||||||
|
if self._fixed_color_mode:
|
||||||
|
return self._fixed_color_mode
|
||||||
|
# Support for ct + hs, prioritize hs
|
||||||
|
if self._hs is not None:
|
||||||
|
return ColorMode.HS
|
||||||
|
return ColorMode.COLOR_TEMP
|
||||||
|
|
||||||
|
@property
|
||||||
|
def supported_color_modes(self):
|
||||||
|
"""Flag supported color modes."""
|
||||||
|
return self._supported_color_modes
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def supported_features(self):
|
def supported_features(self):
|
||||||
"""Flag supported features."""
|
"""Flag supported features."""
|
||||||
features = LightEntityFeature.FLASH | LightEntityFeature.TRANSITION
|
features = LightEntityFeature.FLASH | LightEntityFeature.TRANSITION
|
||||||
if self._templates[CONF_BRIGHTNESS_TEMPLATE] is not None:
|
|
||||||
features = features | SUPPORT_BRIGHTNESS
|
|
||||||
if (
|
|
||||||
self._templates[CONF_RED_TEMPLATE] is not None
|
|
||||||
and self._templates[CONF_GREEN_TEMPLATE] is not None
|
|
||||||
and self._templates[CONF_BLUE_TEMPLATE] is not None
|
|
||||||
):
|
|
||||||
features = features | SUPPORT_COLOR | SUPPORT_BRIGHTNESS
|
|
||||||
if self._config.get(CONF_EFFECT_LIST) is not None:
|
if self._config.get(CONF_EFFECT_LIST) is not None:
|
||||||
features = features | LightEntityFeature.EFFECT
|
features = features | LightEntityFeature.EFFECT
|
||||||
if self._templates[CONF_COLOR_TEMP_TEMPLATE] is not None:
|
|
||||||
features = features | SUPPORT_COLOR_TEMP
|
|
||||||
|
|
||||||
return features
|
return features
|
||||||
|
@ -237,8 +237,8 @@ async def test_fail_setup_if_color_modes_invalid(
|
|||||||
assert error in caplog.text
|
assert error in caplog.text
|
||||||
|
|
||||||
|
|
||||||
async def test_rgb_light(hass, mqtt_mock_entry_with_yaml_config):
|
async def test_legacy_rgb_light(hass, mqtt_mock_entry_with_yaml_config):
|
||||||
"""Test RGB light flags brightness support."""
|
"""Test legacy RGB light flags expected features and color modes."""
|
||||||
assert await async_setup_component(
|
assert await async_setup_component(
|
||||||
hass,
|
hass,
|
||||||
mqtt.DOMAIN,
|
mqtt.DOMAIN,
|
||||||
@ -257,12 +257,9 @@ async def test_rgb_light(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
await mqtt_mock_entry_with_yaml_config()
|
await mqtt_mock_entry_with_yaml_config()
|
||||||
|
|
||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
expected_features = (
|
color_modes = [light.ColorMode.HS]
|
||||||
light.SUPPORT_BRIGHTNESS
|
assert state.attributes.get(light.ATTR_SUPPORTED_COLOR_MODES) == color_modes
|
||||||
| light.SUPPORT_COLOR
|
expected_features = light.SUPPORT_FLASH | light.SUPPORT_TRANSITION
|
||||||
| light.SUPPORT_FLASH
|
|
||||||
| light.SUPPORT_TRANSITION
|
|
||||||
)
|
|
||||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
||||||
|
|
||||||
|
|
||||||
@ -348,13 +345,10 @@ async def test_controlling_state_via_topic(hass, mqtt_mock_entry_with_yaml_confi
|
|||||||
|
|
||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.state == STATE_UNKNOWN
|
assert state.state == STATE_UNKNOWN
|
||||||
|
color_modes = [light.ColorMode.COLOR_TEMP, light.ColorMode.HS]
|
||||||
|
assert state.attributes.get(light.ATTR_SUPPORTED_COLOR_MODES) == color_modes
|
||||||
expected_features = (
|
expected_features = (
|
||||||
light.SUPPORT_BRIGHTNESS
|
light.SUPPORT_EFFECT | light.SUPPORT_FLASH | light.SUPPORT_TRANSITION
|
||||||
| light.SUPPORT_COLOR
|
|
||||||
| light.SUPPORT_COLOR_TEMP
|
|
||||||
| light.SUPPORT_EFFECT
|
|
||||||
| light.SUPPORT_FLASH
|
|
||||||
| light.SUPPORT_TRANSITION
|
|
||||||
)
|
)
|
||||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
||||||
assert state.attributes.get("rgb_color") is None
|
assert state.attributes.get("rgb_color") is None
|
||||||
@ -380,11 +374,35 @@ async def test_controlling_state_via_topic(hass, mqtt_mock_entry_with_yaml_confi
|
|||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
assert state.attributes.get("rgb_color") == (255, 255, 255)
|
assert state.attributes.get("rgb_color") == (255, 255, 255)
|
||||||
assert state.attributes.get("brightness") == 255
|
assert state.attributes.get("brightness") == 255
|
||||||
assert state.attributes.get("color_temp") == 155
|
assert state.attributes.get("color_temp") is None # rgb color has priority
|
||||||
assert state.attributes.get("effect") == "colorloop"
|
assert state.attributes.get("effect") == "colorloop"
|
||||||
assert state.attributes.get("xy_color") == (0.323, 0.329)
|
assert state.attributes.get("xy_color") == (0.323, 0.329)
|
||||||
assert state.attributes.get("hs_color") == (0.0, 0.0)
|
assert state.attributes.get("hs_color") == (0.0, 0.0)
|
||||||
|
|
||||||
|
# Turn on the light
|
||||||
|
async_fire_mqtt_message(
|
||||||
|
hass,
|
||||||
|
"test_light_rgb",
|
||||||
|
'{"state":"ON",'
|
||||||
|
'"brightness":255,'
|
||||||
|
'"color":null,'
|
||||||
|
'"color_temp":155,'
|
||||||
|
'"effect":"colorloop"}',
|
||||||
|
)
|
||||||
|
|
||||||
|
state = hass.states.get("light.test")
|
||||||
|
assert state.state == STATE_ON
|
||||||
|
assert state.attributes.get("rgb_color") == (
|
||||||
|
255,
|
||||||
|
253,
|
||||||
|
248,
|
||||||
|
) # temp converted to color
|
||||||
|
assert state.attributes.get("brightness") == 255
|
||||||
|
assert state.attributes.get("color_temp") == 155
|
||||||
|
assert state.attributes.get("effect") == "colorloop"
|
||||||
|
assert state.attributes.get("xy_color") == (0.328, 0.334) # temp converted to color
|
||||||
|
assert state.attributes.get("hs_color") == (44.098, 2.43) # temp converted to color
|
||||||
|
|
||||||
# Turn the light off
|
# Turn the light off
|
||||||
async_fire_mqtt_message(hass, "test_light_rgb", '{"state":"OFF"}')
|
async_fire_mqtt_message(hass, "test_light_rgb", '{"state":"OFF"}')
|
||||||
|
|
||||||
@ -421,7 +439,7 @@ async def test_controlling_state_via_topic(hass, mqtt_mock_entry_with_yaml_confi
|
|||||||
async_fire_mqtt_message(hass, "test_light_rgb", '{"state":"ON", "color":null}')
|
async_fire_mqtt_message(hass, "test_light_rgb", '{"state":"ON", "color":null}')
|
||||||
|
|
||||||
light_state = hass.states.get("light.test")
|
light_state = hass.states.get("light.test")
|
||||||
assert "hs_color" in light_state.attributes
|
assert "hs_color" in light_state.attributes # Color temp approximation
|
||||||
|
|
||||||
async_fire_mqtt_message(hass, "test_light_rgb", '{"state":"ON", "color_temp":155}')
|
async_fire_mqtt_message(hass, "test_light_rgb", '{"state":"ON", "color_temp":155}')
|
||||||
|
|
||||||
@ -472,12 +490,7 @@ async def test_controlling_state_via_topic2(
|
|||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.state == STATE_UNKNOWN
|
assert state.state == STATE_UNKNOWN
|
||||||
expected_features = (
|
expected_features = (
|
||||||
light.SUPPORT_BRIGHTNESS
|
light.SUPPORT_EFFECT | light.SUPPORT_FLASH | light.SUPPORT_TRANSITION
|
||||||
| light.SUPPORT_COLOR
|
|
||||||
| light.SUPPORT_COLOR_TEMP
|
|
||||||
| light.SUPPORT_EFFECT
|
|
||||||
| light.SUPPORT_FLASH
|
|
||||||
| light.SUPPORT_TRANSITION
|
|
||||||
)
|
)
|
||||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
||||||
assert state.attributes.get("brightness") is None
|
assert state.attributes.get("brightness") is None
|
||||||
@ -660,14 +673,11 @@ async def test_sending_mqtt_commands_and_optimistic(
|
|||||||
assert state.attributes.get("brightness") == 95
|
assert state.attributes.get("brightness") == 95
|
||||||
assert state.attributes.get("hs_color") == (100, 100)
|
assert state.attributes.get("hs_color") == (100, 100)
|
||||||
assert state.attributes.get("effect") == "random"
|
assert state.attributes.get("effect") == "random"
|
||||||
assert state.attributes.get("color_temp") == 100
|
assert state.attributes.get("color_temp") is None # hs_color has priority
|
||||||
|
color_modes = [light.ColorMode.COLOR_TEMP, light.ColorMode.HS]
|
||||||
|
assert state.attributes.get(light.ATTR_SUPPORTED_COLOR_MODES) == color_modes
|
||||||
expected_features = (
|
expected_features = (
|
||||||
light.SUPPORT_BRIGHTNESS
|
light.SUPPORT_EFFECT | light.SUPPORT_FLASH | light.SUPPORT_TRANSITION
|
||||||
| light.SUPPORT_COLOR
|
|
||||||
| light.SUPPORT_COLOR_TEMP
|
|
||||||
| light.SUPPORT_EFFECT
|
|
||||||
| light.SUPPORT_FLASH
|
|
||||||
| light.SUPPORT_TRANSITION
|
|
||||||
)
|
)
|
||||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
||||||
assert state.attributes.get(ATTR_ASSUMED_STATE)
|
assert state.attributes.get(ATTR_ASSUMED_STATE)
|
||||||
@ -692,6 +702,8 @@ async def test_sending_mqtt_commands_and_optimistic(
|
|||||||
mqtt_mock.async_publish.reset_mock()
|
mqtt_mock.async_publish.reset_mock()
|
||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
|
assert state.attributes.get("color_mode") == light.ColorMode.COLOR_TEMP
|
||||||
|
assert state.attributes.get("color_temp") == 90
|
||||||
|
|
||||||
await common.async_turn_off(hass, "light.test")
|
await common.async_turn_off(hass, "light.test")
|
||||||
|
|
||||||
@ -706,49 +718,61 @@ async def test_sending_mqtt_commands_and_optimistic(
|
|||||||
await common.async_turn_on(
|
await common.async_turn_on(
|
||||||
hass, "light.test", brightness=50, xy_color=[0.123, 0.123]
|
hass, "light.test", brightness=50, xy_color=[0.123, 0.123]
|
||||||
)
|
)
|
||||||
await common.async_turn_on(hass, "light.test", brightness=50, hs_color=[359, 78])
|
mqtt_mock.async_publish.assert_called_once_with(
|
||||||
await common.async_turn_on(hass, "light.test", rgb_color=[255, 128, 0])
|
"test_light_rgb/set",
|
||||||
|
JsonValidator(
|
||||||
mqtt_mock.async_publish.assert_has_calls(
|
'{"state": "ON", "color": {"r": 0, "g": 123, "b": 255,'
|
||||||
[
|
' "x": 0.14, "y": 0.131, "h": 210.824, "s": 100.0},'
|
||||||
call(
|
' "brightness": 50}'
|
||||||
"test_light_rgb/set",
|
),
|
||||||
JsonValidator(
|
2,
|
||||||
'{"state": "ON", "color": {"r": 0, "g": 123, "b": 255,'
|
False,
|
||||||
' "x": 0.14, "y": 0.131, "h": 210.824, "s": 100.0},'
|
|
||||||
' "brightness": 50}'
|
|
||||||
),
|
|
||||||
2,
|
|
||||||
False,
|
|
||||||
),
|
|
||||||
call(
|
|
||||||
"test_light_rgb/set",
|
|
||||||
JsonValidator(
|
|
||||||
'{"state": "ON", "color": {"r": 255, "g": 56, "b": 59,'
|
|
||||||
' "x": 0.654, "y": 0.301, "h": 359.0, "s": 78.0},'
|
|
||||||
' "brightness": 50}'
|
|
||||||
),
|
|
||||||
2,
|
|
||||||
False,
|
|
||||||
),
|
|
||||||
call(
|
|
||||||
"test_light_rgb/set",
|
|
||||||
JsonValidator(
|
|
||||||
'{"state": "ON", "color": {"r": 255, "g": 128, "b": 0,'
|
|
||||||
' "x": 0.611, "y": 0.375, "h": 30.118, "s": 100.0}}'
|
|
||||||
),
|
|
||||||
2,
|
|
||||||
False,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
any_order=True,
|
|
||||||
)
|
)
|
||||||
|
mqtt_mock.async_publish.reset_mock()
|
||||||
|
state = hass.states.get("light.test")
|
||||||
|
assert state.attributes.get("color_mode") == light.ColorMode.HS
|
||||||
|
assert state.attributes["brightness"] == 50
|
||||||
|
assert state.attributes["hs_color"] == (210.824, 100.0)
|
||||||
|
assert state.attributes["rgb_color"] == (0, 123, 255)
|
||||||
|
assert state.attributes["xy_color"] == (0.14, 0.131)
|
||||||
|
|
||||||
|
await common.async_turn_on(hass, "light.test", brightness=50, hs_color=[359, 78])
|
||||||
|
mqtt_mock.async_publish.assert_called_once_with(
|
||||||
|
"test_light_rgb/set",
|
||||||
|
JsonValidator(
|
||||||
|
'{"state": "ON", "color": {"r": 255, "g": 56, "b": 59,'
|
||||||
|
' "x": 0.654, "y": 0.301, "h": 359.0, "s": 78.0},'
|
||||||
|
' "brightness": 50}'
|
||||||
|
),
|
||||||
|
2,
|
||||||
|
False,
|
||||||
|
)
|
||||||
|
mqtt_mock.async_publish.reset_mock()
|
||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
assert state.attributes["rgb_color"] == (255, 128, 0)
|
assert state.attributes.get("color_mode") == light.ColorMode.HS
|
||||||
|
assert state.attributes["brightness"] == 50
|
||||||
|
assert state.attributes["hs_color"] == (359.0, 78.0)
|
||||||
|
assert state.attributes["rgb_color"] == (255, 56, 59)
|
||||||
|
assert state.attributes["xy_color"] == (0.654, 0.301)
|
||||||
|
|
||||||
|
await common.async_turn_on(hass, "light.test", rgb_color=[255, 128, 0])
|
||||||
|
mqtt_mock.async_publish.assert_called_once_with(
|
||||||
|
"test_light_rgb/set",
|
||||||
|
JsonValidator(
|
||||||
|
'{"state": "ON", "color": {"r": 255, "g": 128, "b": 0,'
|
||||||
|
' "x": 0.611, "y": 0.375, "h": 30.118, "s": 100.0}}'
|
||||||
|
),
|
||||||
|
2,
|
||||||
|
False,
|
||||||
|
)
|
||||||
|
mqtt_mock.async_publish.reset_mock()
|
||||||
|
state = hass.states.get("light.test")
|
||||||
|
assert state.state == STATE_ON
|
||||||
|
assert state.attributes.get("color_mode") == light.ColorMode.HS
|
||||||
assert state.attributes["brightness"] == 50
|
assert state.attributes["brightness"] == 50
|
||||||
assert state.attributes["hs_color"] == (30.118, 100)
|
assert state.attributes["hs_color"] == (30.118, 100)
|
||||||
|
assert state.attributes["rgb_color"] == (255, 128, 0)
|
||||||
assert state.attributes["xy_color"] == (0.611, 0.375)
|
assert state.attributes["xy_color"] == (0.611, 0.375)
|
||||||
|
|
||||||
|
|
||||||
@ -794,12 +818,7 @@ async def test_sending_mqtt_commands_and_optimistic2(
|
|||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
expected_features = (
|
expected_features = (
|
||||||
light.SUPPORT_BRIGHTNESS
|
light.SUPPORT_EFFECT | light.SUPPORT_FLASH | light.SUPPORT_TRANSITION
|
||||||
| light.SUPPORT_COLOR
|
|
||||||
| light.SUPPORT_COLOR_TEMP
|
|
||||||
| light.SUPPORT_EFFECT
|
|
||||||
| light.SUPPORT_FLASH
|
|
||||||
| light.SUPPORT_TRANSITION
|
|
||||||
)
|
)
|
||||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
||||||
assert state.attributes.get("brightness") == 95
|
assert state.attributes.get("brightness") == 95
|
||||||
@ -1682,7 +1701,9 @@ async def test_white_scale(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
|
|
||||||
# Turn on the light with brightness
|
# Turn on the light with brightness
|
||||||
async_fire_mqtt_message(
|
async_fire_mqtt_message(
|
||||||
hass, "test_light_bright_scale", '{"state":"ON", "brightness": 99}'
|
hass,
|
||||||
|
"test_light_bright_scale",
|
||||||
|
'{"state":"ON", "brightness": 99, "color_mode":"hs", "color":{"h":180,"s":50}}',
|
||||||
)
|
)
|
||||||
|
|
||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
@ -1726,13 +1747,9 @@ async def test_invalid_values(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
|
|
||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.state == STATE_UNKNOWN
|
assert state.state == STATE_UNKNOWN
|
||||||
expected_features = (
|
color_modes = [light.ColorMode.COLOR_TEMP, light.ColorMode.HS]
|
||||||
light.SUPPORT_BRIGHTNESS
|
assert state.attributes.get(light.ATTR_SUPPORTED_COLOR_MODES) == color_modes
|
||||||
| light.SUPPORT_COLOR
|
expected_features = light.SUPPORT_FLASH | light.SUPPORT_TRANSITION
|
||||||
| light.SUPPORT_COLOR_TEMP
|
|
||||||
| light.SUPPORT_FLASH
|
|
||||||
| light.SUPPORT_TRANSITION
|
|
||||||
)
|
|
||||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
||||||
assert state.attributes.get("rgb_color") is None
|
assert state.attributes.get("rgb_color") is None
|
||||||
assert state.attributes.get("brightness") is None
|
assert state.attributes.get("brightness") is None
|
||||||
@ -1754,8 +1771,7 @@ async def test_invalid_values(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
assert state.attributes.get("rgb_color") == (255, 255, 255)
|
assert state.attributes.get("rgb_color") == (255, 255, 255)
|
||||||
assert state.attributes.get("brightness") == 255
|
assert state.attributes.get("brightness") == 255
|
||||||
assert state.attributes.get("color_temp") == 100
|
assert state.attributes.get("color_temp") is None
|
||||||
|
|
||||||
# Empty color value
|
# Empty color value
|
||||||
async_fire_mqtt_message(
|
async_fire_mqtt_message(
|
||||||
hass,
|
hass,
|
||||||
@ -1814,6 +1830,14 @@ async def test_invalid_values(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
assert state.attributes.get("brightness") == 255
|
assert state.attributes.get("brightness") == 255
|
||||||
|
|
||||||
|
# Unset color and set a valid color temperature
|
||||||
|
async_fire_mqtt_message(
|
||||||
|
hass, "test_light_rgb", '{"state":"ON", "color": null, "color_temp": 100}'
|
||||||
|
)
|
||||||
|
state = hass.states.get("light.test")
|
||||||
|
assert state.state == STATE_ON
|
||||||
|
assert state.attributes.get("color_temp") == 100
|
||||||
|
|
||||||
# Bad color temperature
|
# Bad color temperature
|
||||||
async_fire_mqtt_message(
|
async_fire_mqtt_message(
|
||||||
hass, "test_light_rgb", '{"state":"ON", "color_temp": "badValue"}'
|
hass, "test_light_rgb", '{"state":"ON", "color_temp": "badValue"}'
|
||||||
@ -2199,7 +2223,7 @@ async def test_reloadable_late(hass, mqtt_client_mock, caplog, tmp_path):
|
|||||||
[
|
[
|
||||||
(
|
(
|
||||||
"state_topic",
|
"state_topic",
|
||||||
'{ "state": "ON", "brightness": 200 }',
|
'{ "state": "ON", "brightness": 200, "color_mode":"hs", "color":{"h":180,"s":50} }',
|
||||||
"brightness",
|
"brightness",
|
||||||
200,
|
200,
|
||||||
None,
|
None,
|
||||||
|
@ -167,12 +167,9 @@ async def test_rgb_light(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
|
|
||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.state == STATE_UNKNOWN
|
assert state.state == STATE_UNKNOWN
|
||||||
expected_features = (
|
color_modes = [light.ColorMode.HS]
|
||||||
light.SUPPORT_TRANSITION
|
assert state.attributes.get(light.ATTR_SUPPORTED_COLOR_MODES) == color_modes
|
||||||
| light.SUPPORT_COLOR
|
expected_features = light.SUPPORT_FLASH | light.SUPPORT_TRANSITION
|
||||||
| light.SUPPORT_FLASH
|
|
||||||
| light.SUPPORT_BRIGHTNESS
|
|
||||||
)
|
|
||||||
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
assert state.attributes.get(ATTR_SUPPORTED_FEATURES) == expected_features
|
||||||
|
|
||||||
|
|
||||||
@ -281,8 +278,27 @@ async def test_state_brightness_color_effect_temp_change_via_topic(
|
|||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
assert state.attributes.get("rgb_color") == (255, 128, 63)
|
assert state.attributes.get("rgb_color") == (255, 128, 63)
|
||||||
assert state.attributes.get("brightness") == 255
|
assert state.attributes.get("brightness") == 255
|
||||||
|
assert state.attributes.get("color_temp") is None # rgb color has priority
|
||||||
|
assert state.attributes.get("effect") is None
|
||||||
|
|
||||||
|
# turn on the light
|
||||||
|
async_fire_mqtt_message(hass, "test_light_rgb", "on,255,145,None-None-None,")
|
||||||
|
|
||||||
|
state = hass.states.get("light.test")
|
||||||
|
assert state.state == STATE_ON
|
||||||
|
assert state.attributes.get("rgb_color") == (
|
||||||
|
246,
|
||||||
|
244,
|
||||||
|
255,
|
||||||
|
) # temp converted to color
|
||||||
|
assert state.attributes.get("brightness") == 255
|
||||||
assert state.attributes.get("color_temp") == 145
|
assert state.attributes.get("color_temp") == 145
|
||||||
assert state.attributes.get("effect") is None
|
assert state.attributes.get("effect") is None
|
||||||
|
assert state.attributes.get("xy_color") == (0.317, 0.317) # temp converted to color
|
||||||
|
assert state.attributes.get("hs_color") == (
|
||||||
|
251.249,
|
||||||
|
4.253,
|
||||||
|
) # temp converted to color
|
||||||
|
|
||||||
# make the light state unknown
|
# make the light state unknown
|
||||||
async_fire_mqtt_message(hass, "test_light_rgb", "None")
|
async_fire_mqtt_message(hass, "test_light_rgb", "None")
|
||||||
@ -375,7 +391,7 @@ async def test_sending_mqtt_commands_and_optimistic(
|
|||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
assert state.attributes.get("hs_color") == (100, 100)
|
assert state.attributes.get("hs_color") == (100, 100)
|
||||||
assert state.attributes.get("effect") == "random"
|
assert state.attributes.get("effect") == "random"
|
||||||
assert state.attributes.get("color_temp") == 100
|
assert state.attributes.get("color_temp") is None # hs_color has priority
|
||||||
assert state.attributes.get(ATTR_ASSUMED_STATE)
|
assert state.attributes.get(ATTR_ASSUMED_STATE)
|
||||||
|
|
||||||
await common.async_turn_off(hass, "light.test")
|
await common.async_turn_off(hass, "light.test")
|
||||||
@ -779,7 +795,7 @@ async def test_invalid_values(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.state == STATE_ON
|
assert state.state == STATE_ON
|
||||||
assert state.attributes.get("brightness") == 255
|
assert state.attributes.get("brightness") == 255
|
||||||
assert state.attributes.get("color_temp") == 215
|
assert state.attributes.get("color_temp") is None # hs_color has priority
|
||||||
assert state.attributes.get("rgb_color") == (255, 255, 255)
|
assert state.attributes.get("rgb_color") == (255, 255, 255)
|
||||||
assert state.attributes.get("effect") == "rainbow"
|
assert state.attributes.get("effect") == "rainbow"
|
||||||
|
|
||||||
@ -797,13 +813,6 @@ async def test_invalid_values(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.attributes.get("brightness") == 255
|
assert state.attributes.get("brightness") == 255
|
||||||
|
|
||||||
# bad color temp values
|
|
||||||
async_fire_mqtt_message(hass, "test_light_rgb", "on,,off,255-255-255")
|
|
||||||
|
|
||||||
# color temp should not have changed
|
|
||||||
state = hass.states.get("light.test")
|
|
||||||
assert state.attributes.get("color_temp") == 215
|
|
||||||
|
|
||||||
# bad color values
|
# bad color values
|
||||||
async_fire_mqtt_message(hass, "test_light_rgb", "on,255,a-b-c")
|
async_fire_mqtt_message(hass, "test_light_rgb", "on,255,a-b-c")
|
||||||
|
|
||||||
@ -811,6 +820,19 @@ async def test_invalid_values(hass, mqtt_mock_entry_with_yaml_config):
|
|||||||
state = hass.states.get("light.test")
|
state = hass.states.get("light.test")
|
||||||
assert state.attributes.get("rgb_color") == (255, 255, 255)
|
assert state.attributes.get("rgb_color") == (255, 255, 255)
|
||||||
|
|
||||||
|
# Unset color and set a valid color temperature
|
||||||
|
async_fire_mqtt_message(hass, "test_light_rgb", "on,,215,None-None-None")
|
||||||
|
state = hass.states.get("light.test")
|
||||||
|
assert state.state == STATE_ON
|
||||||
|
assert state.attributes.get("color_temp") == 215
|
||||||
|
|
||||||
|
# bad color temp values
|
||||||
|
async_fire_mqtt_message(hass, "test_light_rgb", "on,,off,")
|
||||||
|
|
||||||
|
# color temp should not have changed
|
||||||
|
state = hass.states.get("light.test")
|
||||||
|
assert state.attributes.get("color_temp") == 215
|
||||||
|
|
||||||
# bad effect value
|
# bad effect value
|
||||||
async_fire_mqtt_message(hass, "test_light_rgb", "on,255,a-b-c,white")
|
async_fire_mqtt_message(hass, "test_light_rgb", "on,255,a-b-c,white")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user