python-roborock 5.37.0__tar.gz → 6.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_roborock-5.37.0 → python_roborock-6.0.0}/PKG-INFO +1 -1
- {python_roborock-5.37.0 → python_roborock-6.0.0}/pyproject.toml +1 -1
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/v1/v1_code_mappings.py +17 -0
- python_roborock-6.0.0/roborock/data/zeo/zeo_code_mappings.py +320 -0
- python_roborock-6.0.0/roborock/data/zeo/zeo_containers.py +140 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/device_features.py +104 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/roborock_message.py +83 -30
- python_roborock-5.37.0/roborock/data/zeo/zeo_code_mappings.py +0 -142
- python_roborock-5.37.0/roborock/data/zeo/zeo_containers.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/.gitignore +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/LICENSE +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/README.md +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/broadcast_protocol.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/callbacks.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/cli.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/const.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/b01_q10/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/b01_q10/b01_q10_code_mappings.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/b01_q10/b01_q10_containers.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/b01_q7/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/b01_q7/b01_q7_code_mappings.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/b01_q7/b01_q7_containers.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/code_mappings.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/containers.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/dyad/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/dyad/dyad_code_mappings.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/dyad/dyad_containers.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/mower/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/mower/mower_containers.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/v1/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/v1/v1_clean_modes.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/v1/v1_containers.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/data/zeo/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/README.md +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/cache.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/device.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/device_manager.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/file_cache.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/rpc/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/rpc/a01_channel.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/rpc/b01_q10_channel.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/rpc/b01_q7_channel.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/rpc/v1_channel.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/a01/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/button_light.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/child_lock.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/clean_history.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/command.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/common.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/consumable.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/do_not_disturb.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/dust_collection.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/map.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/network_info.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/remote.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/status.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/vacuum.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q10/volume.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q7/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q7/clean_summary.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q7/map.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/b01/q7/map_content.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/common.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/traits_mixin.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/child_lock.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/clean_summary.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/command.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/common.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/consumeable.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/device_features.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/do_not_disturb.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/dust_collection_mode.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/flow_led_status.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/home.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/led_status.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/map_content.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/maps.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/network_info.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/obstacle_photos.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/rooms.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/routines.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/smart_wash_params.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/status.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/valley_electricity_timer.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/volume.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/traits/v1/wash_towel_mode.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/transport/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/transport/channel.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/transport/local_channel.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/devices/transport/mqtt_channel.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/diagnostics.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/exceptions.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/b01_grid_layers.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/b01_map_parser.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/b01_q10_map_parser.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/b01_q10_overlays.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/b01_q10_render.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/map_parser.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/proto/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/proto/b01_scmap.proto +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/map/proto/b01_scmap_pb2.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/mqtt/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/mqtt/health_manager.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/mqtt/roborock_session.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/mqtt/session.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/protocol.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/protocols/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/protocols/a01_protocol.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/protocols/b01_q10_protocol.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/protocols/b01_q7_protocol.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/protocols/v1_protocol.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/py.typed +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/roborock_typing.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/testing/__init__.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/testing/b01_q10_simulator.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/testing/channel.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/testing/cloud.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/testing/simulator.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/testing/v1_simulator.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/util.py +0 -0
- {python_roborock-5.37.0 → python_roborock-6.0.0}/roborock/web_api.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-roborock
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.0.0
|
|
4
4
|
Summary: A package to control Roborock vacuums.
|
|
5
5
|
Project-URL: Repository, https://github.com/python-roborock/python-roborock
|
|
6
6
|
Project-URL: Documentation, https://python-roborock.readthedocs.io/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "python-roborock"
|
|
3
|
-
version = "
|
|
3
|
+
version = "6.0.0"
|
|
4
4
|
description = "A package to control Roborock vacuums."
|
|
5
5
|
authors = [{ name = "humbertogontijo", email = "humbertogontijo@users.noreply.github.com" }, {name="Lash-L"}, {name="allenporter"}]
|
|
6
6
|
requires-python = ">=3.11, <4"
|
|
@@ -365,10 +365,27 @@ class RoborockDockTypeCode(RoborockEnum):
|
|
|
365
365
|
shell_e_dock = 21
|
|
366
366
|
shell_2e_dock = 22
|
|
367
367
|
shell_3c_dock = 23
|
|
368
|
+
hera_dock = 24
|
|
369
|
+
k1s_pro_dock = 26
|
|
368
370
|
type_27_dock = 27
|
|
369
371
|
k1c_lite_dock = 28
|
|
372
|
+
k1r_dock = 29
|
|
370
373
|
shell_2e_lite_dock = 30
|
|
374
|
+
shell_4rc_dock = 31
|
|
375
|
+
shell_4r_dock = 32
|
|
376
|
+
shell_4p_dock = 33
|
|
377
|
+
shell_4s_dock = 34
|
|
378
|
+
o7_dock = 35
|
|
379
|
+
k1d_dock = 37
|
|
380
|
+
shell_3p_dock = 38
|
|
381
|
+
shell_4d_dock = 39
|
|
371
382
|
shell_2e_heat_dock = 40
|
|
383
|
+
f1_dock = 41
|
|
384
|
+
f1r_dock = 42
|
|
385
|
+
f2r_dock = 43
|
|
386
|
+
f1s_dock = 44
|
|
387
|
+
o7h_dock = 45
|
|
388
|
+
f1c_dock = 46
|
|
372
389
|
|
|
373
390
|
|
|
374
391
|
class RoborockDockDustCollectionModeCode(RoborockEnum):
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
"""Zeo (washing machine) device enums.
|
|
2
|
+
|
|
3
|
+
Member-level comments show the manufacturer's official identifiers
|
|
4
|
+
extracted from the React Native app plugin bundle.
|
|
5
|
+
|
|
6
|
+
For enums that map between protocol-level positions and physical units
|
|
7
|
+
(e.g. spin speed, temperature), the comment format is
|
|
8
|
+
``# L<N>, <physical-value>`` where ``L<N>`` is the protocol position
|
|
9
|
+
and ``<physical-value>`` is the user-facing display value
|
|
10
|
+
(RPM, degrees Celsius, minutes, etc.).
|
|
11
|
+
|
|
12
|
+
Enums commented out at the bottom of this file are App-internal lookup
|
|
13
|
+
tables and UI state machines — they are not DP protocol enums and are
|
|
14
|
+
never sent to the device.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from ..code_mappings import RoborockEnum
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ZeoFeatureBits(RoborockEnum):
|
|
21
|
+
"""Bit positions in DP 237 (FEATURE_BITS).
|
|
22
|
+
|
|
23
|
+
Extracted from the official Roborock Washer app plugin bundle
|
|
24
|
+
(index.ios.bundle, module 726). Each member's integer value
|
|
25
|
+
is the exact bit offset the device reports at DP 237.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
smart_hosting = 0
|
|
29
|
+
silent_mode = 1
|
|
30
|
+
new_custom_program = 2
|
|
31
|
+
dry_care = 3
|
|
32
|
+
set_uvc_in_appointment = 4
|
|
33
|
+
detect_door_status = 5
|
|
34
|
+
expand_softener = 6
|
|
35
|
+
set_params_in_working = 7
|
|
36
|
+
thirty_min_soak = 8
|
|
37
|
+
smile_light = 9
|
|
38
|
+
set_uvc_in_pause = 10
|
|
39
|
+
concentrated_detergent = 11
|
|
40
|
+
wool_detergent = 12
|
|
41
|
+
voice_assistant = 13
|
|
42
|
+
adapted_custom_program = 14
|
|
43
|
+
voice_assistant_record = 15
|
|
44
|
+
fluff_clean_notification = 16
|
|
45
|
+
power_button_indicator_light = 17
|
|
46
|
+
dirt_detection = 18
|
|
47
|
+
deep_self_clean = 19
|
|
48
|
+
save_panel_program_params = 20
|
|
49
|
+
steam_care = 21
|
|
50
|
+
wash_dry_linkage = 22
|
|
51
|
+
ion_deodorization = 23
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class ZeoMode(RoborockEnum):
|
|
55
|
+
null = 0 # (not found in app bundle)
|
|
56
|
+
wash = 1
|
|
57
|
+
wash_and_dry = 2
|
|
58
|
+
dry = 3
|
|
59
|
+
treatment = 4
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ZeoState(RoborockEnum):
|
|
63
|
+
standby = 1
|
|
64
|
+
weighing = 2 # Checking
|
|
65
|
+
soaking = 3
|
|
66
|
+
washing = 4
|
|
67
|
+
rinsing = 5
|
|
68
|
+
spinning = 6 # Dewatering
|
|
69
|
+
drying = 7
|
|
70
|
+
cooling = 8
|
|
71
|
+
under_delay_start = 9 # Appointment
|
|
72
|
+
done = 10 # Complete
|
|
73
|
+
updating = 11
|
|
74
|
+
aftercare = 12 # SmartHosting
|
|
75
|
+
waiting_for_aftercare = 13 # SmartHostingWaiting
|
|
76
|
+
steam_caring = 14
|
|
77
|
+
descaling = 15
|
|
78
|
+
cloth_ready = 16
|
|
79
|
+
waiting_for_drying = 17
|
|
80
|
+
pre_heating = 18
|
|
81
|
+
pre_heat_complete = 19
|
|
82
|
+
in_care = 20
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class ZeoProgram(RoborockEnum):
|
|
86
|
+
null = 0 # (not found in app bundle)
|
|
87
|
+
standard = 1 # Mixed
|
|
88
|
+
quick = 2
|
|
89
|
+
sanitize = 3 # Sterilization
|
|
90
|
+
wool = 4
|
|
91
|
+
air_refresh = 5 # Air
|
|
92
|
+
custom = 6 # CloudProgram
|
|
93
|
+
bedding = 7 # HomeTextile
|
|
94
|
+
down = 8
|
|
95
|
+
silk = 9
|
|
96
|
+
rinse_and_spin = 10 # RinseAndDehydrate
|
|
97
|
+
spin = 11 # Dehydrate
|
|
98
|
+
down_clean = 12 # SelfClean
|
|
99
|
+
baby_care = 13 # Baby
|
|
100
|
+
anti_allergen = 14 # MitesRemoval
|
|
101
|
+
sportswear = 15 # Sports
|
|
102
|
+
night = 16
|
|
103
|
+
new_clothes = 17 # New
|
|
104
|
+
shirts = 18 # Shirt
|
|
105
|
+
synthetics = 19 # ChemicalFiber
|
|
106
|
+
underwear = 20
|
|
107
|
+
gentle = 21 # Soft
|
|
108
|
+
intensive = 22 # Strong
|
|
109
|
+
cotton_linen = 23 # CottonOrLinen
|
|
110
|
+
season = 24
|
|
111
|
+
warming = 25 # Warm
|
|
112
|
+
bra = 26
|
|
113
|
+
panties = 27 # Underpants
|
|
114
|
+
boiling_wash = 28 # Boiling
|
|
115
|
+
soaking = 29
|
|
116
|
+
socks = 30
|
|
117
|
+
towels = 31 # Towel
|
|
118
|
+
anti_mite = 32 # MitesRemoval2
|
|
119
|
+
exo_40_60 = 33 # Eco
|
|
120
|
+
twenty_c = 34 # TwentyDegrees
|
|
121
|
+
t_shirts = 35 # TShirt
|
|
122
|
+
stain_removal = 36 # Dirt
|
|
123
|
+
small_things = 37
|
|
124
|
+
mixing = 39
|
|
125
|
+
bath_towel = 40
|
|
126
|
+
jeans = 41
|
|
127
|
+
outdoors = 42
|
|
128
|
+
timed_drying = 43
|
|
129
|
+
outdoor_jackets = 44
|
|
130
|
+
yoga = 45
|
|
131
|
+
quilt_drying = 46
|
|
132
|
+
flax = 47
|
|
133
|
+
suit = 48
|
|
134
|
+
sport_shoes = 49
|
|
135
|
+
rack_drying = 50
|
|
136
|
+
summer_quilt = 51
|
|
137
|
+
wind_breaker = 52
|
|
138
|
+
steam_care = 53
|
|
139
|
+
descaling = 54
|
|
140
|
+
deep_self_clean = 55
|
|
141
|
+
pet_care = 56
|
|
142
|
+
small_things_drying = 57
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class ZeoSoak(RoborockEnum):
|
|
146
|
+
normal = 0 # L0, 0min
|
|
147
|
+
low = 1 # L1, 5min
|
|
148
|
+
medium = 2 # L2, 10min
|
|
149
|
+
high = 3 # L3, 15min
|
|
150
|
+
max = 4 # L4, 20min
|
|
151
|
+
very_max = 5 # L5, 30min
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
class ZeoTemperature(RoborockEnum):
|
|
155
|
+
normal = 1 # L1, 0 C
|
|
156
|
+
low = 2 # L2, 30 C
|
|
157
|
+
medium = 3 # L3, 40 C
|
|
158
|
+
high = 4 # L4, 60 C
|
|
159
|
+
max = 5 # L5, 90 C
|
|
160
|
+
twenty_c = 6 # L6, 20 C
|
|
161
|
+
ninety_c = 7 # L7, 95 C
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class ZeoRinse(RoborockEnum):
|
|
165
|
+
none = 0 # L0, None
|
|
166
|
+
min = 1 # L1, Min
|
|
167
|
+
low = 2 # L2, Low
|
|
168
|
+
mid = 3 # L3, Mid
|
|
169
|
+
high = 4 # L4, High
|
|
170
|
+
max = 5 # L5, Max
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
class ZeoSpin(RoborockEnum):
|
|
174
|
+
null = 0 # (not found in app bundle)
|
|
175
|
+
none = 1 # L1, 0 RPM
|
|
176
|
+
very_low = 2 # L2, 400 RPM
|
|
177
|
+
low = 3 # L3, 600 RPM
|
|
178
|
+
mid = 4 # L4, 800 RPM
|
|
179
|
+
high = 5 # L5, 1000 RPM
|
|
180
|
+
very_high = 6 # L6, 1200 RPM
|
|
181
|
+
max = 7 # L7, 1400 RPM
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class ZeoDryingMode(RoborockEnum):
|
|
185
|
+
none = 0
|
|
186
|
+
quick = 1 # Quick, Mid
|
|
187
|
+
iron = 2 # Iron, Low
|
|
188
|
+
store = 3 # Store, High
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class ZeoDetergentType(RoborockEnum):
|
|
192
|
+
empty = 0 # T0
|
|
193
|
+
low = 1 # T1
|
|
194
|
+
medium = 2 # T2
|
|
195
|
+
high = 3 # T3
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
class ZeoSoftenerType(RoborockEnum):
|
|
199
|
+
empty = 0 # T0
|
|
200
|
+
low = 1 # T1
|
|
201
|
+
medium = 2 # T2
|
|
202
|
+
high = 3 # T3
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
class ZeoDetergentExpansionType(RoborockEnum):
|
|
206
|
+
concentrated_detergent = 1
|
|
207
|
+
detergent = 2
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
class ZeoSoftenerExpansionType(RoborockEnum):
|
|
211
|
+
softener = 1
|
|
212
|
+
softener_expansion = 2
|
|
213
|
+
wool_detergent = 3
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class ZeoDirtDetectionStatus(RoborockEnum):
|
|
217
|
+
idle = 0
|
|
218
|
+
detecting = 1
|
|
219
|
+
detection_completed = 2
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
class ZeoError(RoborockEnum):
|
|
223
|
+
none = 0 # No error
|
|
224
|
+
refill_error = 1 # Refill error (E1). Check if the water tap is turned on.
|
|
225
|
+
drain_error = 2 # Drain error (E2). Check the drain hose.
|
|
226
|
+
door_lock_error = 3 # Door lock error (E3). Close the door properly.
|
|
227
|
+
water_level_error = 4 # Drum water level error (E4).
|
|
228
|
+
inverter_error = 5 # DD motor variable-frequency drive error (E5).
|
|
229
|
+
heating_error = 6 # Water heater error (E6).
|
|
230
|
+
temperature_error = 7 # Drum water temperature error (E7).
|
|
231
|
+
communication_error = 10 # Communication error (E10).
|
|
232
|
+
drying_error = 11 # Temperature error (E11).
|
|
233
|
+
drying_error_e_12 = 12 # Temperature error (E12).
|
|
234
|
+
drying_error_e_13 = 13 # Temperature error (E13).
|
|
235
|
+
drying_error_e_14 = 14 # Temperature error (E14).
|
|
236
|
+
drying_error_e_15 = 15 # Drying air heater error (E15).
|
|
237
|
+
drying_error_e_16 = 16 # Fan RPM error (E16).
|
|
238
|
+
drying_error_water_flow = 17 # Drying temperature protection (E17).
|
|
239
|
+
drying_error_restart = 18 # Fan RPM error (E18).
|
|
240
|
+
spin_error = 19 # Balance error (Unb).
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
class ZeoDryingMethod(RoborockEnum):
|
|
244
|
+
l1 = 1 # L1, Saving
|
|
245
|
+
l2 = 2 # L2, Standard
|
|
246
|
+
l3 = 3 # L3, SuperFast
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
class ZeoSteamVolume(RoborockEnum):
|
|
250
|
+
none = 0 # L0, None
|
|
251
|
+
low = 1 # L1, Min
|
|
252
|
+
medium = 2 # L2, Low
|
|
253
|
+
high = 3 # L3, Mid
|
|
254
|
+
max = 4 # L4, High
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
class ZeoDryAndCare(RoborockEnum):
|
|
258
|
+
soft = 1
|
|
259
|
+
normal = 2
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
class ZeoDryerStartError(RoborockEnum):
|
|
263
|
+
dryer_running = 1 # Washer-Dryer Pairing cannot start: Dryer is running.
|
|
264
|
+
dryer_error = 2 # Washer-Dryer Pairing cannot start: Dryer has an error.
|
|
265
|
+
dryer_done = 3 # Dryer drying is complete, please remove the clothes first.
|
|
266
|
+
dryer_waiting_hosting = 4 # Dryer is waiting for smart hosting.
|
|
267
|
+
dryer_smart_hosting = 5 # Dryer is in smart hosting mode.
|
|
268
|
+
dryer_countdown = 6 # Dryer is in preset countdown.
|
|
269
|
+
dryer_network_fail = 7 # Please check the dryer network connection.
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
# The following are App-internal lookup tables extracted from the bundle.
|
|
273
|
+
# They are NOT DP protocol enums — the device never receives these values.
|
|
274
|
+
# They control how the official app adjusts recommended dosages or UI visibility.
|
|
275
|
+
#
|
|
276
|
+
# class Cleanser(RoborockEnum):
|
|
277
|
+
# detergent = 0
|
|
278
|
+
# additions = 1
|
|
279
|
+
#
|
|
280
|
+
# class Detergents(RoborockEnum):
|
|
281
|
+
# concentrated = 1
|
|
282
|
+
# regular = 2
|
|
283
|
+
# baby = 3
|
|
284
|
+
#
|
|
285
|
+
# class Additions(RoborockEnum):
|
|
286
|
+
# softener = 1
|
|
287
|
+
# disinfectant = 2
|
|
288
|
+
# fragrance = 3
|
|
289
|
+
#
|
|
290
|
+
# The following are App UI state enums — internal state machines used by the
|
|
291
|
+
# official app for page rendering and progress display.
|
|
292
|
+
#
|
|
293
|
+
# class HomePageStatus(RoborockEnum):
|
|
294
|
+
# updating = 0
|
|
295
|
+
# loading = 1
|
|
296
|
+
# load_failed = 2
|
|
297
|
+
# idle = 3
|
|
298
|
+
# working = 4
|
|
299
|
+
# smart_hosting = 5
|
|
300
|
+
# preset = 6
|
|
301
|
+
# descaling = 7
|
|
302
|
+
# cloth_ready = 8
|
|
303
|
+
# wait_to_dry = 9
|
|
304
|
+
#
|
|
305
|
+
# class Progress(RoborockEnum):
|
|
306
|
+
# soak = 0
|
|
307
|
+
# wash = 1
|
|
308
|
+
# rinse = 2
|
|
309
|
+
# spin = 3
|
|
310
|
+
# dry = 4
|
|
311
|
+
# steam_care = 5
|
|
312
|
+
#
|
|
313
|
+
# class ProgressStatus(RoborockEnum):
|
|
314
|
+
# done = 0
|
|
315
|
+
# doing = 1
|
|
316
|
+
# will_do = 2
|
|
317
|
+
#
|
|
318
|
+
# class SmartHostStatus(RoborockEnum):
|
|
319
|
+
# smart_host_waiting = 0
|
|
320
|
+
# smart_hosting = 1
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Data containers for Zeo (washing machine / dryer) devices."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
|
|
5
|
+
from ..containers import RoborockBase
|
|
6
|
+
from .zeo_code_mappings import (
|
|
7
|
+
ZeoDryAndCare,
|
|
8
|
+
ZeoDryingMethod,
|
|
9
|
+
ZeoDryingMode,
|
|
10
|
+
ZeoMode,
|
|
11
|
+
ZeoProgram,
|
|
12
|
+
ZeoRinse,
|
|
13
|
+
ZeoSoak,
|
|
14
|
+
ZeoSpin,
|
|
15
|
+
ZeoSteamVolume,
|
|
16
|
+
ZeoTemperature,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class ZeoStartParams(RoborockBase):
|
|
22
|
+
"""Parameters that must be bundled with a START command.
|
|
23
|
+
|
|
24
|
+
All Zeo devices require ``mode`` and ``program`` to be sent together
|
|
25
|
+
with the start signal. The remaining fields are optional and only
|
|
26
|
+
included when the device reports a non-None value.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
mode: ZeoMode
|
|
30
|
+
program: ZeoProgram
|
|
31
|
+
temperature: ZeoTemperature | None = None
|
|
32
|
+
rinse: ZeoRinse | None = None
|
|
33
|
+
spin: ZeoSpin | None = None
|
|
34
|
+
drying_mode: ZeoDryingMode | None = None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# ── DP 222 (LoadCloudProgram) bitfield decoder ──────────────────────────
|
|
38
|
+
# The official app packs all custom-program parameters into a single
|
|
39
|
+
# 32-bit integer at DP 222. This mirrors WasherDpsCache.customMode in
|
|
40
|
+
# module 725 of the React Native plugin bundle.
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass
|
|
44
|
+
class ZeoCustomMode(RoborockBase):
|
|
45
|
+
"""Decoded custom programme parameters from DP 222 (LoadCloudProgram).
|
|
46
|
+
|
|
47
|
+
Null / absent fields are represented as ``0`` which matches the
|
|
48
|
+
official app's behaviour (the right-shifted-and-masked value is
|
|
49
|
+
always non-negative).
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
program: ZeoProgram
|
|
53
|
+
"""Wash program (bits 0-7)."""
|
|
54
|
+
|
|
55
|
+
mode: ZeoMode
|
|
56
|
+
"""Wash mode (bits 8-9)."""
|
|
57
|
+
|
|
58
|
+
temperature: ZeoTemperature
|
|
59
|
+
"""Temperature (bits 10-12)."""
|
|
60
|
+
|
|
61
|
+
rinse: ZeoRinse
|
|
62
|
+
"""Rinse cycle (bits 13-15)."""
|
|
63
|
+
|
|
64
|
+
spin: ZeoSpin
|
|
65
|
+
"""Spin speed (bits 16-18)."""
|
|
66
|
+
|
|
67
|
+
drying_mode: ZeoDryingMode
|
|
68
|
+
"""Drying mode (bits 19-21)."""
|
|
69
|
+
|
|
70
|
+
soak: ZeoSoak
|
|
71
|
+
"""Soak (bits 22-24)."""
|
|
72
|
+
|
|
73
|
+
dry_and_care: ZeoDryAndCare
|
|
74
|
+
"""Dry-care mode (bits 25-27)."""
|
|
75
|
+
|
|
76
|
+
steam_volume: ZeoSteamVolume
|
|
77
|
+
"""Steam volume (bits 28-30)."""
|
|
78
|
+
|
|
79
|
+
total_time_min: int = 0
|
|
80
|
+
"""Total programme time in minutes (from DP 239)."""
|
|
81
|
+
|
|
82
|
+
@classmethod
|
|
83
|
+
def from_raw(cls, raw: int, total_time_min: int | None = None) -> "ZeoCustomMode":
|
|
84
|
+
"""Decode a raw 32-bit custom-programme value."""
|
|
85
|
+
return cls(
|
|
86
|
+
program=ZeoProgram(raw & 0xFF),
|
|
87
|
+
mode=ZeoMode((raw >> 8) & 0x3),
|
|
88
|
+
temperature=ZeoTemperature((raw >> 10) & 0x7),
|
|
89
|
+
rinse=ZeoRinse((raw >> 13) & 0x7),
|
|
90
|
+
spin=ZeoSpin((raw >> 16) & 0x7),
|
|
91
|
+
drying_mode=ZeoDryingMode((raw >> 19) & 0x7),
|
|
92
|
+
soak=ZeoSoak((raw >> 22) & 0x7),
|
|
93
|
+
dry_and_care=ZeoDryAndCare((raw >> 25) & 0x7),
|
|
94
|
+
steam_volume=ZeoSteamVolume((raw >> 28) & 0x7),
|
|
95
|
+
total_time_min=total_time_min or 0,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@dataclass
|
|
100
|
+
class ZeoDryerCustomMode(RoborockBase):
|
|
101
|
+
"""Decoded custom programme from DP 222 for a standalone dryer.
|
|
102
|
+
|
|
103
|
+
Dryers pack a different (shorter) bitfield than washers — only 5
|
|
104
|
+
fields after program/mode. Mirrors ``WasherDpsCache.dryerCustomMode``
|
|
105
|
+
in module 725 of the plugin bundle.
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
program: ZeoProgram
|
|
109
|
+
"""Drying program (bits 0-7)."""
|
|
110
|
+
|
|
111
|
+
mode: ZeoMode
|
|
112
|
+
"""Drying mode (bits 8-10)."""
|
|
113
|
+
|
|
114
|
+
drying_mode: ZeoDryingMode
|
|
115
|
+
"""Drying level (bits 11-13)."""
|
|
116
|
+
|
|
117
|
+
drying_method: ZeoDryingMethod
|
|
118
|
+
"""Drying method (bits 14-16)."""
|
|
119
|
+
|
|
120
|
+
steam_volume: ZeoSteamVolume
|
|
121
|
+
"""Steam volume (bits 17-19)."""
|
|
122
|
+
|
|
123
|
+
total_time_min: int = 0
|
|
124
|
+
"""Total programme time in minutes (from DP 239)."""
|
|
125
|
+
|
|
126
|
+
@classmethod
|
|
127
|
+
def from_raw(cls, raw: int, total_time_min: int | None = None) -> "ZeoDryerCustomMode":
|
|
128
|
+
"""Decode a raw 32-bit dryer custom-programme value."""
|
|
129
|
+
return cls(
|
|
130
|
+
program=ZeoProgram(raw & 0xFF),
|
|
131
|
+
# Dryer mode spans bits 8-10 (0x700, 3 bits) because the
|
|
132
|
+
# temperature field is absent from the dryer bitfield and
|
|
133
|
+
# bit 10 is re-allocated to mode. Washer uses 2 bits
|
|
134
|
+
# (0x300, bits 8-9) to make room for temperature at 10-12.
|
|
135
|
+
mode=ZeoMode((raw >> 8) & 0x7),
|
|
136
|
+
drying_mode=ZeoDryingMode((raw >> 11) & 0x7),
|
|
137
|
+
drying_method=ZeoDryingMethod((raw >> 14) & 0x7),
|
|
138
|
+
steam_volume=ZeoSteamVolume((raw >> 17) & 0x7),
|
|
139
|
+
total_time_min=total_time_min or 0,
|
|
140
|
+
)
|
|
@@ -676,6 +676,8 @@ _ONLY_X_SERIES_DOCK_TYPES = {
|
|
|
676
676
|
RoborockDockTypeCode.o4_dock,
|
|
677
677
|
RoborockDockTypeCode.o5_dock,
|
|
678
678
|
RoborockDockTypeCode.o6_dock,
|
|
679
|
+
RoborockDockTypeCode.o7_dock,
|
|
680
|
+
RoborockDockTypeCode.o7h_dock,
|
|
679
681
|
}
|
|
680
682
|
|
|
681
683
|
_CLEAN_FLUID_AUTO_DELIVERY_DOCK_TYPES = {
|
|
@@ -685,6 +687,10 @@ _CLEAN_FLUID_AUTO_DELIVERY_DOCK_TYPES = {
|
|
|
685
687
|
RoborockDockTypeCode.shell_3s_dock,
|
|
686
688
|
RoborockDockTypeCode.o6_dock,
|
|
687
689
|
RoborockDockTypeCode.couple_dock,
|
|
690
|
+
RoborockDockTypeCode.type_27_dock,
|
|
691
|
+
RoborockDockTypeCode.o7_dock,
|
|
692
|
+
RoborockDockTypeCode.f1s_dock,
|
|
693
|
+
RoborockDockTypeCode.o7h_dock,
|
|
688
694
|
}
|
|
689
695
|
|
|
690
696
|
_CLEAN_FLUID_AUTO_DELIVERY_AM_DOCK_TYPES = {
|
|
@@ -696,6 +702,7 @@ _CLEAN_FLUID_AUTO_DELIVERY_AM_DOCK_TYPES = {
|
|
|
696
702
|
RoborockDockTypeCode.shell_e_dock,
|
|
697
703
|
RoborockDockTypeCode.shell_2e_dock,
|
|
698
704
|
RoborockDockTypeCode.shell_3c_dock,
|
|
705
|
+
RoborockDockTypeCode.k1c_dock,
|
|
699
706
|
}
|
|
700
707
|
|
|
701
708
|
_AUTO_STERILIZE_DOCK_TYPES = {
|
|
@@ -725,6 +732,18 @@ _CLEAN_CAROUSEL_SELF_CLEAN_DOCK_TYPES = {
|
|
|
725
732
|
RoborockDockTypeCode.shell_3s_dock,
|
|
726
733
|
RoborockDockTypeCode.k1s_dock,
|
|
727
734
|
RoborockDockTypeCode.shell_3c_dock,
|
|
735
|
+
RoborockDockTypeCode.k1s_pro_dock,
|
|
736
|
+
RoborockDockTypeCode.type_27_dock,
|
|
737
|
+
RoborockDockTypeCode.k1r_dock,
|
|
738
|
+
RoborockDockTypeCode.shell_4rc_dock,
|
|
739
|
+
RoborockDockTypeCode.shell_4p_dock,
|
|
740
|
+
RoborockDockTypeCode.shell_4s_dock,
|
|
741
|
+
RoborockDockTypeCode.k1d_dock,
|
|
742
|
+
RoborockDockTypeCode.shell_3p_dock,
|
|
743
|
+
RoborockDockTypeCode.f1_dock,
|
|
744
|
+
RoborockDockTypeCode.f2r_dock,
|
|
745
|
+
RoborockDockTypeCode.f1s_dock,
|
|
746
|
+
RoborockDockTypeCode.f1c_dock,
|
|
728
747
|
}
|
|
729
748
|
|
|
730
749
|
_WATER_UPDOWN_DRAIN_DOCK_TYPES = {
|
|
@@ -745,6 +764,19 @@ _WATER_UPDOWN_DRAIN_AM_DOCK_TYPES = {
|
|
|
745
764
|
RoborockDockTypeCode.shell_e_dock,
|
|
746
765
|
RoborockDockTypeCode.shell_2e_dock,
|
|
747
766
|
RoborockDockTypeCode.shell_3c_dock,
|
|
767
|
+
RoborockDockTypeCode.k1c_dock,
|
|
768
|
+
RoborockDockTypeCode.hera_dock,
|
|
769
|
+
RoborockDockTypeCode.k1s_pro_dock,
|
|
770
|
+
RoborockDockTypeCode.type_27_dock,
|
|
771
|
+
RoborockDockTypeCode.shell_4rc_dock,
|
|
772
|
+
RoborockDockTypeCode.shell_4r_dock,
|
|
773
|
+
RoborockDockTypeCode.shell_4p_dock,
|
|
774
|
+
RoborockDockTypeCode.shell_4s_dock,
|
|
775
|
+
RoborockDockTypeCode.o7_dock,
|
|
776
|
+
RoborockDockTypeCode.shell_4d_dock,
|
|
777
|
+
RoborockDockTypeCode.f1r_dock,
|
|
778
|
+
RoborockDockTypeCode.f1s_dock,
|
|
779
|
+
RoborockDockTypeCode.o7h_dock,
|
|
748
780
|
}
|
|
749
781
|
|
|
750
782
|
_HATCH_DOOR_DOCK_COOL_FAN_DOCK_TYPES = {
|
|
@@ -755,6 +787,56 @@ _SPECIAL_WASH_TEMP_DOCK_TYPES = {
|
|
|
755
787
|
RoborockDockTypeCode.shell_2e_lite_dock,
|
|
756
788
|
}
|
|
757
789
|
|
|
790
|
+
_HIGH_TMP_WATER_DOCK_TYPES = {
|
|
791
|
+
RoborockDockTypeCode.k1r_dock,
|
|
792
|
+
RoborockDockTypeCode.shell_4rc_dock,
|
|
793
|
+
RoborockDockTypeCode.shell_2e_heat_dock,
|
|
794
|
+
RoborockDockTypeCode.f1_dock,
|
|
795
|
+
RoborockDockTypeCode.f1r_dock,
|
|
796
|
+
RoborockDockTypeCode.f2r_dock,
|
|
797
|
+
RoborockDockTypeCode.f1c_dock,
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
_DOUBLE_SERIAL_COMMUNICATION_DOCK_TYPES = {
|
|
801
|
+
RoborockDockTypeCode.k1s_pro_dock,
|
|
802
|
+
RoborockDockTypeCode.type_27_dock,
|
|
803
|
+
RoborockDockTypeCode.k1r_dock,
|
|
804
|
+
RoborockDockTypeCode.shell_4r_dock,
|
|
805
|
+
RoborockDockTypeCode.shell_4p_dock,
|
|
806
|
+
RoborockDockTypeCode.shell_4s_dock,
|
|
807
|
+
RoborockDockTypeCode.o7_dock,
|
|
808
|
+
RoborockDockTypeCode.k1d_dock,
|
|
809
|
+
RoborockDockTypeCode.shell_3p_dock,
|
|
810
|
+
RoborockDockTypeCode.f1_dock,
|
|
811
|
+
RoborockDockTypeCode.f1r_dock,
|
|
812
|
+
RoborockDockTypeCode.f2r_dock,
|
|
813
|
+
RoborockDockTypeCode.f1s_dock,
|
|
814
|
+
RoborockDockTypeCode.o7h_dock,
|
|
815
|
+
RoborockDockTypeCode.f1c_dock,
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
_DOUBLE_SERIAL_COMMUNICATION_AM_DOCK_TYPES = {
|
|
819
|
+
RoborockDockTypeCode.shell_4rc_dock,
|
|
820
|
+
RoborockDockTypeCode.shell_4d_dock,
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
_NO_WATER_FLOW_CAROUSEL_DOCK_TYPES = {
|
|
824
|
+
RoborockDockTypeCode.f1r_dock,
|
|
825
|
+
RoborockDockTypeCode.f2r_dock,
|
|
826
|
+
RoborockDockTypeCode.f1s_dock,
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
_SIMPLE_WASH_MODE_DOCK_TYPES = {
|
|
830
|
+
RoborockDockTypeCode.f1_dock,
|
|
831
|
+
RoborockDockTypeCode.f1r_dock,
|
|
832
|
+
RoborockDockTypeCode.f2r_dock,
|
|
833
|
+
RoborockDockTypeCode.f1c_dock,
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
_STEAM_WASH_DOCK_TYPES = {
|
|
837
|
+
RoborockDockTypeCode.o7h_dock,
|
|
838
|
+
}
|
|
839
|
+
|
|
758
840
|
|
|
759
841
|
@dataclass(frozen=True)
|
|
760
842
|
class RoborockDockFeatures:
|
|
@@ -855,6 +937,28 @@ class RoborockDockFeatures:
|
|
|
855
937
|
def is_special_support_wash_temp(self) -> bool:
|
|
856
938
|
return self.dock_type in _SPECIAL_WASH_TEMP_DOCK_TYPES
|
|
857
939
|
|
|
940
|
+
@property
|
|
941
|
+
def is_high_tmp_water_supported(self) -> bool:
|
|
942
|
+
return self.dock_type in _HIGH_TMP_WATER_DOCK_TYPES
|
|
943
|
+
|
|
944
|
+
@property
|
|
945
|
+
def is_double_serial_communication_supported(self) -> bool:
|
|
946
|
+
return self.dock_type in _DOUBLE_SERIAL_COMMUNICATION_DOCK_TYPES or self._matches_am_variant(
|
|
947
|
+
_DOUBLE_SERIAL_COMMUNICATION_AM_DOCK_TYPES
|
|
948
|
+
)
|
|
949
|
+
|
|
950
|
+
@property
|
|
951
|
+
def is_no_water_flow_carousel(self) -> bool:
|
|
952
|
+
return self.dock_type in _NO_WATER_FLOW_CAROUSEL_DOCK_TYPES
|
|
953
|
+
|
|
954
|
+
@property
|
|
955
|
+
def is_simple_wash_mode_supported(self) -> bool:
|
|
956
|
+
return self.dock_type in _SIMPLE_WASH_MODE_DOCK_TYPES
|
|
957
|
+
|
|
958
|
+
@property
|
|
959
|
+
def is_steam_wash_supported(self) -> bool:
|
|
960
|
+
return self.dock_type in _STEAM_WASH_DOCK_TYPES
|
|
961
|
+
|
|
858
962
|
|
|
859
963
|
WASH_N_FILL_DOCK_TYPES = [
|
|
860
964
|
dock_type for dock_type in RoborockDockTypeCode if RoborockDockFeatures.from_dock_type(dock_type).is_washable
|