From a6e9a312a309c64eb96118cacfb32f8ca8d79f2d Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Tue, 2 Jun 2020 00:20:52 +0200 Subject: [PATCH] deCONZ - Don't send off signals to light if already off (#36357) --- homeassistant/components/deconz/light.py | 3 +++ tests/components/deconz/test_light.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/homeassistant/components/deconz/light.py b/homeassistant/components/deconz/light.py index 566ab563ca5..513be407907 100644 --- a/homeassistant/components/deconz/light.py +++ b/homeassistant/components/deconz/light.py @@ -186,6 +186,9 @@ class DeconzLight(DeconzDevice, LightEntity): async def async_turn_off(self, **kwargs): """Turn off light.""" + if not self._device.state: + return + data = {"on": False} if ATTR_TRANSITION in kwargs: diff --git a/tests/components/deconz/test_light.py b/tests/components/deconz/test_light.py index 782b2bf494b..d070bd5b420 100644 --- a/tests/components/deconz/test_light.py +++ b/tests/components/deconz/test_light.py @@ -189,6 +189,26 @@ async def test_lights_and_groups(hass): json={"xy": (0.411, 0.351), "alert": "lselect", "effect": "none"}, ) + with patch.object(rgb_light_device, "_request", return_value=True) as set_callback: + await hass.services.async_call( + light.DOMAIN, + light.SERVICE_TURN_OFF, + {"entity_id": "light.rgb_light", "transition": 5, "flash": "short"}, + blocking=True, + ) + await hass.async_block_till_done() + assert not set_callback.called + + state_changed_event = { + "t": "event", + "e": "changed", + "r": "lights", + "id": "1", + "state": {"on": True}, + } + gateway.api.event_handler(state_changed_event) + await hass.async_block_till_done() + with patch.object(rgb_light_device, "_request", return_value=True) as set_callback: await hass.services.async_call( light.DOMAIN,