Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 2 additions & 66 deletions homeassistant/components/template/light.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,10 @@
ATTR_EFFECT,
ATTR_HS_COLOR,
ATTR_TRANSITION,
ATTR_WHITE_VALUE,
ENTITY_ID_FORMAT,
SUPPORT_BRIGHTNESS,
SUPPORT_COLOR,
SUPPORT_COLOR_TEMP,
SUPPORT_WHITE_VALUE,
LightEntity,
LightEntityFeature,
)
Expand Down Expand Up @@ -88,16 +86,14 @@
vol.Optional(CONF_TEMPERATURE_TEMPLATE): cv.template,
vol.Optional(CONF_UNIQUE_ID): cv.string,
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
vol.Optional(CONF_WHITE_VALUE_ACTION): cv.SCRIPT_SCHEMA,
vol.Optional(CONF_WHITE_VALUE_TEMPLATE): cv.template,
}
).extend(TEMPLATE_ENTITY_COMMON_SCHEMA_LEGACY.schema),
)

PLATFORM_SCHEMA = vol.All(
# CONF_WHITE_VALUE_* is deprecated, support will be removed in release 2022.9
cv.deprecated(CONF_WHITE_VALUE_ACTION),
cv.deprecated(CONF_WHITE_VALUE_TEMPLATE),
cv.removed(CONF_WHITE_VALUE_ACTION),
cv.removed(CONF_WHITE_VALUE_TEMPLATE),
PLATFORM_SCHEMA.extend(
{vol.Required(CONF_LIGHTS): cv.schema_with_slug_keys(LIGHT_SCHEMA)}
),
Expand Down Expand Up @@ -171,12 +167,6 @@ def __init__(
if (color_action := config.get(CONF_COLOR_ACTION)) is not None:
self._color_script = Script(hass, color_action, friendly_name, DOMAIN)
self._color_template = config.get(CONF_COLOR_TEMPLATE)
self._white_value_script = None
if (white_value_action := config.get(CONF_WHITE_VALUE_ACTION)) is not None:
self._white_value_script = Script(
hass, white_value_action, friendly_name, DOMAIN
)
self._white_value_template = config.get(CONF_WHITE_VALUE_TEMPLATE)
self._effect_script = None
if (effect_action := config.get(CONF_EFFECT_ACTION)) is not None:
self._effect_script = Script(hass, effect_action, friendly_name, DOMAIN)
Expand All @@ -190,7 +180,6 @@ def __init__(
self._brightness = None
self._temperature = None
self._color = None
self._white_value = None
self._effect = None
self._effect_list = None
self._max_mireds = None
Expand Down Expand Up @@ -223,11 +212,6 @@ def min_mireds(self) -> int:

return super().min_mireds

@property
def white_value(self) -> int | None:
"""Return the white value."""
return self._white_value

@property
def hs_color(self) -> tuple[float, float] | None:
"""Return the hue and saturation color value [float, float]."""
Expand All @@ -253,8 +237,6 @@ def supported_features(self) -> int:
supported_features |= SUPPORT_COLOR_TEMP
if self._color_script is not None:
supported_features |= SUPPORT_COLOR
if self._white_value_script is not None:
supported_features |= SUPPORT_WHITE_VALUE
if self._effect_script is not None:
supported_features |= LightEntityFeature.EFFECT
if self._supports_transition is True:
Expand Down Expand Up @@ -312,14 +294,6 @@ async def async_added_to_hass(self) -> None:
self._update_color,
none_on_template_error=True,
)
if self._white_value_template:
self.add_template_attribute(
"_white_value",
self._white_value_template,
None,
self._update_white_value,
none_on_template_error=True,
)
if self._effect_list_template:
self.add_template_attribute(
"_effect_list",
Expand Down Expand Up @@ -361,13 +335,6 @@ async def async_turn_on(self, **kwargs: Any) -> None:
self._brightness = kwargs[ATTR_BRIGHTNESS]
optimistic_set = True

if self._white_value_template is None and ATTR_WHITE_VALUE in kwargs:
_LOGGER.debug(
"Optimistically setting white value to %s", kwargs[ATTR_WHITE_VALUE]
)
self._white_value = kwargs[ATTR_WHITE_VALUE]
optimistic_set = True

if self._temperature_template is None and ATTR_COLOR_TEMP in kwargs:
_LOGGER.debug(
"Optimistically setting color temperature to %s",
Expand Down Expand Up @@ -404,14 +371,6 @@ async def async_turn_on(self, **kwargs: Any) -> None:
run_variables=common_params,
context=self._context,
)
elif ATTR_WHITE_VALUE in kwargs and self._white_value_script:
common_params["white_value"] = kwargs[ATTR_WHITE_VALUE]

await self.async_run_script(
self._white_value_script,
run_variables=common_params,
context=self._context,
)
elif ATTR_EFFECT in kwargs and self._effect_script:
effect = kwargs[ATTR_EFFECT]
if effect not in self._effect_list:
Expand Down Expand Up @@ -486,29 +445,6 @@ def _update_brightness(self, brightness):
)
self._brightness = None

@callback
def _update_white_value(self, white_value):
"""Update the white value from the template."""
try:
if white_value in (None, "None", ""):
self._white_value = None
return
if 0 <= int(white_value) <= 255:
self._white_value = int(white_value)
else:
_LOGGER.error(
"Received invalid white value: %s for entity %s. Expected: 0-255",
white_value,
self.entity_id,
)
self._white_value = None
except ValueError:
_LOGGER.error(
"Template must supply an integer white_value from 0-255, or 'None'",
exc_info=True,
)
self._white_value = None

@callback
def _update_effect_list(self, effect_list):
"""Update the effect list from the template."""
Expand Down
93 changes: 0 additions & 93 deletions tests/components/template/test_light.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,10 @@
ATTR_EFFECT,
ATTR_HS_COLOR,
ATTR_TRANSITION,
ATTR_WHITE_VALUE,
SUPPORT_BRIGHTNESS,
SUPPORT_COLOR,
SUPPORT_COLOR_TEMP,
SUPPORT_TRANSITION,
SUPPORT_WHITE_VALUE,
ColorMode,
LightEntityFeature,
)
Expand Down Expand Up @@ -616,97 +614,6 @@ async def test_off_action_optimistic(
assert state.attributes["supported_features"] == supported_features


@pytest.mark.parametrize("count", [1])
@pytest.mark.parametrize(
"supported_features,supported_color_modes,expected_color_mode",
[(SUPPORT_WHITE_VALUE, [ColorMode.RGBW], ColorMode.UNKNOWN)],
)
@pytest.mark.parametrize(
"light_config",
[
{
"test_template_light": {
**OPTIMISTIC_WHITE_VALUE_LIGHT_CONFIG,
"value_template": "{{1 == 1}}",
}
},
],
)
async def test_white_value_action_no_template(
hass,
setup_light,
calls,
supported_color_modes,
supported_features,
expected_color_mode,
):
"""Test setting white value with optimistic template."""
state = hass.states.get("light.test_template_light")
assert state.attributes.get("white_value") is None

await hass.services.async_call(
light.DOMAIN,
SERVICE_TURN_ON,
{ATTR_ENTITY_ID: "light.test_template_light", ATTR_WHITE_VALUE: 124},
blocking=True,
)

assert len(calls) == 1
assert calls[-1].data["action"] == "set_white_value"
assert calls[-1].data["caller"] == "light.test_template_light"
assert calls[-1].data["white_value"] == 124

state = hass.states.get("light.test_template_light")
assert state.attributes.get("white_value") == 124
assert state.state == STATE_ON
assert state.attributes["color_mode"] == expected_color_mode # hs_color is None
assert state.attributes["supported_color_modes"] == supported_color_modes
assert state.attributes["supported_features"] == supported_features


@pytest.mark.parametrize("count", [1])
@pytest.mark.parametrize(
"supported_features,supported_color_modes,expected_color_mode",
[(SUPPORT_WHITE_VALUE, [ColorMode.RGBW], ColorMode.UNKNOWN)],
)
@pytest.mark.parametrize(
"expected_white_value,white_value_template",
[
(255, "{{255}}"),
(None, "{{256}}"),
(None, "{{x-12}}"),
(None, "{{ none }}"),
(None, ""),
],
)
async def test_white_value_template(
hass,
expected_white_value,
supported_features,
supported_color_modes,
expected_color_mode,
count,
white_value_template,
):
"""Test the template for the white value."""
light_config = {
"test_template_light": {
**OPTIMISTIC_WHITE_VALUE_LIGHT_CONFIG,
"value_template": "{{ 1 == 1 }}",
"white_value_template": white_value_template,
}
}
await async_setup_light(hass, count, light_config)

state = hass.states.get("light.test_template_light")
assert state is not None
assert state.attributes.get("white_value") == expected_white_value
assert state.state == STATE_ON
assert state.attributes["color_mode"] == expected_color_mode # hs_color is None
assert state.attributes["supported_color_modes"] == supported_color_modes
assert state.attributes["supported_features"] == supported_features


@pytest.mark.parametrize("count", [1])
@pytest.mark.parametrize(
"supported_features,supported_color_modes,expected_color_mode",
Expand Down