From 4da3553f516af986d2929704e26578bdbd10ca44 Mon Sep 17 00:00:00 2001 From: zhiar <172391900+epinethrone@users.noreply.github.com> Date: Mon, 6 Jul 2026 08:11:15 +0200 Subject: [PATCH] feat: add QV 35A dock type code (21) to RoborockDockTypeCode The Roborock QV 35A (roborock.vacuum.a168) ships a wash/fill/dry dock that reports dock_type 21, which was missing from RoborockDockTypeCode. It therefore resolved to unknown, is_wash_n_fill_dock() returned False, and the wash_towel_mode trait was skipped - leaving the clean-water, dirty-water and strainer entities unavailable in downstream consumers despite the device reporting the data (dss, strainer_work_times). Mirrors #829 (Qrevo S5V, 22). Fixes #864. --- roborock/data/v1/v1_code_mappings.py | 1 + roborock/device_features.py | 1 + tests/data/v1/test_v1_containers.py | 9 +++++++++ tests/devices/traits/v1/test_dust_collection_mode.py | 1 + tests/devices/traits/v1/test_smart_wash_params.py | 1 + tests/devices/traits/v1/test_wash_towel_mode.py | 1 + 6 files changed, 14 insertions(+) diff --git a/roborock/data/v1/v1_code_mappings.py b/roborock/data/v1/v1_code_mappings.py index 730be40e..2a76ee88 100644 --- a/roborock/data/v1/v1_code_mappings.py +++ b/roborock/data/v1/v1_code_mappings.py @@ -664,6 +664,7 @@ class RoborockDockTypeCode(RoborockEnum): saros_r10_dock = 16 qrevo_curv_dock = 17 saros_10_dock = 18 + qv_35a_dock = 21 qrevo_s5v_dock = 22 saros_20_dock = 27 diff --git a/roborock/device_features.py b/roborock/device_features.py index 9b03b972..42d65127 100644 --- a/roborock/device_features.py +++ b/roborock/device_features.py @@ -653,6 +653,7 @@ def get_supported_features(self) -> list[str]: RoborockDockTypeCode.qrevo_s_dock, RoborockDockTypeCode.saros_r10_dock, RoborockDockTypeCode.qrevo_curv_dock, + RoborockDockTypeCode.qv_35a_dock, RoborockDockTypeCode.qrevo_s5v_dock, RoborockDockTypeCode.saros_20_dock, ] diff --git a/tests/data/v1/test_v1_containers.py b/tests/data/v1/test_v1_containers.py index f8625eb3..44f627d4 100644 --- a/tests/data/v1/test_v1_containers.py +++ b/tests/data/v1/test_v1_containers.py @@ -272,6 +272,15 @@ def test_qrevo_s5v_dock_type(): assert s.dock_type.value == 22 +def test_qv_35a_dock_type(): + """Test that dock type code 21 (Roborock QV 35A dock) is properly recognized.""" + modified_status = STATUS.copy() + modified_status["dock_type"] = 21 + s = S7MaxVStatus.from_dict(modified_status) + assert s.dock_type == RoborockDockTypeCode.qv_35a_dock + assert s.dock_type.value == 21 + + def test_multi_maps_list_info(snapshot: SnapshotAssertion) -> None: """Test that MultiMapsListInfo can be deserialized correctly.""" data = { diff --git a/tests/devices/traits/v1/test_dust_collection_mode.py b/tests/devices/traits/v1/test_dust_collection_mode.py index 1b68304e..5709a2c2 100644 --- a/tests/devices/traits/v1/test_dust_collection_mode.py +++ b/tests/devices/traits/v1/test_dust_collection_mode.py @@ -29,6 +29,7 @@ def dust_collection_mode_trait( (RoborockDockTypeCode.s8_dock), (RoborockDockTypeCode.p10_dock), (RoborockDockTypeCode.qrevo_s_dock), + (RoborockDockTypeCode.qv_35a_dock), (RoborockDockTypeCode.qrevo_s5v_dock), (RoborockDockTypeCode.saros_20_dock), ], diff --git a/tests/devices/traits/v1/test_smart_wash_params.py b/tests/devices/traits/v1/test_smart_wash_params.py index 63ec757f..a1da67a8 100644 --- a/tests/devices/traits/v1/test_smart_wash_params.py +++ b/tests/devices/traits/v1/test_smart_wash_params.py @@ -30,6 +30,7 @@ def smart_wash_params_trait( (RoborockDockTypeCode.s8_dock), (RoborockDockTypeCode.p10_dock), (RoborockDockTypeCode.qrevo_s_dock), + (RoborockDockTypeCode.qv_35a_dock), (RoborockDockTypeCode.qrevo_s5v_dock), (RoborockDockTypeCode.saros_20_dock), ], diff --git a/tests/devices/traits/v1/test_wash_towel_mode.py b/tests/devices/traits/v1/test_wash_towel_mode.py index f3eceea2..24754055 100644 --- a/tests/devices/traits/v1/test_wash_towel_mode.py +++ b/tests/devices/traits/v1/test_wash_towel_mode.py @@ -31,6 +31,7 @@ def wash_towel_mode_trait( (RoborockDockTypeCode.s8_dock), (RoborockDockTypeCode.p10_dock), (RoborockDockTypeCode.qrevo_s_dock), + (RoborockDockTypeCode.qv_35a_dock), (RoborockDockTypeCode.qrevo_s5v_dock), (RoborockDockTypeCode.saros_20_dock), ],