From be5ce08f4507ba54a52d954fbaf87c31fa6364f3 Mon Sep 17 00:00:00 2001 From: Davide Fiocco Date: Sun, 1 Mar 2026 23:36:49 +0100 Subject: [PATCH] Fix mop set_waterlevel sending setCleanAttr without type field (#1667) --- kasa/smart/modules/mop.py | 7 ++++--- tests/smart/modules/test_mop.py | 7 +++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/kasa/smart/modules/mop.py b/kasa/smart/modules/mop.py index 851279e9..cc6cb84f 100644 --- a/kasa/smart/modules/mop.py +++ b/kasa/smart/modules/mop.py @@ -85,6 +85,7 @@ class Mop(SmartModule): if mode not in name_to_value: raise ValueError("Invalid waterlevel %s, available %s", mode, name_to_value) - settings = self._settings.copy() - settings["cistern"] = name_to_value[mode] - return await self.call("setCleanAttr", settings) + return await self.call( + "setCleanAttr", + {"cistern": name_to_value[mode], "type": "global"}, + ) diff --git a/tests/smart/modules/test_mop.py b/tests/smart/modules/test_mop.py index 0c638ca3..b6492aa3 100644 --- a/tests/smart/modules/test_mop.py +++ b/tests/smart/modules/test_mop.py @@ -45,10 +45,9 @@ async def test_mop_waterlevel(dev: SmartDevice, mocker: MockerFixture): new_level = Waterlevel.High await mop_module.set_waterlevel(new_level.name) - params = mop_module._settings.copy() - params["cistern"] = new_level.value - - call.assert_called_with("setCleanAttr", params) + call.assert_called_with( + "setCleanAttr", {"cistern": new_level.value, "type": "global"} + ) await dev.update()