@@ -207,12 +207,32 @@ def get_mop_only_vacuum_mode(features: DeviceFeatures) -> VacuumModes:
207207 return VacuumModes .OFF
208208
209209
210- _CLEAN_MOTOR_MODE_PARAMS : dict [CleaningModes , tuple [int , int , int ]] = {
211- CleaningModes .VACUUM : (VacuumModes .BALANCED .code , WaterModes .OFF .code , CleanRoutes .STANDARD .code ),
212- CleaningModes .VAC_AND_MOP : (VacuumModes .BALANCED .code , WaterModes .STANDARD .code , CleanRoutes .STANDARD .code ),
213- CleaningModes .CUSTOM : (VacuumModes .CUSTOMIZED .code , WaterModes .CUSTOMIZED .code , CleanRoutes .CUSTOMIZED .code ),
214- CleaningModes .SMART_MODE : (VacuumModes .SMART_MODE .code , WaterModes .SMART_MODE .code , CleanRoutes .SMART_MODE .code ),
215- }
210+ def _get_default_mopping_water_code (features : DeviceFeatures ) -> int :
211+ """Pick a sensible default water code when mopping for the device."""
212+ # Water-slide devices use a disjoint set of water codes; pick a mid-flow
213+ # slide code instead of the standard 202, which they don't accept.
214+ if features .is_water_slide_mode_supported :
215+ return WaterModes .PURE_WATER_FLOW_MIDDLE .code
216+ return WaterModes .STANDARD .code
217+
218+
219+ def _get_clean_motor_mode_params (mode : CleaningModes , features : DeviceFeatures ) -> tuple [int , int , int ]:
220+ """Return (fan_power, water_box_mode, mop_mode) codes for the high-level mode."""
221+ if mode == CleaningModes .VACUUM :
222+ return (VacuumModes .BALANCED .code , WaterModes .OFF .code , CleanRoutes .STANDARD .code )
223+ if mode == CleaningModes .VAC_AND_MOP :
224+ return (VacuumModes .BALANCED .code , _get_default_mopping_water_code (features ), CleanRoutes .STANDARD .code )
225+ if mode == CleaningModes .MOP :
226+ return (
227+ get_mop_only_vacuum_mode (features ).code ,
228+ _get_default_mopping_water_code (features ),
229+ CleanRoutes .STANDARD .code ,
230+ )
231+ if mode == CleaningModes .CUSTOM :
232+ return (VacuumModes .CUSTOMIZED .code , WaterModes .CUSTOMIZED .code , CleanRoutes .CUSTOMIZED .code )
233+ if mode == CleaningModes .SMART_MODE :
234+ return (VacuumModes .SMART_MODE .code , WaterModes .SMART_MODE .code , CleanRoutes .SMART_MODE .code )
235+ raise RoborockUnsupportedFeature (f"Cleaning mode { mode .value !r} is not supported" )
216236
217237
218238def get_cleaning_mode_parameters (cleaning_mode : str | CleaningModes , features : DeviceFeatures ) -> list [dict [str , int ]]:
@@ -224,13 +244,7 @@ def get_cleaning_mode_parameters(cleaning_mode: str | CleaningModes, features: D
224244 if mode not in get_cleaning_mode_options (features ):
225245 raise RoborockUnsupportedFeature (f"Cleaning mode { mode .value !r} is not supported" )
226246
227- if mode == CleaningModes .MOP :
228- fan_power = get_mop_only_vacuum_mode (features ).code
229- water_box_mode = WaterModes .STANDARD .code
230- mop_mode = CleanRoutes .STANDARD .code
231- else :
232- fan_power , water_box_mode , mop_mode = _CLEAN_MOTOR_MODE_PARAMS [mode ]
233-
247+ fan_power , water_box_mode , mop_mode = _get_clean_motor_mode_params (mode , features )
234248 params : dict [str , int ] = {"fan_power" : fan_power , "water_box_mode" : water_box_mode }
235249 if features .is_clean_route_setting_supported :
236250 params ["mop_mode" ] = mop_mode
0 commit comments