diff --git a/homeassistant/components/tplink/light.py b/homeassistant/components/tplink/light.py index 08e5507baf4..4d7d7a6acc9 100644 --- a/homeassistant/components/tplink/light.py +++ b/homeassistant/components/tplink/light.py @@ -337,7 +337,12 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): async def async_turn_on(self, **kwargs: Any) -> None: """Turn the light on.""" brightness, transition = self._async_extract_brightness_transition(**kwargs) - if ATTR_COLOR_TEMP in kwargs: + if ATTR_EFFECT in kwargs: + await self.device.set_effect(kwargs[ATTR_EFFECT]) + # We need to set the brightness separately until upstream allows defining it for set_effect. + if brightness is not None: + await self._async_turn_on_with_brightness(brightness, transition) + elif ATTR_COLOR_TEMP in kwargs: if self.effect: # If there is an effect in progress # we have to set an HSV value to clear the effect @@ -348,8 +353,6 @@ class TPLinkSmartLightStrip(TPLinkSmartBulb): ) elif ATTR_HS_COLOR in kwargs: await self._async_set_hsv(kwargs[ATTR_HS_COLOR], brightness, transition) - elif ATTR_EFFECT in kwargs: - await self.device.set_effect(kwargs[ATTR_EFFECT]) else: await self._async_turn_on_with_brightness(brightness, transition) diff --git a/tests/components/tplink/test_light.py b/tests/components/tplink/test_light.py index e5d20276490..2a5ce81af31 100644 --- a/tests/components/tplink/test_light.py +++ b/tests/components/tplink/test_light.py @@ -434,6 +434,19 @@ async def test_smart_strip_effects(hass: HomeAssistant) -> None: strip.set_effect.assert_called_once_with("Effect2") strip.set_effect.reset_mock() + # Setting an effect with brightness calls set_brightness implicitly + await hass.services.async_call( + LIGHT_DOMAIN, + "turn_on", + {ATTR_ENTITY_ID: entity_id, ATTR_EFFECT: "Effect2", ATTR_BRIGHTNESS: 255}, + blocking=True, + ) + strip.set_effect.assert_called_once_with("Effect2") + strip.set_effect.reset_mock() + + strip.set_brightness.assert_called_with(100, transition=None) + strip.set_brightness.reset_mock() + strip.effect = {"name": "Effect1", "enable": 0, "custom": 0} async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=10)) await hass.async_block_till_done()