Add brightness to lightstrip's set_effect (#415)

* Add brightness parameter to lightstrip's set_effect

* Use None as default as effects have different default brightnesses
This commit is contained in:
Teemu R 2023-01-21 00:25:59 +01:00 committed by GitHub
parent bfafbf9512
commit 6e7a588d40
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 3 deletions

View File

@ -89,16 +89,19 @@ class SmartLightStrip(SmartBulb):
@requires_update @requires_update
async def set_effect( async def set_effect(
self, self, effect: str, *, brightness: Optional[int] = None
effect: str,
) -> None: ) -> None:
"""Set an effect on the device. """Set an effect on the device.
:param str effect: The effect to set :param str effect: The effect to set
:param int brightness: The wanted brightness
""" """
if effect not in EFFECT_MAPPING_V1: if effect not in EFFECT_MAPPING_V1:
raise SmartDeviceException(f"The effect {effect} is not a built in effect.") raise SmartDeviceException(f"The effect {effect} is not a built in effect.")
await self.set_custom_effect(EFFECT_MAPPING_V1[effect]) effect_dict = EFFECT_MAPPING_V1[effect]
if brightness is not None:
effect_dict["brightness"] = brightness
await self.set_custom_effect(effect_dict)
@requires_update @requires_update
async def set_custom_effect( async def set_custom_effect(

View File

@ -30,6 +30,23 @@ async def test_effects_lightstrip_set_effect(dev: SmartLightStrip):
assert dev.state_information["Effect"] == "Candy Cane" assert dev.state_information["Effect"] == "Candy Cane"
@lightstrip
@pytest.mark.parametrize("brightness", [100, 50])
async def test_effects_lightstrip_set_effect_brightness(
dev: SmartLightStrip, brightness, mocker
):
query_helper = mocker.patch("kasa.SmartLightStrip._query_helper")
if brightness == 100: # test that default brightness works
await dev.set_effect("Candy Cane")
else:
await dev.set_effect("Candy Cane", brightness=brightness)
args, kwargs = query_helper.call_args_list[0]
payload = args[2]
assert payload["brightness"] == brightness
@lightstrip @lightstrip
async def test_effects_lightstrip_has_effects(dev: SmartLightStrip): async def test_effects_lightstrip_has_effects(dev: SmartLightStrip):
assert dev.has_effects is True assert dev.has_effects is True