From 9972d134e005171a252d209cef57386a4012c77c Mon Sep 17 00:00:00 2001 From: Christian Arnold Date: Sat, 9 May 2026 22:38:12 +0200 Subject: [PATCH 1/2] feat: add Saros 20 dock type code (27) to RoborockDockTypeCode --- roborock/data/v1/v1_code_mappings.py | 1 + roborock/device_features.py | 1 + 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 + 5 files changed, 5 insertions(+) diff --git a/roborock/data/v1/v1_code_mappings.py b/roborock/data/v1/v1_code_mappings.py index a5c830f2..40c00948 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 + saros_20_dock = 27 class RoborockDockDustCollectionModeCode(RoborockEnum): diff --git a/roborock/device_features.py b/roborock/device_features.py index ef3ea19f..c0449877 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.saros_20_dock, ] diff --git a/tests/devices/traits/v1/test_dust_collection_mode.py b/tests/devices/traits/v1/test_dust_collection_mode.py index 1dc72f69..f4a0fcdd 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.saros_20_dock), ], ) async def test_dust_collection_mode_available( diff --git a/tests/devices/traits/v1/test_smart_wash_params.py b/tests/devices/traits/v1/test_smart_wash_params.py index 7d6c15e6..2cca1448 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.saros_20_dock), ], ) async def test_smart_wash_available( diff --git a/tests/devices/traits/v1/test_wash_towel_mode.py b/tests/devices/traits/v1/test_wash_towel_mode.py index a6a14dcf..f81f84db 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.saros_20_dock), ], ) async def test_wash_towel_mode_available( From eba9fc0ac9682c3e68174203cbd9a39a14e5f108 Mon Sep 17 00:00:00 2001 From: Chistian Arnold Date: Sat, 9 May 2026 23:01:18 +0200 Subject: [PATCH 2/2] Updated device_info.yaml --- device_info.yaml | 152 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) diff --git a/device_info.yaml b/device_info.yaml index e2db9931..df22af85 100644 --- a/device_info.yaml +++ b/device_info.yaml @@ -1196,3 +1196,155 @@ roborock.vacuum.sc05: mode: rw type: RAW property: 'null' +roborock.vacuum.a288: + protocol_version: '1.0' + product_nickname: PEARLPLUS + new_feature_info: 4499197267967999 + new_feature_info_str: 0000000000099518CCFF7EFDA8E93EDDDBFF8F7F7EFEFFFF + feature_info: + - 111 + - 112 + - 113 + - 114 + - 115 + - 116 + - 117 + - 118 + - 119 + - 120 + - 121 + - 122 + - 123 + - 124 + - 125 + product: + id: 3eizObJLFvPAxXvdW96ftd + name: Saros 20 + model: roborock.vacuum.a288 + category: robot.vacuum.cleaner + capability: 0 + schema: + - id: 101 + name: rpc_request + code: rpc_request + mode: rw + type: RAW + - id: 102 + name: rpc_response + code: rpc_response + mode: rw + type: RAW + - id: 120 + name: "\u9519\u8BEF\u4EE3\u7801" + code: error_code + mode: ro + type: ENUM + property: '{"range": [""]}' + - id: 121 + name: "\u8BBE\u5907\u72B6\u6001" + code: state + mode: ro + type: ENUM + property: '{"range": [""]}' + - id: 122 + name: "\u8BBE\u5907\u7535\u91CF" + code: battery + mode: ro + type: ENUM + property: '{"range": [""]}' + - id: 123 + name: "\u6E05\u626B\u6A21\u5F0F" + code: fan_power + mode: rw + type: ENUM + property: '{"range": [""]}' + - id: 124 + name: "\u62D6\u5730\u6A21\u5F0F" + code: water_box_mode + mode: rw + type: ENUM + property: '{"range": [""]}' + - id: 125 + name: "\u4E3B\u5237\u5BFF\u547D" + code: main_brush_life + mode: rw + type: VALUE + property: '{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}' + - id: 126 + name: "\u8FB9\u5237\u5BFF\u547D" + code: side_brush_life + mode: rw + type: VALUE + property: '{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}' + - id: 127 + name: "\u6EE4\u7F51\u5BFF\u547D" + code: filter_life + mode: rw + type: VALUE + property: '{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}' + - id: 128 + name: "\u989D\u5916\u72B6\u6001" + code: additional_props + mode: ro + type: RAW + - id: 130 + name: "\u5B8C\u6210\u4E8B\u4EF6" + code: task_complete + mode: ro + type: RAW + - id: 131 + name: "\u7535\u91CF\u4E0D\u8DB3\u4EFB\u52A1\u53D6\u6D88" + code: task_cancel_low_power + mode: ro + type: RAW + - id: 132 + name: "\u8FD0\u52A8\u4E2D\u4EFB\u52A1\u53D6\u6D88" + code: task_cancel_in_motion + mode: ro + type: RAW + - id: 133 + name: "\u5145\u7535\u72B6\u6001" + code: charge_status + mode: ro + type: RAW + - id: 134 + name: "\u70D8\u5E72\u72B6\u6001" + code: drying_status + mode: ro + type: RAW + - id: 135 + name: "\u79BB\u7EBF\u539F\u56E0\u7EC6\u5206" + code: offline_status + mode: ro + type: RAW + - id: 138 + name: "\u5DE5\u4F5C\u4EFB\u52A1\u7C7B\u578B" + code: clean_task_type + mode: ro + type: ENUM + property: "{\"range\": [\"0 \u7A7A\u95F2\", \"1 \u5168\u5C4B\u6E05\u6D01\",\ + \ \"2 \u9009\u533A\u6E05\u6D01\", \"3 \u5212\u533A\u6E05\u6D01\", \"4 \u5EFA\ + \u56FE\", \"5 \u5C40\u90E8\u6E05\u6D01\", \"6 \u9065\u63A7\u6A21\u5F0F\",\ + \ \"7 \u5DE1\u822A\", \"8 \u5BFB\u5BA0\", \"9 \u6574\u7406\"]}" + - id: 139 + name: "\u56DE\u57FA\u7AD9\u76EE\u7684" + code: back_type + mode: ro + type: RAW + - id: 141 + name: "\u6E05\u6D01\u8FDB\u5EA6" + code: cleaning_progress + mode: ro + type: VALUE + property: "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"\u767E\u5206\u6BD4\ + \", \"scale\": 1}" + - id: 142 + name: publish_dsp + code: publish_dsp + mode: ro + type: RAW + - id: 143 + name: "\u5730\u56FE\u53D8\u5316\u6570\u636E" + code: map_diff + mode: ro + type: RAW