From edadf1812e85e9a3ebbd1dd02cc4d4c542367633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Sat, 21 Mar 2026 23:48:54 +0100 Subject: [PATCH 1/4] fix(q10): normalize status names to canonical values --- roborock/data/b01_q10/b01_q10_code_mappings.py | 6 +++--- tests/data/b01_q10/test_b01_q10_containers.py | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 tests/data/b01_q10/test_b01_q10_containers.py diff --git a/roborock/data/b01_q10/b01_q10_code_mappings.py b/roborock/data/b01_q10/b01_q10_code_mappings.py index aef65c5a..47bffcb8 100644 --- a/roborock/data/b01_q10/b01_q10_code_mappings.py +++ b/roborock/data/b01_q10/b01_q10_code_mappings.py @@ -166,13 +166,13 @@ class YXDeviceState(RoborockModeEnum): UNKNOWN = "unknown", -1 SLEEP_STATE = "sleepstate", 2 STANDBY_STATE = "standbystate", 3 - CLEANING_STATE = "cleaningstate", 5 + CLEANING_STATE = "cleaning", 5 TO_CHARGE_STATE = "tochargestate", 6 REMOTEING_STATE = "remoteingstate", 7 - CHARGING_STATE = "chargingstate", 8 + CHARGING_STATE = "charging", 8 PAUSE_STATE = "pausestate", 10 FAULT_STATE = "faultstate", 12 - UPGRADE_STATE = "upgradestate", 14 + UPGRADE_STATE = "updating", 14 DUSTING = "dusting", 22 CREATING_MAP_STATE = "creatingmapstate", 29 MAP_SAVE_STATE = "mapsavestate", 99 diff --git a/tests/data/b01_q10/test_b01_q10_containers.py b/tests/data/b01_q10/test_b01_q10_containers.py new file mode 100644 index 00000000..29b71452 --- /dev/null +++ b/tests/data/b01_q10/test_b01_q10_containers.py @@ -0,0 +1,17 @@ +"""Test cases for B01 Q10 containers.""" + +from roborock.data.b01_q10 import YXDeviceState + + +def test_q10_status_values_are_canonical() -> None: + """Q10 status enum values should expose canonical names.""" + assert YXDeviceState.CLEANING_STATE.value == "cleaning" + assert YXDeviceState.CHARGING_STATE.value == "charging" + assert YXDeviceState.UPGRADE_STATE.value == "updating" + + +def test_q10_status_codes_map_to_canonical_values() -> None: + """Code-based mapping should return canonical status values.""" + assert YXDeviceState.from_code(5) is YXDeviceState.CLEANING_STATE + assert YXDeviceState.from_code(8) is YXDeviceState.CHARGING_STATE + assert YXDeviceState.from_code(14) is YXDeviceState.UPGRADE_STATE From 7fddf43374e60fc4408372f9254d92c929a86a51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Sat, 21 Mar 2026 23:50:23 +0100 Subject: [PATCH 2/4] fix(q10): normalize YXDeviceState status names to canonical values --- .../data/b01_q10/b01_q10_code_mappings.py | 28 +++++++++---------- tests/data/b01_q10/test_b01_q10_containers.py | 14 ++++++++++ 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/roborock/data/b01_q10/b01_q10_code_mappings.py b/roborock/data/b01_q10/b01_q10_code_mappings.py index 47bffcb8..660a35c5 100644 --- a/roborock/data/b01_q10/b01_q10_code_mappings.py +++ b/roborock/data/b01_q10/b01_q10_code_mappings.py @@ -164,24 +164,24 @@ class YXCleanType(RoborockModeEnum): class YXDeviceState(RoborockModeEnum): UNKNOWN = "unknown", -1 - SLEEP_STATE = "sleepstate", 2 - STANDBY_STATE = "standbystate", 3 + SLEEP_STATE = "sleeping", 2 + STANDBY_STATE = "standby", 3 CLEANING_STATE = "cleaning", 5 - TO_CHARGE_STATE = "tochargestate", 6 - REMOTEING_STATE = "remoteingstate", 7 + TO_CHARGE_STATE = "going_to_charge", 6 + REMOTEING_STATE = "remote_control", 7 CHARGING_STATE = "charging", 8 - PAUSE_STATE = "pausestate", 10 - FAULT_STATE = "faultstate", 12 + PAUSE_STATE = "paused", 10 + FAULT_STATE = "fault", 12 UPGRADE_STATE = "updating", 14 DUSTING = "dusting", 22 - CREATING_MAP_STATE = "creatingmapstate", 29 - MAP_SAVE_STATE = "mapsavestate", 99 - RE_LOCATION_STATE = "relocationstate", 101 - ROBOT_SWEEPING = "robotsweeping", 102 - ROBOT_MOPING = "robotmoping", 103 - ROBOT_SWEEP_AND_MOPING = "robotsweepandmoping", 104 - ROBOT_TRANSITIONING = "robottransitioning", 105 - ROBOT_WAIT_CHARGE = "robotwaitcharge", 108 + CREATING_MAP_STATE = "creating_map", 29 + MAP_SAVE_STATE = "saving_map", 99 + RE_LOCATION_STATE = "relocating", 101 + ROBOT_SWEEPING = "sweeping", 102 + ROBOT_MOPING = "mopping", 103 + ROBOT_SWEEP_AND_MOPING = "sweep_and_mop", 104 + ROBOT_TRANSITIONING = "transitioning", 105 + ROBOT_WAIT_CHARGE = "waiting_to_charge", 108 class YXBackType(RoborockModeEnum): diff --git a/tests/data/b01_q10/test_b01_q10_containers.py b/tests/data/b01_q10/test_b01_q10_containers.py index 29b71452..ba76d3c3 100644 --- a/tests/data/b01_q10/test_b01_q10_containers.py +++ b/tests/data/b01_q10/test_b01_q10_containers.py @@ -5,9 +5,23 @@ def test_q10_status_values_are_canonical() -> None: """Q10 status enum values should expose canonical names.""" + assert YXDeviceState.SLEEP_STATE.value == "sleeping" + assert YXDeviceState.STANDBY_STATE.value == "standby" assert YXDeviceState.CLEANING_STATE.value == "cleaning" + assert YXDeviceState.TO_CHARGE_STATE.value == "going_to_charge" + assert YXDeviceState.REMOTEING_STATE.value == "remote_control" assert YXDeviceState.CHARGING_STATE.value == "charging" + assert YXDeviceState.PAUSE_STATE.value == "paused" + assert YXDeviceState.FAULT_STATE.value == "fault" assert YXDeviceState.UPGRADE_STATE.value == "updating" + assert YXDeviceState.CREATING_MAP_STATE.value == "creating_map" + assert YXDeviceState.MAP_SAVE_STATE.value == "saving_map" + assert YXDeviceState.RE_LOCATION_STATE.value == "relocating" + assert YXDeviceState.ROBOT_SWEEPING.value == "sweeping" + assert YXDeviceState.ROBOT_MOPING.value == "mopping" + assert YXDeviceState.ROBOT_SWEEP_AND_MOPING.value == "sweep_and_mop" + assert YXDeviceState.ROBOT_TRANSITIONING.value == "transitioning" + assert YXDeviceState.ROBOT_WAIT_CHARGE.value == "waiting_to_charge" def test_q10_status_codes_map_to_canonical_values() -> None: From 393c4e5502277db0f7fbc6e3f48f9830d2d38198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Sun, 22 Mar 2026 00:30:38 +0100 Subject: [PATCH 3/4] fix(q10): refactor test for canonical status names using a dictionary --- tests/data/b01_q10/test_b01_q10_containers.py | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/tests/data/b01_q10/test_b01_q10_containers.py b/tests/data/b01_q10/test_b01_q10_containers.py index ba76d3c3..c812282f 100644 --- a/tests/data/b01_q10/test_b01_q10_containers.py +++ b/tests/data/b01_q10/test_b01_q10_containers.py @@ -5,23 +5,30 @@ def test_q10_status_values_are_canonical() -> None: """Q10 status enum values should expose canonical names.""" - assert YXDeviceState.SLEEP_STATE.value == "sleeping" - assert YXDeviceState.STANDBY_STATE.value == "standby" - assert YXDeviceState.CLEANING_STATE.value == "cleaning" - assert YXDeviceState.TO_CHARGE_STATE.value == "going_to_charge" - assert YXDeviceState.REMOTEING_STATE.value == "remote_control" - assert YXDeviceState.CHARGING_STATE.value == "charging" - assert YXDeviceState.PAUSE_STATE.value == "paused" - assert YXDeviceState.FAULT_STATE.value == "fault" - assert YXDeviceState.UPGRADE_STATE.value == "updating" - assert YXDeviceState.CREATING_MAP_STATE.value == "creating_map" - assert YXDeviceState.MAP_SAVE_STATE.value == "saving_map" - assert YXDeviceState.RE_LOCATION_STATE.value == "relocating" - assert YXDeviceState.ROBOT_SWEEPING.value == "sweeping" - assert YXDeviceState.ROBOT_MOPING.value == "mopping" - assert YXDeviceState.ROBOT_SWEEP_AND_MOPING.value == "sweep_and_mop" - assert YXDeviceState.ROBOT_TRANSITIONING.value == "transitioning" - assert YXDeviceState.ROBOT_WAIT_CHARGE.value == "waiting_to_charge" + expected_values = { + YXDeviceState.UNKNOWN: "unknown", + YXDeviceState.SLEEP_STATE: "sleeping", + YXDeviceState.STANDBY_STATE: "standby", + YXDeviceState.CLEANING_STATE: "cleaning", + YXDeviceState.TO_CHARGE_STATE: "going_to_charge", + YXDeviceState.REMOTEING_STATE: "remote_control", + YXDeviceState.CHARGING_STATE: "charging", + YXDeviceState.PAUSE_STATE: "paused", + YXDeviceState.FAULT_STATE: "fault", + YXDeviceState.UPGRADE_STATE: "updating", + YXDeviceState.DUSTING: "dusting", + YXDeviceState.CREATING_MAP_STATE: "creating_map", + YXDeviceState.MAP_SAVE_STATE: "saving_map", + YXDeviceState.RE_LOCATION_STATE: "relocating", + YXDeviceState.ROBOT_SWEEPING: "sweeping", + YXDeviceState.ROBOT_MOPING: "mopping", + YXDeviceState.ROBOT_SWEEP_AND_MOPING: "sweep_and_mop", + YXDeviceState.ROBOT_TRANSITIONING: "transitioning", + YXDeviceState.ROBOT_WAIT_CHARGE: "waiting_to_charge", + } + + assert {state: state.value for state in expected_values} == expected_values + assert all(not value.endswith("state") for value in expected_values.values()) def test_q10_status_codes_map_to_canonical_values() -> None: From 7bc15481e8488610f2955ebee69e2fb874a017d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20BOU=C3=89?= Date: Sun, 22 Mar 2026 00:31:55 +0100 Subject: [PATCH 4/4] fix(q10): add tests for Q10 status values and code mappings --- ...test_b01_q10_containers.py => test_b01_q10_code_mappings.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename tests/data/b01_q10/{test_b01_q10_containers.py => test_b01_q10_code_mappings.py} (97%) diff --git a/tests/data/b01_q10/test_b01_q10_containers.py b/tests/data/b01_q10/test_b01_q10_code_mappings.py similarity index 97% rename from tests/data/b01_q10/test_b01_q10_containers.py rename to tests/data/b01_q10/test_b01_q10_code_mappings.py index c812282f..b6703110 100644 --- a/tests/data/b01_q10/test_b01_q10_containers.py +++ b/tests/data/b01_q10/test_b01_q10_code_mappings.py @@ -1,4 +1,4 @@ -"""Test cases for B01 Q10 containers.""" +"""Test cases for B01 Q10 code mappings.""" from roborock.data.b01_q10 import YXDeviceState