Skip to content

Commit 440c316

Browse files
authored
Merge branch 'main' into cleaning_mode
2 parents ed4e3c8 + 7888a6d commit 440c316

87 files changed

Lines changed: 6012 additions & 385 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 467 additions & 0 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ Install this via pip (or your favourite package manager):
2020

2121
`pip install python-roborock`
2222

23+
To use the `roborock` command line tool, install the `cli` extra, which pulls in
24+
its additional dependencies (click, pyyaml, pyshark):
25+
26+
`pip install python-roborock[cli]`
27+
2328
## Example Usage
2429

2530
See [examples/example.py](examples/example.py) for a more full featured example,

device_info.yaml

Lines changed: 313 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,3 +1196,316 @@ roborock.vacuum.sc05:
11961196
mode: rw
11971197
type: RAW
11981198
property: 'null'
1199+
roborock.vacuum.a288:
1200+
protocol_version: '1.0'
1201+
product_nickname: PEARLPLUS
1202+
new_feature_info: 4499197267967999
1203+
new_feature_info_str: 0000000000099518CCFF7EFDA8E93EDDDBFF8F7F7EFEFFFF
1204+
feature_info:
1205+
- 111
1206+
- 112
1207+
- 113
1208+
- 114
1209+
- 115
1210+
- 116
1211+
- 117
1212+
- 118
1213+
- 119
1214+
- 120
1215+
- 121
1216+
- 122
1217+
- 123
1218+
- 124
1219+
- 125
1220+
product:
1221+
id: 3eizObJLFvPAxXvdW96ftd
1222+
name: Saros 20
1223+
model: roborock.vacuum.a288
1224+
category: robot.vacuum.cleaner
1225+
capability: 0
1226+
schema:
1227+
- id: 101
1228+
name: rpc_request
1229+
code: rpc_request
1230+
mode: rw
1231+
type: RAW
1232+
- id: 102
1233+
name: rpc_response
1234+
code: rpc_response
1235+
mode: rw
1236+
type: RAW
1237+
- id: 120
1238+
name: "\u9519\u8BEF\u4EE3\u7801"
1239+
code: error_code
1240+
mode: ro
1241+
type: ENUM
1242+
property: '{"range": [""]}'
1243+
- id: 121
1244+
name: "\u8BBE\u5907\u72B6\u6001"
1245+
code: state
1246+
mode: ro
1247+
type: ENUM
1248+
property: '{"range": [""]}'
1249+
- id: 122
1250+
name: "\u8BBE\u5907\u7535\u91CF"
1251+
code: battery
1252+
mode: ro
1253+
type: ENUM
1254+
property: '{"range": [""]}'
1255+
- id: 123
1256+
name: "\u6E05\u626B\u6A21\u5F0F"
1257+
code: fan_power
1258+
mode: rw
1259+
type: ENUM
1260+
property: '{"range": [""]}'
1261+
- id: 124
1262+
name: "\u62D6\u5730\u6A21\u5F0F"
1263+
code: water_box_mode
1264+
mode: rw
1265+
type: ENUM
1266+
property: '{"range": [""]}'
1267+
- id: 125
1268+
name: "\u4E3B\u5237\u5BFF\u547D"
1269+
code: main_brush_life
1270+
mode: rw
1271+
type: VALUE
1272+
property: '{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}'
1273+
- id: 126
1274+
name: "\u8FB9\u5237\u5BFF\u547D"
1275+
code: side_brush_life
1276+
mode: rw
1277+
type: VALUE
1278+
property: '{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}'
1279+
- id: 127
1280+
name: "\u6EE4\u7F51\u5BFF\u547D"
1281+
code: filter_life
1282+
mode: rw
1283+
type: VALUE
1284+
property: '{"max": 100, "min": 0, "step": 1, "unit": "null", "scale": 1}'
1285+
- id: 128
1286+
name: "\u989D\u5916\u72B6\u6001"
1287+
code: additional_props
1288+
mode: ro
1289+
type: RAW
1290+
- id: 130
1291+
name: "\u5B8C\u6210\u4E8B\u4EF6"
1292+
code: task_complete
1293+
mode: ro
1294+
type: RAW
1295+
- id: 131
1296+
name: "\u7535\u91CF\u4E0D\u8DB3\u4EFB\u52A1\u53D6\u6D88"
1297+
code: task_cancel_low_power
1298+
mode: ro
1299+
type: RAW
1300+
- id: 132
1301+
name: "\u8FD0\u52A8\u4E2D\u4EFB\u52A1\u53D6\u6D88"
1302+
code: task_cancel_in_motion
1303+
mode: ro
1304+
type: RAW
1305+
- id: 133
1306+
name: "\u5145\u7535\u72B6\u6001"
1307+
code: charge_status
1308+
mode: ro
1309+
type: RAW
1310+
- id: 134
1311+
name: "\u70D8\u5E72\u72B6\u6001"
1312+
code: drying_status
1313+
mode: ro
1314+
type: RAW
1315+
- id: 135
1316+
name: "\u79BB\u7EBF\u539F\u56E0\u7EC6\u5206"
1317+
code: offline_status
1318+
mode: ro
1319+
type: RAW
1320+
- id: 138
1321+
name: "\u5DE5\u4F5C\u4EFB\u52A1\u7C7B\u578B"
1322+
code: clean_task_type
1323+
mode: ro
1324+
type: ENUM
1325+
property: "{\"range\": [\"0 \u7A7A\u95F2\", \"1 \u5168\u5C4B\u6E05\u6D01\",\
1326+
\ \"2 \u9009\u533A\u6E05\u6D01\", \"3 \u5212\u533A\u6E05\u6D01\", \"4 \u5EFA\
1327+
\u56FE\", \"5 \u5C40\u90E8\u6E05\u6D01\", \"6 \u9065\u63A7\u6A21\u5F0F\",\
1328+
\ \"7 \u5DE1\u822A\", \"8 \u5BFB\u5BA0\", \"9 \u6574\u7406\"]}"
1329+
- id: 139
1330+
name: "\u56DE\u57FA\u7AD9\u76EE\u7684"
1331+
code: back_type
1332+
mode: ro
1333+
type: RAW
1334+
- id: 141
1335+
name: "\u6E05\u6D01\u8FDB\u5EA6"
1336+
code: cleaning_progress
1337+
mode: ro
1338+
type: VALUE
1339+
property: "{\"max\": 100, \"min\": 0, \"step\": 1, \"unit\": \"\u767E\u5206\u6BD4\
1340+
\", \"scale\": 1}"
1341+
- id: 142
1342+
name: publish_dsp
1343+
code: publish_dsp
1344+
mode: ro
1345+
type: RAW
1346+
- id: 143
1347+
name: "\u5730\u56FE\u53D8\u5316\u6570\u636E"
1348+
code: map_diff
1349+
mode: ro
1350+
type: RAW
1351+
1352+
roborock.vacuum.ss07:
1353+
protocol_version: B01
1354+
product_nickname: PEARLPLUS
1355+
product:
1356+
id: 3gKDz7BnDrjXOVBAEXj4uw
1357+
name: Roborock Q10 Series
1358+
model: roborock.vacuum.ss07
1359+
category: robot.vacuum.cleaner
1360+
capability: 0
1361+
schema:
1362+
- id: 101
1363+
name: RPC Request
1364+
code: rpc_request
1365+
mode: rw
1366+
type: RAW
1367+
property: 'null'
1368+
- id: 102
1369+
name: RPC Response
1370+
code: rpc_response
1371+
mode: rw
1372+
type: RAW
1373+
property: 'null'
1374+
- id: 120
1375+
name: "\u9519\u8BEF\u4EE3\u7801"
1376+
code: error_code
1377+
mode: ro
1378+
type: ENUM
1379+
property: '{"range": []}'
1380+
- id: 121
1381+
name: "\u8BBE\u5907\u72B6\u6001"
1382+
code: state
1383+
mode: ro
1384+
type: VALUE
1385+
property: 'null'
1386+
- id: 122
1387+
name: "\u8BBE\u5907\u7535\u91CF"
1388+
code: battery
1389+
mode: ro
1390+
type: ENUM
1391+
property: '{"range": []}'
1392+
- id: 123
1393+
name: "\u5438\u529B\u6863\u4F4D"
1394+
code: fan_power
1395+
mode: rw
1396+
type: ENUM
1397+
property: '{"range": []}'
1398+
- id: 124
1399+
name: "\u62D6\u5730\u6863\u4F4D"
1400+
code: water_box_mode
1401+
mode: rw
1402+
type: RAW
1403+
property: 'null'
1404+
- id: 125
1405+
name: "\u4E3B\u5237\u5BFF\u547D"
1406+
code: main_brush_life
1407+
mode: ro
1408+
type: ENUM
1409+
property: '{"range": []}'
1410+
- id: 126
1411+
name: "\u8FB9\u5237\u5BFF\u547D"
1412+
code: side_brush_life
1413+
mode: ro
1414+
type: ENUM
1415+
property: '{"range": []}'
1416+
- id: 127
1417+
name: "\u6EE4\u7F51\u5BFF\u547D"
1418+
code: filter_life
1419+
mode: ro
1420+
type: ENUM
1421+
property: '{"range": []}'
1422+
- id: 135
1423+
name: "\u79BB\u7EBF\u539F\u56E0"
1424+
code: offline_status
1425+
mode: ro
1426+
type: ENUM
1427+
property: '{"range": []}'
1428+
- id: 136
1429+
name: "\u6E05\u6D01\u6B21\u6570"
1430+
code: clean_times
1431+
mode: rw
1432+
type: ENUM
1433+
property: '{"range": []}'
1434+
- id: 137
1435+
name: "\u626B\u62D6\u6A21\u5F0F"
1436+
code: cleaning_preference
1437+
mode: rw
1438+
type: ENUM
1439+
property: '{"range": []}'
1440+
- id: 138
1441+
name: "\u6E05\u6D01\u4EFB\u52A1\u7C7B\u578B"
1442+
code: clean_task_type
1443+
mode: ro
1444+
type: ENUM
1445+
property: '{"range": []}'
1446+
- id: 139
1447+
name: "\u8FD4\u56DE\u57FA\u7AD9\u7C7B\u578B"
1448+
code: back_type
1449+
mode: ro
1450+
type: ENUM
1451+
property: '{"range": []}'
1452+
- id: 140
1453+
name: "\u57FA\u7AD9\u4EFB\u52A1\u7C7B\u578B"
1454+
code: dock_task_type
1455+
mode: ro
1456+
type: ENUM
1457+
property: '{"range": []}'
1458+
- id: 141
1459+
name: "\u6E05\u6D01\u8FDB\u5EA6"
1460+
code: cleaning_progress
1461+
mode: ro
1462+
type: ENUM
1463+
property: '{"range": []}'
1464+
- id: 142
1465+
name: "\u7A9C\u8D27\u4FE1\u606F"
1466+
code: fc_state
1467+
mode: ro
1468+
type: RAW
1469+
property: 'null'
1470+
- id: 201
1471+
name: "\u542F\u52A8\u6E05\u6D01\u4EFB\u52A1"
1472+
code: start_clean_task
1473+
mode: wo
1474+
type: ENUM
1475+
property: '{"range": []}'
1476+
- id: 202
1477+
name: "\u8FD4\u56DE\u57FA\u7AD9\u4EFB\u52A1"
1478+
code: start_back_dock_task
1479+
mode: wo
1480+
type: ENUM
1481+
property: '{"range": []}'
1482+
- id: 203
1483+
name: "\u542F\u52A8\u57FA\u7AD9\u4EFB\u52A1"
1484+
code: start_dock_task
1485+
mode: wo
1486+
type: ENUM
1487+
property: '{"range": []}'
1488+
- id: 204
1489+
name: "\u6682\u505C\u4EFB\u52A1"
1490+
code: pause
1491+
mode: wo
1492+
type: RAW
1493+
property: 'null'
1494+
- id: 205
1495+
name: "\u7EE7\u7EED\u4EFB\u52A1"
1496+
code: resume
1497+
mode: wo
1498+
type: RAW
1499+
property: 'null'
1500+
- id: 206
1501+
name: "\u7ED3\u675F\u4EFB\u52A1"
1502+
code: stop
1503+
mode: wo
1504+
type: RAW
1505+
property: 'null'
1506+
- id: 207
1507+
name: "\u7528\u6237\u6539\u5584\u8BA1\u5212"
1508+
code: ceip
1509+
mode: rw
1510+
type: ENUM
1511+
property: '{"range": ["0,1"]}'

docs/DEVICES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ graph LR
357357
1. **Temporary Subscriptions**: Each RPC creates a temporary subscription that matches the request ID
358358
2. **Subscription Reuse**: `MqttSession` keeps subscriptions alive for 60 seconds (or idle timeout) to enable reuse during command bursts
359359
3. **Timeout Handling**: Commands timeout after 10 seconds if no response is received
360-
4. **Multiple Strategies**: `V1Channel` tries local first, then falls back to MQTT if local fails
360+
4. **Multiple Strategies**: `V1Channel` tries connect to both Local faster local commands and MQTT for streaming updates.
361361

362362
## Class Design & Components
363363

mypy.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,6 @@ check_untyped_defs = True
33

44
[mypy-construct]
55
ignore_missing_imports = True
6+
7+
[mypy-roborock.cli]
8+
ignore_errors = True

0 commit comments

Comments
 (0)