Skip to content

Commit 3ac8f2d

Browse files
authored
feat: get the latest clean info (#522)
1 parent 1b17325 commit 3ac8f2d

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

roborock/clean_modes.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ class WaterModes(RoborockModeEnum):
4545
CUSTOM = ("custom_water_flow", 207)
4646
EXTREME = ("extreme", 208)
4747
SMART_MODE = ("smart_mode", 209)
48+
PURE_WATER_FLOW_START = ("slight", 221)
49+
PURE_WATER_FLOW_SMALL = ("low", 225)
50+
PURE_WATER_FLOW_MIDDLE = ("medium", 235)
51+
PURE_WATER_FLOW_LARGE = ("moderate", 245)
52+
PURE_WATER_SUPER_BEGIN = ("high", 248)
53+
PURE_WATER_FLOW_END = ("extreme", 250)
4854

4955

5056
class WashTowelModes(RoborockModeEnum):
@@ -112,6 +118,18 @@ def get_clean_routes(features: DeviceFeatures, region: str) -> list[CleanRoutes]
112118

113119
def get_water_modes(features: DeviceFeatures) -> list[WaterModes]:
114120
"""Get the valid water modes for the device - also known as 'water flow' or 'water level'"""
121+
# If the device supports water slide mode, it uses a completely different set of modes. Technically, it can even
122+
# support values in between. But for now we will just support the main values.
123+
if features.is_water_slide_mode_supported:
124+
return [
125+
WaterModes.PURE_WATER_FLOW_START,
126+
WaterModes.PURE_WATER_FLOW_SMALL,
127+
WaterModes.PURE_WATER_FLOW_MIDDLE,
128+
WaterModes.PURE_WATER_FLOW_LARGE,
129+
WaterModes.PURE_WATER_SUPER_BEGIN,
130+
WaterModes.PURE_WATER_FLOW_END,
131+
]
132+
115133
supported_modes = [WaterModes.OFF]
116134
if features.is_mop_shake_module_supported:
117135
# For mops that have the vibrating mop pad, they do mild standard intense
@@ -131,6 +149,15 @@ def get_water_modes(features: DeviceFeatures) -> list[WaterModes]:
131149
return supported_modes
132150

133151

152+
def is_mode_customized(clean_mode: VacuumModes, water_mode: WaterModes, mop_mode: CleanRoutes) -> bool:
153+
"""Check if any of the cleaning modes are set to a custom value."""
154+
return (
155+
clean_mode == VacuumModes.CUSTOMIZED
156+
or water_mode == WaterModes.CUSTOMIZED
157+
or mop_mode == CleanRoutes.CUSTOMIZED
158+
)
159+
160+
134161
def is_smart_mode_set(water_mode: WaterModes, clean_mode: VacuumModes, mop_mode: CleanRoutes) -> bool:
135162
"""Check if the smart mode is set for the given water mode and clean mode"""
136163
return (

roborock/device_features.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,35 @@ class NewFeatureStrBit(IntEnum):
5757
MIDWAY_BACK_TO_DOCK = 85
5858
SUPPORT_MAIN_BRUSH_UP_DOWN = 86
5959
EGG_DANCE_MODE = 87
60+
MECHANICAL_ARM_MODE = 89
61+
TIDYUP_ZONES = MECHANICAL_ARM_MODE
62+
CLEAN_TIME_LINE = 91
63+
CLEAN_THEN_MOP_MODE = 93
64+
TYPE_IDENTIFY = 94
65+
SUPPORT_GET_PARTICULAR_STATUS = 96
66+
THREE_D_MAPPING_INNER_TEST = 97
67+
SYNC_SERVER_NAME = 98
68+
SHOULD_SHOW_ARM_OVER_LOAD = 99
69+
COLLECT_DUST_COUNT_SHOW = 100
70+
SUPPORT_API_APP_STOP_GRASP = 101
71+
CTM_WITH_REPEAT = 102
72+
SIDE_BRUSH_LIFT_CARPET = 104
73+
DETECT_WIRE_CARPET = 105
74+
WATER_SLIDE_MODE = 106
75+
SOAK_AND_WASH = 107
76+
CLEAN_EFFICIENCY = 108
77+
BACK_WASH_NEW_SMART = 109
78+
DUAL_BAND_WI_FI = 110
79+
PROGRAM_MODE = 111
80+
CLEAN_FLUID_DELIVERY = 112
81+
CARPET_LONG_HAIRED_EX = 113
82+
OVER_SEA_CTM = 114
83+
FULL_DUPLES_SWITCH = 115
84+
LOW_AREA_ACCESS = 116
85+
FOLLOW_LOW_OBS = 117
86+
TWO_GEARS_NO_COLLISION = 118
87+
CARPET_SHAPE_TYPE = 119
88+
SR_MAP = 120
6089

6190

6291
class ProductFeatures(StrEnum):
@@ -391,6 +420,59 @@ class DeviceFeatures:
391420
metadata={"new_feature_str_bit": NewFeatureStrBit.SUPPORT_MAIN_BRUSH_UP_DOWN}
392421
)
393422
is_egg_dance_mode_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.EGG_DANCE_MODE})
423+
is_mechanical_arm_mode_supported: bool = field(
424+
metadata={"new_feature_str_bit": NewFeatureStrBit.MECHANICAL_ARM_MODE}
425+
)
426+
is_tidyup_zones_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.TIDYUP_ZONES})
427+
is_clean_time_line_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.CLEAN_TIME_LINE})
428+
is_clean_then_mop_mode_supported: bool = field(
429+
metadata={"new_feature_str_bit": NewFeatureStrBit.CLEAN_THEN_MOP_MODE}
430+
)
431+
is_type_identify_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.TYPE_IDENTIFY})
432+
is_support_get_particular_status_supported: bool = field(
433+
metadata={"new_feature_str_bit": NewFeatureStrBit.SUPPORT_GET_PARTICULAR_STATUS}
434+
)
435+
is_three_d_mapping_inner_test_supported: bool = field(
436+
metadata={"new_feature_str_bit": NewFeatureStrBit.THREE_D_MAPPING_INNER_TEST}
437+
)
438+
is_sync_server_name_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.SYNC_SERVER_NAME})
439+
is_should_show_arm_over_load_supported: bool = field(
440+
metadata={"new_feature_str_bit": NewFeatureStrBit.SHOULD_SHOW_ARM_OVER_LOAD}
441+
)
442+
is_collect_dust_count_show_supported: bool = field(
443+
metadata={"new_feature_str_bit": NewFeatureStrBit.COLLECT_DUST_COUNT_SHOW}
444+
)
445+
is_support_api_app_stop_grasp_supported: bool = field(
446+
metadata={"new_feature_str_bit": NewFeatureStrBit.SUPPORT_API_APP_STOP_GRASP}
447+
)
448+
is_ctm_with_repeat_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.CTM_WITH_REPEAT})
449+
is_side_brush_lift_carpet_supported: bool = field(
450+
metadata={"new_feature_str_bit": NewFeatureStrBit.SIDE_BRUSH_LIFT_CARPET}
451+
)
452+
is_detect_wire_carpet_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.DETECT_WIRE_CARPET})
453+
is_water_slide_mode_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.WATER_SLIDE_MODE})
454+
is_soak_and_wash_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.SOAK_AND_WASH})
455+
is_clean_efficiency_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.CLEAN_EFFICIENCY})
456+
is_back_wash_new_smart_supported: bool = field(
457+
metadata={"new_feature_str_bit": NewFeatureStrBit.BACK_WASH_NEW_SMART}
458+
)
459+
is_dual_band_wi_fi_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.DUAL_BAND_WI_FI})
460+
is_program_mode_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.PROGRAM_MODE})
461+
is_clean_fluid_delivery_supported: bool = field(
462+
metadata={"new_feature_str_bit": NewFeatureStrBit.CLEAN_FLUID_DELIVERY}
463+
)
464+
is_carpet_long_haired_ex_supported: bool = field(
465+
metadata={"new_feature_str_bit": NewFeatureStrBit.CARPET_LONG_HAIRED_EX}
466+
)
467+
is_over_sea_ctm_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.OVER_SEA_CTM})
468+
is_full_duples_switch_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.FULL_DUPLES_SWITCH})
469+
is_low_area_access_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.LOW_AREA_ACCESS})
470+
is_follow_low_obs_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.FOLLOW_LOW_OBS})
471+
is_two_gears_no_collision_supported: bool = field(
472+
metadata={"new_feature_str_bit": NewFeatureStrBit.TWO_GEARS_NO_COLLISION}
473+
)
474+
is_carpet_shape_type_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.CARPET_SHAPE_TYPE})
475+
is_sr_map_supported: bool = field(metadata={"new_feature_str_bit": NewFeatureStrBit.SR_MAP})
394476

395477
# Features from feature_info list
396478
is_led_status_switch_supported: bool = field(metadata={"robot_features": 119})

0 commit comments

Comments
 (0)