From e1980fee495ba5d8610033163fe7376491836769 Mon Sep 17 00:00:00 2001 From: MarkusMWolff <43087139+MarkusMWolff@users.noreply.github.com> Date: Mon, 30 Mar 2026 18:48:25 +0200 Subject: [PATCH 1/7] Add FREE_CLEAN option to cleaning modes --- deebot_client/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/deebot_client/models.py b/deebot_client/models.py index c3493a95d..2502556fa 100644 --- a/deebot_client/models.py +++ b/deebot_client/models.py @@ -81,6 +81,7 @@ class CleanMode(StrEnumWithXml): AUTO = "auto", "auto" SPOT_AREA = "spotArea", "SpotArea" CUSTOM_AREA = "customArea", "spot" + FREE_CLEAN = "freeClean", "freeClean" @dataclass(frozen=True) From 2bbfc8bf269881ae9551c3a9b9b87801250b533a Mon Sep 17 00:00:00 2001 From: MarkusMWolff <43087139+MarkusMWolff@users.noreply.github.com> Date: Mon, 30 Mar 2026 18:49:58 +0200 Subject: [PATCH 2/7] Update clean command to use FREE_CLEAN mode --- deebot_client/commands/json/clean.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deebot_client/commands/json/clean.py b/deebot_client/commands/json/clean.py index 3e8dafd59..8f9a54851 100644 --- a/deebot_client/commands/json/clean.py +++ b/deebot_client/commands/json/clean.py @@ -96,8 +96,8 @@ class CleanAreaV2(CleanV2): def __init__(self, mode: CleanMode, area: list[int | float], _: int = 1) -> None: self._additional_content = { - "type": mode.value, - "value": ",".join(str(i) for i in area), + "type": CleanMode.FREE_CLEAN.value, + "value": ";".join(("1," + str(i)) for i in area), } super().__init__(CleanAction.START) From a1ad47b32454b94a97fa963739da2f07ba529107 Mon Sep 17 00:00:00 2001 From: MarkusMWolff <43087139+MarkusMWolff@users.noreply.github.com> Date: Mon, 30 Mar 2026 18:52:25 +0200 Subject: [PATCH 3/7] Update test case for CleanAreaV2 with new content --- tests/commands/json/test_clean.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/commands/json/test_clean.py b/tests/commands/json/test_clean.py index cd2fc5851..9d6d0e33a 100644 --- a/tests/commands/json/test_clean.py +++ b/tests/commands/json/test_clean.py @@ -115,7 +115,7 @@ async def test_Clean_act( ), ( CleanAreaV2(CleanMode.SPOT_AREA, [5, 8]), - {"act": "start", "content": {"type": "spotArea", "value": "5,8"}}, + {"act": "start", "content": {"type": "freeClean", "value": "1,5;1,8"}}, ), ( CleanArea(CleanMode.CUSTOM_AREA, [1580.0, -4087.0, 3833.0, -7525.0]), From 4b5773765daa270db2da556cac4b372e9952d65d Mon Sep 17 00:00:00 2001 From: MarkusMWolff <43087139+MarkusMWolff@users.noreply.github.com> Date: Mon, 30 Mar 2026 18:56:53 +0200 Subject: [PATCH 4/7] Set CleanMode to FREE_CLEAN in CleanAreaV2 --- deebot_client/commands/json/clean.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deebot_client/commands/json/clean.py b/deebot_client/commands/json/clean.py index 8f9a54851..b2036619d 100644 --- a/deebot_client/commands/json/clean.py +++ b/deebot_client/commands/json/clean.py @@ -95,8 +95,9 @@ class CleanAreaV2(CleanV2): """Clean area command.""" def __init__(self, mode: CleanMode, area: list[int | float], _: int = 1) -> None: + mode = CleanMode.FREE_CLEAN self._additional_content = { - "type": CleanMode.FREE_CLEAN.value, + "type": mode.value, "value": ";".join(("1," + str(i)) for i in area), } super().__init__(CleanAction.START) From 316b1983939e38c4b0ec667d1e7bb12266614236 Mon Sep 17 00:00:00 2001 From: MarkusMWolff <43087139+MarkusMWolff@users.noreply.github.com> Date: Mon, 30 Mar 2026 19:38:03 +0200 Subject: [PATCH 5/7] Fix CleanAreaV2 initialization for SPOT_AREA mode Adjust CleanAreaV2 to handle SPOT_AREA mode correctly. --- deebot_client/commands/json/clean.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/deebot_client/commands/json/clean.py b/deebot_client/commands/json/clean.py index b2036619d..1645972a2 100644 --- a/deebot_client/commands/json/clean.py +++ b/deebot_client/commands/json/clean.py @@ -95,11 +95,16 @@ class CleanAreaV2(CleanV2): """Clean area command.""" def __init__(self, mode: CleanMode, area: list[int | float], _: int = 1) -> None: - mode = CleanMode.FREE_CLEAN - self._additional_content = { - "type": mode.value, - "value": ";".join(("1," + str(i)) for i in area), - } + if mode == CleanMode.SPOT_AREA + self._additional_content = { + "type": CleanMode.FREE_CLEAN.value, + "value": ";".join(("1," + str(i)) for i in area), + } + else + self._additional_content = { + "type": mode, + "value": ",".join(str(i) for i in area), + } super().__init__(CleanAction.START) def _get_args(self, action: CleanAction) -> dict[str, Any]: From 156569d619647d5e69e8c88fd17ab9a036af2349 Mon Sep 17 00:00:00 2001 From: MarkusMWolff <43087139+MarkusMWolff@users.noreply.github.com> Date: Mon, 30 Mar 2026 19:43:05 +0200 Subject: [PATCH 6/7] Fix syntax error in CleanAreaV2 constructor --- deebot_client/commands/json/clean.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deebot_client/commands/json/clean.py b/deebot_client/commands/json/clean.py index 1645972a2..3d7ee2d88 100644 --- a/deebot_client/commands/json/clean.py +++ b/deebot_client/commands/json/clean.py @@ -95,7 +95,7 @@ class CleanAreaV2(CleanV2): """Clean area command.""" def __init__(self, mode: CleanMode, area: list[int | float], _: int = 1) -> None: - if mode == CleanMode.SPOT_AREA + if mode == CleanMode.SPOT_AREA: self._additional_content = { "type": CleanMode.FREE_CLEAN.value, "value": ";".join(("1," + str(i)) for i in area), From 34892612dd3743ffa5cb0d9bb166c1274bf66d6b Mon Sep 17 00:00:00 2001 From: MarkusMWolff <43087139+MarkusMWolff@users.noreply.github.com> Date: Mon, 30 Mar 2026 19:45:40 +0200 Subject: [PATCH 7/7] Fix syntax error in else statement --- deebot_client/commands/json/clean.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deebot_client/commands/json/clean.py b/deebot_client/commands/json/clean.py index 3d7ee2d88..920a24b05 100644 --- a/deebot_client/commands/json/clean.py +++ b/deebot_client/commands/json/clean.py @@ -100,7 +100,7 @@ def __init__(self, mode: CleanMode, area: list[int | float], _: int = 1) -> None "type": CleanMode.FREE_CLEAN.value, "value": ";".join(("1," + str(i)) for i in area), } - else + else: self._additional_content = { "type": mode, "value": ",".join(str(i) for i in area),