diff --git a/kasa/iot/iotbulb.py b/kasa/iot/iotbulb.py index 81d647e8..97826f2a 100644 --- a/kasa/iot/iotbulb.py +++ b/kasa/iot/iotbulb.py @@ -326,6 +326,7 @@ class IotBulb(IotDevice): self, state: dict, *, transition: int | None = None ) -> dict: """Set the light state.""" + state = {**state} if transition is not None: state["transition_period"] = transition diff --git a/kasa/iot/modules/light.py b/kasa/iot/modules/light.py index 358771a6..c4d6cb09 100644 --- a/kasa/iot/modules/light.py +++ b/kasa/iot/modules/light.py @@ -230,6 +230,8 @@ class Light(IotModule, LightInterface): state_dict["on_off"] = 1 else: state_dict["on_off"] = int(state.light_on) + # Remove the light_on from the dict + state_dict.pop("light_on", None) return await bulb._set_light_state(state_dict, transition=transition) @property diff --git a/kasa/tests/test_bulb.py b/kasa/tests/test_bulb.py index c78c539c..002cbd41 100644 --- a/kasa/tests/test_bulb.py +++ b/kasa/tests/test_bulb.py @@ -9,7 +9,7 @@ from voluptuous import ( Schema, ) -from kasa import Device, DeviceType, IotLightPreset, KasaException, Module +from kasa import Device, DeviceType, IotLightPreset, KasaException, LightState, Module from kasa.iot import IotBulb, IotDimmer from .conftest import ( @@ -96,6 +96,22 @@ async def test_set_hsv_transition(dev: IotBulb, mocker): ) +@bulb_iot +async def test_light_set_state(dev: IotBulb, mocker): + """Testing setting LightState on the light module.""" + light = dev.modules.get(Module.Light) + assert light + set_light_state = mocker.spy(dev, "_set_light_state") + state = LightState(light_on=True) + await light.set_state(state) + + set_light_state.assert_called_with({"on_off": 1}, transition=None) + state = LightState(light_on=False) + await light.set_state(state) + + set_light_state.assert_called_with({"on_off": 0}, transition=None) + + @color_bulb @turn_on async def test_invalid_hsv(dev: Device, turn_on):