diff --git a/homeassistant/components/zwave_js/light.py b/homeassistant/components/zwave_js/light.py index 595f8f50cdc..acfa22e5847 100644 --- a/homeassistant/components/zwave_js/light.py +++ b/homeassistant/components/zwave_js/light.py @@ -164,15 +164,14 @@ class ZwaveLight(ZWaveBaseEntity, LightEntity): await self._async_set_color("Red", red) await self._async_set_color("Green", green) await self._async_set_color("Blue", blue) - else: - # turn off rgb when setting white values - await self._async_set_color("Red", 0) - await self._async_set_color("Green", 0) - await self._async_set_color("Blue", 0) # Color temperature color_temp = kwargs.get(ATTR_COLOR_TEMP) if color_temp is not None and self._supports_color_temp: + # turn off rgb when setting white values + await self._async_set_color("Red", 0) + await self._async_set_color("Green", 0) + await self._async_set_color("Blue", 0) # Limit color temp to min/max values cold = max( 0, @@ -192,6 +191,10 @@ class ZwaveLight(ZWaveBaseEntity, LightEntity): # White value white_value = kwargs.get(ATTR_WHITE_VALUE) if white_value is not None and self._supports_white_value: + # turn off rgb when setting white values + await self._async_set_color("Red", 0) + await self._async_set_color("Green", 0) + await self._async_set_color("Blue", 0) await self._async_set_color("Warm White", white_value) # set brightness @@ -213,9 +216,6 @@ class ZwaveLight(ZWaveBaseEntity, LightEntity): # guard for unsupported command if cur_zwave_value is None: return - # no need to send same value - if cur_zwave_value.value == new_value: - return # actually set the new color value target_zwave_value = self.get_zwave_value( "targetColor", @@ -240,9 +240,6 @@ class ZwaveLight(ZWaveBaseEntity, LightEntity): # Zwave multilevel switches use a range of [0, 99] to control brightness. zwave_brightness = byte_to_zwave_brightness(brightness) - if self.info.primary_value.value == zwave_brightness: - # no point in setting same brightness - return # set transition value before sending new brightness await self._async_set_transition_duration(transition) # setting a value requires setting targetValue diff --git a/tests/components/zwave_js/test_light.py b/tests/components/zwave_js/test_light.py index 56c008e8132..a1b2318022b 100644 --- a/tests/components/zwave_js/test_light.py +++ b/tests/components/zwave_js/test_light.py @@ -92,7 +92,7 @@ async def test_light(hass, client, bulb_6_multi_color, integration): blocking=True, ) - assert len(client.async_send_command.call_args_list) == 0 + assert len(client.async_send_command.call_args_list) == 1 client.async_send_command.reset_mock() @@ -136,7 +136,7 @@ async def test_light(hass, client, bulb_6_multi_color, integration): blocking=True, ) - assert len(client.async_send_command.call_args_list) == 4 + assert len(client.async_send_command.call_args_list) == 5 warm_args = client.async_send_command.call_args_list[0][0][0] # warm white 0 assert warm_args["command"] == "node.set_value" assert warm_args["nodeId"] == 39 @@ -147,7 +147,18 @@ async def test_light(hass, client, bulb_6_multi_color, integration): assert warm_args["valueId"]["property"] == "targetColor" assert warm_args["valueId"]["propertyName"] == "targetColor" assert warm_args["value"] == 0 - red_args = client.async_send_command.call_args_list[1][0][0] # red 255 + + cold_args = client.async_send_command.call_args_list[1][0][0] # cold white 0 + assert cold_args["command"] == "node.set_value" + assert cold_args["nodeId"] == 39 + assert cold_args["valueId"]["commandClassName"] == "Color Switch" + assert cold_args["valueId"]["commandClass"] == 51 + assert cold_args["valueId"]["endpoint"] == 0 + assert cold_args["valueId"]["metadata"]["label"] == "Target value (Cold White)" + assert cold_args["valueId"]["property"] == "targetColor" + assert cold_args["valueId"]["propertyName"] == "targetColor" + assert cold_args["value"] == 0 + red_args = client.async_send_command.call_args_list[2][0][0] # red 255 assert red_args["command"] == "node.set_value" assert red_args["nodeId"] == 39 assert red_args["valueId"]["commandClassName"] == "Color Switch" @@ -157,7 +168,7 @@ async def test_light(hass, client, bulb_6_multi_color, integration): assert red_args["valueId"]["property"] == "targetColor" assert red_args["valueId"]["propertyName"] == "targetColor" assert red_args["value"] == 255 - green_args = client.async_send_command.call_args_list[2][0][0] # green 76 + green_args = client.async_send_command.call_args_list[3][0][0] # green 76 assert green_args["command"] == "node.set_value" assert green_args["nodeId"] == 39 assert green_args["valueId"]["commandClassName"] == "Color Switch" @@ -167,7 +178,7 @@ async def test_light(hass, client, bulb_6_multi_color, integration): assert green_args["valueId"]["property"] == "targetColor" assert green_args["valueId"]["propertyName"] == "targetColor" assert green_args["value"] == 76 - blue_args = client.async_send_command.call_args_list[3][0][0] # blue 255 + blue_args = client.async_send_command.call_args_list[4][0][0] # blue 255 assert blue_args["command"] == "node.set_value" assert blue_args["nodeId"] == 39 assert blue_args["valueId"]["commandClassName"] == "Color Switch" @@ -225,7 +236,7 @@ async def test_light(hass, client, bulb_6_multi_color, integration): blocking=True, ) - assert len(client.async_send_command.call_args_list) == 0 + assert len(client.async_send_command.call_args_list) == 5 client.async_send_command.reset_mock() @@ -343,7 +354,7 @@ async def test_light(hass, client, bulb_6_multi_color, integration): blocking=True, ) - assert len(client.async_send_command.call_args_list) == 0 + assert len(client.async_send_command.call_args_list) == 5 client.async_send_command.reset_mock()