Skip to content

Commit c8507ef

Browse files
authored
feat: add some new roborock codes and add custom command (#234)
* fix: add some new roborock codes and add custom command * fix: lint
1 parent df331ea commit c8507ef

File tree

8 files changed

+179
-35
lines changed

8 files changed

+179
-35
lines changed

poetry.lock

Lines changed: 123 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ keywords = ["roborock", "vacuum", "homeassistant"]
2121
roborock = "roborock.cli:main"
2222

2323
[tool.poetry.dependencies]
24-
python = "^3.10"
24+
python = "^3.11"
2525
click = ">=8"
2626
aiohttp = "^3.8.2"
2727
async-timeout = "*"
@@ -30,6 +30,7 @@ pycryptodomex = {version = "^3.18", markers = "sys_platform == 'darwin'"}
3030
paho-mqtt = "^1.6.1"
3131
dacite = "^1.8.0"
3232
construct = "^2.10.57"
33+
vacuum-map-parser-roborock = "*"
3334

3435

3536
[build-system]

roborock/code_mappings.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,15 @@ class RoborockFanSpeedQ7Max(RoborockFanPowerCode):
243243
max = 104
244244

245245

246+
class RoborockFanSpeedQRevoMaster(RoborockFanPowerCode):
247+
quiet = 101
248+
balanced = 102
249+
turbo = 103
250+
max = 104
251+
max_plus = 105
252+
custom = 110 # Smartplan
253+
254+
246255
class RoborockFanSpeedP10(RoborockFanPowerCode):
247256
off = 105
248257
quiet = 101
@@ -319,6 +328,17 @@ class RoborockMopIntensityV2(RoborockMopIntensityCode):
319328
custom = 207
320329

321330

331+
class RoborockMopIntensityQRevoMaster(RoborockMopIntensityCode):
332+
"""Describes the mop intensity of the vacuum cleaner."""
333+
334+
off = 200
335+
low = 201
336+
medium = 202
337+
high = 203
338+
custom_water_flow = 207
339+
custom = 209 # SmartPlan
340+
341+
322342
class RoborockMopIntensityP10(RoborockMopIntensityCode):
323343
"""Describes the mop intensity of the vacuum cleaner."""
324344

roborock/const.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
ROBOROCK_Q7 = "roborock.vacuum.a40"
3131
ROBOROCK_Q7_MAX = "roborock.vacuum.a38"
3232
ROBOROCK_Q7PLUS = "roborock.vacuum.a40"
33+
ROBOROCK_QREVO_MASTER = "roborock.vacuum.a117"
3334
ROBOROCK_Q8_MAX = "roborock.vacuum.a73"
3435
ROBOROCK_G10S_PRO = "roborock.vacuum.a26"
3536
ROBOROCK_G10S = "roborock.vacuum.a46"

roborock/containers.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
RoborockFanPowerCode,
2121
RoborockFanSpeedP10,
2222
RoborockFanSpeedQ7Max,
23+
RoborockFanSpeedQRevoMaster,
2324
RoborockFanSpeedS6Pure,
2425
RoborockFanSpeedS7,
2526
RoborockFanSpeedS7MaxV,
@@ -29,6 +30,7 @@
2930
RoborockMopIntensityCode,
3031
RoborockMopIntensityP10,
3132
RoborockMopIntensityQ7Max,
33+
RoborockMopIntensityQRevoMaster,
3234
RoborockMopIntensityS5Max,
3335
RoborockMopIntensityS6MaxV,
3436
RoborockMopIntensityS7,
@@ -49,6 +51,7 @@
4951
ROBOROCK_G10S_PRO,
5052
ROBOROCK_P10,
5153
ROBOROCK_Q7_MAX,
54+
ROBOROCK_QREVO_MASTER,
5255
ROBOROCK_QREVO_MAXV,
5356
ROBOROCK_QREVO_PRO,
5457
ROBOROCK_QREVO_S,
@@ -570,6 +573,12 @@ class Q7MaxStatus(Status):
570573
water_box_mode: RoborockMopIntensityQ7Max | None = None
571574

572575

576+
@dataclass
577+
class QRevoMasterStatus(Status):
578+
fan_power: RoborockFanSpeedQRevoMaster | None = None
579+
water_box_mode: RoborockMopIntensityQRevoMaster | None = None
580+
581+
573582
@dataclass
574583
class S6MaxVStatus(Status):
575584
fan_power: RoborockFanSpeedS7MaxV | None = None
@@ -627,6 +636,7 @@ class S8MaxvUltraStatus(Status):
627636
ROBOROCK_S4_MAX: S4MaxStatus,
628637
ROBOROCK_S5_MAX: S5MaxStatus,
629638
ROBOROCK_Q7_MAX: Q7MaxStatus,
639+
ROBOROCK_QREVO_MASTER: QRevoMasterStatus,
630640
ROBOROCK_S6: S6PureStatus,
631641
ROBOROCK_S6_MAXV: S6MaxVStatus,
632642
ROBOROCK_S6_PURE: S6PureStatus,

roborock/roborock_typing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class RoborockCommand(str, Enum):
116116
GET_MAP_STATUS = "get_map_status"
117117
GET_MAP_V1 = "get_map_v1"
118118
GET_MAP_V2 = "get_map_v2"
119+
GET_MAP_CALIBRATION = "get_map_calibration" # Custom command
119120
GET_MOP_MOTOR_STATUS = "get_mop_motor_status"
120121
GET_MOP_TEMPLATE_PARAMS_BY_ID = "get_mop_template_params_by_id"
121122
GET_MOP_TEMPLATE_PARAMS_SUMMARY = "get_mop_template_params_summary"

roborock/version_1_apis/roborock_client_v1.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,14 @@
5555
)
5656
from roborock.util import RepeatableTask, get_next_int, unpack_list
5757

58-
COMMANDS_SECURED = [
58+
COMMANDS_SECURED = {
5959
RoborockCommand.GET_MAP_V1,
6060
RoborockCommand.GET_MULTI_MAP,
61-
]
61+
}
62+
63+
CUSTOM_COMMANDS = {RoborockCommand.GET_MAP_CALIBRATION}
64+
65+
CLOUD_REQUIRED = COMMANDS_SECURED.union(CUSTOM_COMMANDS)
6266

6367
WASH_N_FILL_DOCK = [
6468
RoborockDockTypeCode.empty_wash_fill_dock,

0 commit comments

Comments
 (0)