Do not send light_on value to iot bulb set_state (#1090)

Passing this extra value caused the `ignore_default` check in the `IotBulb._set_light_state`
method to fail which causes the device to come back on to the default state.
This commit is contained in:
Steven B. 2024-07-31 15:56:07 +01:00 committed by GitHub
parent cb7e904d30
commit cb0077f634
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 1 deletions

View File

@ -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

View File

@ -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

View File

@ -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):