roborock.data.mower.mower_code_mappings

Code mappings for Roborock mower devices.

  1"""Code mappings for Roborock mower devices."""
  2
  3import logging
  4from typing import Self, cast
  5
  6from roborock.data.code_mappings import RoborockModeEnum
  7
  8_LOGGER = logging.getLogger(__name__)
  9
 10__all__ = [
 11    "MowerAfsStatus",
 12    "MowerChargeState",
 13    "MowerChargeType",
 14    "MowerConfMode",
 15    "MowerDetailState",
 16    "MowerDockState",
 17    "MowerEffMode",
 18    "MowerEnum",
 19    "MowerErrorCode",
 20    "MowerFcState",
 21    "MowerMappingState",
 22    "MowerMappingType",
 23    "MowerMowState",
 24    "MowerMowType",
 25    "MowerNetworkChannel",
 26    "MowerOffDockNoTaskStatus",
 27    "MowerOfflineStatus",
 28    "MowerOtaState",
 29    "MowerPattern",
 30    "MowerPendType",
 31    "MowerRemoteState",
 32    "MowerStartType",
 33]
 34
 35
 36class MowerEnum(RoborockModeEnum):
 37    """Base for mower enums."""
 38
 39    @classmethod
 40    def from_code(cls, code: int | str) -> Self:
 41        """Resolve a wire value by name, string value, or integer code."""
 42        if (member := cls.from_any_optional(code)) is not None:
 43            return member
 44        _LOGGER.debug("Unknown %s code %r; defaulting to UNKNOWN", cls.__name__, code)
 45        return cast(Self, cls.UNKNOWN)  # type: ignore[attr-defined]
 46
 47
 48class MowerMowType(MowerEnum):
 49    """Mowing task selection reported by DPS 122."""
 50
 51    UNKNOWN = ("unknown", -1)
 52    NONE = ("none", 0)
 53    GLOBAL = ("global", 1)
 54    EDGE = ("edge", 2)
 55    SELECTION = ("selection", 3)
 56    ZONING = ("zoning", 4)
 57    REMOTE = ("remote", 5)
 58    RANDOM = ("random", 6)
 59
 60
 61class MowerMowState(MowerEnum):
 62    """Compact mowing state (MowStateDpValue.Type)."""
 63
 64    UNKNOWN = ("unknown", -1)
 65    IDLE = ("idle", 0)
 66    ZIGZAG_MOWING = ("zigzag_mowing", 1)
 67    EDGE_MOWING = ("edge_mowing", 2)
 68    TRANSITION = ("transition", 3)
 69    SUSPENDED = ("suspended", 4)
 70    REMOTE_WALKING = ("remote_walking", 5)
 71    REMOTE_MOWING = ("remote_mowing", 6)
 72
 73
 74class MowerMappingType(MowerEnum):
 75    """Mapping operation reported by DPS 124."""
 76
 77    UNKNOWN = ("unknown", -1)
 78    NONE = ("none", 0)
 79    LAWN_MAPPING = ("lawn_mapping", 1)
 80    FORBIDDEN_ZONE_MAPPING = ("forbidden_zone_mapping", 2)
 81    CHANNEL_MAPPING = ("channel_mapping", 3)
 82    SPLIT_WORKSPACE = ("split_workspace", 4)
 83    MERGE_WORKSPACE = ("merge_workspace", 5)
 84    BOUNDARY_MODIFY = ("boundary_modify", 6)
 85
 86
 87class MowerMappingState(MowerEnum):
 88    """Mapping activity reported by DPS 125."""
 89
 90    UNKNOWN = ("unknown", -1)
 91    IDLE = ("idle", 0)
 92    AUTO_MAPPING = ("auto_mapping", 1)
 93    TRACK_ERASE = ("track_erase", 2)
 94    SUSPENDED = ("suspended", 3)
 95    SAVING_MAP = ("saving_map", 4)
 96    REMOTE_WALKING = ("remote_walking", 5)
 97    REMOTE_MAPPING = ("remote_mapping", 6)
 98
 99
100class MowerOtaState(MowerEnum):
101    """Firmware update state reported by DPS 126."""
102
103    UNKNOWN = ("unknown", -1)
104    IDLE = ("idle", 0)
105    DOWNLOADING = ("downloading", 1)
106    INSTALLING = ("installing", 2)
107    REBOOTING = ("rebooting", 3)
108
109
110class MowerChargeState(MowerEnum):
111    """Charging state reported by DPS 127."""
112
113    UNKNOWN = ("unknown", -1)
114    NOT_CHARGING = ("not_charging", 0)
115    CHARGING = ("charging", 1)
116    CHARGE_COMPLETED = ("charge_completed", 2)
117    WAITING_CHARGE = ("waiting_charge", 3)
118    LOW_POWER = ("low_power", 4)
119    CHARGE_ERROR = ("charge_error", 5)
120
121
122class MowerDockState(MowerEnum):
123    """Return-to-dock state reported by DPS 128."""
124
125    UNKNOWN = ("unknown", -1)
126    IDLE = ("idle", 0)
127    MOVING_TO_TARGET = ("moving_to_target", 1)
128    DOCKING = ("docking", 2)
129    SUSPENDED = ("suspended", 3)
130
131
132class MowerChargeType(MowerEnum):
133    """Reason for returning to charge reported by DPS 129."""
134
135    UNKNOWN = ("unknown", 0)
136    MANUAL_DOCK = ("manual_dock", 1)
137    RAIN_DOCK = ("rain_dock", 2)
138    DO_NOT_DISTURB_DOCK = ("do_not_disturb_dock", 3)
139    STANDBY_TIMEOUT_DOCK = ("standby_timeout_dock", 4)
140    LOW_BATTERY_DOCK = ("low_battery_dock", 5)
141    TASK_FINISHED_DOCK = ("task_finished_dock", 6)
142    MOW_FAULT_DOCK = ("mow_fault_dock", 7)
143
144
145class MowerPendType(MowerEnum):
146    """Pause or interruption reason reported by DPS 130."""
147
148    UNKNOWN = ("unknown", -1)
149    NOT_SUSPENDED = ("not_suspended", 0)
150    APP_PAUSE = ("app_pause", 1)
151    BUTTON_EMERGENCY_STOP = ("button_emergency_stop", 2)
152    FAULT = ("fault", 3)
153    BREAKPOINT_PAUSE = ("breakpoint_pause", 4)
154    OTHER = ("other", 5)
155
156
157class MowerRemoteState(MowerEnum):
158    """Remote control state reported by DPS 131."""
159
160    UNKNOWN = ("unknown", -1)
161    IDLE = ("idle", 0)
162    VIDEO_REMOTE = ("video_remote", 1)
163    REMOTE_WALKING = ("remote_walking", 2)
164
165
166class MowerStartType(MowerEnum):
167    """Task start trigger reported by DPS 132."""
168
169    UNKNOWN = ("unknown", -1)
170    DEFAULT = ("default", 0)
171    APP_START = ("app_start", 1)
172    BUTTON_START = ("button_start", 2)
173    SCHEDULE_START = ("schedule_start", 3)
174
175
176class MowerEffMode(MowerEnum):
177    """Reported efficiency mode on DPS 133."""
178
179    UNKNOWN = ("unknown", 0)
180    DAILY = ("daily", 1)
181    PRECISE = ("precise", 2)
182    FAST = ("fast", 3)
183
184
185class MowerPattern(MowerEnum):
186    """Reported mowing pattern on DPS 136."""
187
188    UNKNOWN = ("unknown", 0)
189    ZIGZAG = ("zigzag", 1)
190    WELL = ("well", 2)
191    DIAMOND = ("diamond", 3)
192    TRIANGLE = ("triangle", 4)
193    AUTO_DEFLECT = ("auto_deflect", 5)
194    RANDOM = ("random", 6)
195
196
197class MowerConfMode(MowerEnum):
198    """Preference configuration scope on DPS 137."""
199
200    UNKNOWN = ("unknown", 0)
201    GLOBAL_CONFIG = ("global_config", 1)
202    ZONE_CUSTOM = ("zone_custom", 2)
203
204
205class MowerOfflineStatus(MowerEnum):
206    """Shutdown or reboot reason on DPS 138."""
207
208    UNKNOWN = ("unknown", -1)
209    ONLINE = ("online", 0)
210    MANUAL_SHUTDOWN = ("manual_shutdown", 1)
211    SLEEP_SHUTDOWN = ("sleep_shutdown", 2)
212    LOW_BATTERY_SHUTDOWN = ("low_battery_shutdown", 3)
213    UPGRADE_REBOOT = ("upgrade_reboot", 4)
214
215
216class MowerFcState(MowerEnum):
217    """Factory or test mode indicator on DPS 141."""
218
219    UNKNOWN = ("unknown", -1)
220    NOT_FC = ("not_fc", 0)
221    FC = ("fc", 1)
222
223
224class MowerOffDockNoTaskStatus(MowerEnum):
225    """Mower off-dock status without an active task on DPS 143."""
226
227    UNKNOWN = ("unknown", 0)
228    WAITING = ("waiting", 1)
229    SUSPENDING = ("suspending", 2)
230    DOCKING = ("docking", 3)
231    REMOTING = ("remoting", 4)
232
233
234class MowerAfsStatus(MowerEnum):
235    """Service status on DPS 144."""
236
237    UNKNOWN = ("unknown", -1)
238    IDLE = ("idle", 0)
239    BIT = ("bit", 1)
240    MMT_OBA = ("mmt_oba", 2)
241    CALIBRATION = ("calibration", 3)
242    ACTIVE = ("active", 4)
243    INACTIVE = ("inactive", 5)
244
245
246class MowerNetworkChannel(MowerEnum):
247    """Current network route on DPS 145."""
248
249    UNKNOWN = ("unknown", 0)
250    WLAN0 = ("wlan0", 1)
251    WLAN1 = ("wlan1", 2)
252    MOBILE_4G = ("mobile_4g", 3)
253
254
255class MowerDetailState(MowerEnum):
256    """Detailed task state reported on DPS 123 and in GET_ROBOT_INFO replies."""
257
258    UNKNOWN = ("unknown", 0)
259
260    MAP_INITIALIZING = ("map_initializing", 1)
261    MAP_UNDOCKING = ("map_undocking", 2)
262    MAP_UNDOCK_FAULT = ("map_undock_fault", 3)
263    MAP_LOCATING = ("map_locating", 4)
264    MAP_PREPARE_BOUNDARY = ("map_prepare_boundary", 5)
265    MAP_PREPARE_ISLAND = ("map_prepare_island", 6)
266    MAP_PREPARE_PATH = ("map_prepare_path", 7)
267    MAP_BOUNDARY = ("map_boundary", 8)
268    MAP_ISLAND = ("map_island", 9)
269    MAP_PATH = ("map_path", 10)
270    MAP_BOUNDARY_AUTO = ("map_boundary_auto", 11)
271    # The protocol spelling "MAP_ERASEING" is intentional.
272    MAP_ERASING = ("map_eraseing", 12)
273    MAP_SAVE = ("map_save", 13)
274    MAP_WAIT = ("map_wait", 14)
275    MAP_RECOVERABLE_FAULT = ("map_recoverable_fault", 15)
276    MAP_FAULT = ("map_fault", 16)
277    MAP_EMERGENCY_STOP = ("map_emergency_stop", 17)
278    MAP_WAITING_FAULT = ("map_waiting_fault", 18)
279    MAP_NO_AVOID = ("map_no_avoid", 19)
280    MAP_PREPARE_NO_AVOID = ("map_prepare_no_avoid", 20)
281    MAP_RESET_PASSAGE = ("map_reset_passage", 21)
282    MAP_PREPARE_RESET_PASSAGE = ("map_prepare_reset_passage", 22)
283    MAP_EDIT_BOUNDARY = ("map_edit_boundary", 23)
284    MAP_PREPARE_EDIT_BOUNDARY = ("map_prepare_edit_boundary", 24)
285    MAP_CONFIRM_EDIT_BOUNDARY = ("map_confirm_edit_boundary", 25)
286
287    MOW_INITIALIZING = ("mow_initializing", 51)
288    MOW_UNDOCKING = ("mow_undocking", 52)
289    MOW_LOCATING = ("mow_locating", 53)
290    MOW_ADJUST_CUTTER = ("mow_adjust_cutter", 54)
291    MOW_ZIG_ZAG = ("mow_zig_zag", 55)
292    MOW_EDGE = ("mow_edge", 56)
293    MOW_GOTO = ("mow_goto", 57)
294    MOW_SUSPEND = ("mow_suspend", 58)
295    MOW_RECOVERABLE_FAULT = ("mow_recoverable_fault", 59)
296    MOW_FAULT = ("mow_fault", 60)
297    MOW_DOCK_RAINFALL = ("mow_dock_rainfall", 61)
298    MOW_DOCK_NOTDISTURB = ("mow_dock_notdisturb", 62)
299    MOW_DOCK_LOW_BATTERY = ("mow_dock_low_battery", 63)
300    MOW_WAIT = ("mow_wait", 64)
301    MOW_PREPARE_REMOTE = ("mow_prepare_remote", 65)
302    MOW_REMOTE = ("mow_remote", 66)
303    MOW_EMERGENCY_STOP = ("mow_emergency_stop", 67)
304    MOW_DOCK_MANUAL = ("mow_dock_manual", 68)
305    MOW_DOCK_FAULT = ("mow_dock_fault", 69)
306    MOW_REMOTE_UNDOCKING = ("mow_remote_undocking", 70)
307    MOW_TO_DOCK_INITIALIZING = ("mow_to_dock_initializing", 71)
308    MOW_TO_DOCK_LOCATING = ("mow_to_dock_locating", 72)
309    MOW_TO_DOCK_RECOVERABLE_FAULT = ("mow_to_dock_recoverable_fault", 73)
310    MOW_TO_DOCK_FAULT = ("mow_to_dock_fault", 74)
311    MOW_TO_DOCK_EMERGENCY_STOP = ("mow_to_dock_emergency_stop", 75)
312    MOW_TO_DOCK_CHARGING = ("mow_to_dock_charging", 76)
313    MOW_TO_DOCK_CHARGE_COMPLETED = ("mow_to_dock_charge_completed", 77)
314    MOW_PAUSE = ("mow_pause", 78)
315
316    FREE = ("free", 101)
317    FREE_INITIALIZING = ("free_initializing", 102)
318    FREE_LOCATING = ("free_locating", 103)
319    FREE_DOCK_MANUAL = ("free_dock_manual", 104)
320    FREE_DOCK_MOW_END = ("free_dock_mow_end", 105)
321    FREE_DOCK_PLAN_END = ("free_dock_plan_end", 106)
322    FREE_EMERGENCY_STOP = ("free_emergency_stop", 107)
323    FREE_RECOVERABLE_FAULT = ("free_recoverable_fault", 108)
324    FREE_FAULT = ("free_fault", 109)
325    FREE_BATTERY_HOLD_MODE = ("free_battery_hold_mode", 110)
326
327    CHARGING = ("charging", 151)
328    CHARGE_COMPLETED = ("charge_completed", 152)
329    CHARGE_WAITING = ("charge_waiting", 153)
330    CHARGE_FAULT = ("charge_fault", 154)
331
332
333class MowerErrorCode(MowerEnum):
334    """User-facing error code reported by DPS 120."""
335
336    UNKNOWN = ("unknown", 0)
337    MAIN_CUTTER_OVER_CURRENT = ("main_cutter_over_current", 1)
338    MAIN_CUTTER_OVER_TEMPERATURE = ("main_cutter_over_temperature", 2)
339    MAIN_CUTTER_DYNAMIC_UNBALANCE = ("main_cutter_dynamic_unbalance", 3)
340    EDGE_CUTTER_OVER_CURRENT = ("edge_cutter_over_current", 4)
341    EDGE_CUTTER_OVER_TEMPERATURE = ("edge_cutter_over_temperature", 5)
342    EDGE_CUTTER_DYNAMIC_UNBALANCE = ("edge_cutter_dynamic_unbalance", 6)
343    HEIGHT_MODULE_ADJUSTING_INCOMPLETE = ("height_module_adjusting_incomplete", 7)
344    TRAVEL_MOTOR_LEFT_FRONT_OVER_CURRENT = ("travel_motor_left_front_over_current", 8)
345    TRAVEL_MOTOR_RIGHT_FRONT_OVER_CURRENT = ("travel_motor_right_front_over_current", 9)
346    TRAVEL_MOTOR_LEFT_REAR_OVER_CURRENT = ("travel_motor_left_rear_over_current", 10)
347    TRAVEL_MOTOR_RIGHT_REAR_OVER_CURRENT = ("travel_motor_right_rear_over_current", 11)
348    TRAVEL_MOTOR_OVER_TEMPERATURE = ("travel_motor_over_temperature", 12)
349    STEERING_MOTOR_LEFT_FRONT_OVER_CURRENT = ("steering_motor_left_front_over_current", 13)
350    STEERING_MOTOR_RIGHT_FRONT_OVER_CURRENT = ("steering_motor_right_front_over_current", 14)
351    STEERING_MOTOR_OVER_TEMPERATURE = ("steering_motor_over_temperature", 15)
352    STOP = ("stop", 16)
353    TILT = ("tilt", 17)
354    LIFT = ("lift", 18)
355    FLIP = ("flip", 19)
356    OUT_OF_BOUND = ("out_of_bound", 20)
357    BUMPER = ("bumper", 21)
358    BATTERY_DISCHARGE_OVER_TEMPERATURE = ("battery_discharge_over_temperature", 22)
359    BATTERY_DISCHARGE_LOW_TEMPERATURE = ("battery_discharge_low_temperature", 23)
360    BATTERY_UNOFFICIAL = ("battery_unofficial", 24)
361    DIRTY_CHARGING_CLIPS = ("dirty_charging_clips", 25)
362    CHARGE_STATION_NO_POWER = ("charge_station_no_power", 26)
363    CAMERA_DIRTY_OR_OBSTRUCTED = ("camera_dirty_or_obstructed", 27)
364    CAMERA_OVER_TEMPERATURE = ("camera_over_temperature", 28)
365    CAMERA_LED_OBSTRUCTED = ("camera_led_obstructed", 29)
366    LIDAR_DIRTY = ("lidar_dirty", 30)
367    LIDAR_OVER_TEMPERATURE = ("lidar_over_temperature", 31)
368    LOCATION_FAILED = ("location_failed", 32)
369    LOCATION_AT_ISLAND = ("location_at_island", 33)
370    LOCATION_AT_NON_COMPLIANT_SLOPE = ("location_at_non_compliant_slope", 34)
371    BE_TRAPPED = ("be_trapped", 35)
372    CHARGE_STATION_OR_RTK_SLIGHT_MOVEMENT_DOCK = ("charge_station_or_rtk_slight_movement_dock", 36)
373    N_RTK_SIGNIFICANT_MOVEMENT = ("n_rtk_significant_movement", 37)
374    RTK_SIGNIFICANT_MOVEMENT = ("rtk_significant_movement", 38)
375    DOCK_CHARGE_STATION_SEARCH_FAIL = ("dock_charge_station_search_fail", 39)
376    DOCK_QRCODE_SCAN_FAIL = ("dock_qrcode_scan_fail", 40)
377    DOCK_ADJUST_ERROR = ("dock_adjust_error", 41)
378    UNDOCK_ERROR = ("undock_error", 42)
379    BATTERY_CHARGE_OVER_TEMPERATURE = ("battery_charge_over_temperature", 43)
380    BATTERY_CHARGE_LOW_TEMPERATURE = ("battery_charge_low_temperature", 44)
381    CAMERA_SEVERELY_DIRTY = ("camera_severely_dirty", 45)
382    NO_PLUGIN_KEY = ("no_plugin_key", 46)
383    CAMERA_REAR_SIDE_DIRTY = ("camera_rear_side_dirty", 48)
384    N_RTK_NETWORK_ERROR = ("n_rtk_network_error", 55)
385    MAIN_CUTTER_FAULT = ("main_cutter_fault", 101)
386    EDGE_CUTTER_FAULT = ("edge_cutter_fault", 102)
387    HEIGHT_MODULE_FAULT = ("height_module_fault", 103)
388    BATTERY_FAULT = ("battery_fault", 104)
389    CAMERA_FAULT = ("camera_fault", 105)
390    CAMERA_LED_FAULT = ("camera_led_fault", 106)
391    MAIN_BOARD_FAULT = ("main_board_fault", 107)
392    LIDAR_FAULT = ("lidar_fault", 108)
393    TRAVEL_MOTOR_LEFT_FRONT_FAULT = ("travel_motor_left_front_fault", 109)
394    TRAVEL_MOTOR_RIGHT_FRONT_FAULT = ("travel_motor_right_front_fault", 110)
395    TRAVEL_MOTOR_LEFT_REAR_FAULT = ("travel_motor_left_rear_fault", 111)
396    TRAVEL_MOTOR_RIGHT_REAR_FAULT = ("travel_motor_right_rear_fault", 112)
397    STEERING_MOTOR_LEFT_FRONT_FAULT = ("steering_motor_left_front_fault", 113)
398    STEERING_MOTOR_RIGHT_FRONT_FAULT = ("steering_motor_right_front_fault", 114)
399    LED_SCREEN_FAULT = ("led_screen_fault", 115)
400    LEFT_SIDE_CAMERA_FAULT = ("left_side_camera_fault", 116)
401    RIGHT_SIDE_CAMERA_FAULT = ("right_side_camera_fault", 117)
402    REAR_SIDE_CAMERA_FAULT = ("rear_side_camera_fault", 118)
class MowerAfsStatus(MowerEnum):
235class MowerAfsStatus(MowerEnum):
236    """Service status on DPS 144."""
237
238    UNKNOWN = ("unknown", -1)
239    IDLE = ("idle", 0)
240    BIT = ("bit", 1)
241    MMT_OBA = ("mmt_oba", 2)
242    CALIBRATION = ("calibration", 3)
243    ACTIVE = ("active", 4)
244    INACTIVE = ("inactive", 5)

Service status on DPS 144.

UNKNOWN = <MowerAfsStatus.UNKNOWN: 'unknown'>
IDLE = <MowerAfsStatus.IDLE: 'idle'>
BIT = <MowerAfsStatus.BIT: 'bit'>
MMT_OBA = <MowerAfsStatus.MMT_OBA: 'mmt_oba'>
CALIBRATION = <MowerAfsStatus.CALIBRATION: 'calibration'>
ACTIVE = <MowerAfsStatus.ACTIVE: 'active'>
INACTIVE = <MowerAfsStatus.INACTIVE: 'inactive'>
class MowerChargeState(MowerEnum):
111class MowerChargeState(MowerEnum):
112    """Charging state reported by DPS 127."""
113
114    UNKNOWN = ("unknown", -1)
115    NOT_CHARGING = ("not_charging", 0)
116    CHARGING = ("charging", 1)
117    CHARGE_COMPLETED = ("charge_completed", 2)
118    WAITING_CHARGE = ("waiting_charge", 3)
119    LOW_POWER = ("low_power", 4)
120    CHARGE_ERROR = ("charge_error", 5)

Charging state reported by DPS 127.

UNKNOWN = <MowerChargeState.UNKNOWN: 'unknown'>
NOT_CHARGING = <MowerChargeState.NOT_CHARGING: 'not_charging'>
CHARGING = <MowerChargeState.CHARGING: 'charging'>
CHARGE_COMPLETED = <MowerChargeState.CHARGE_COMPLETED: 'charge_completed'>
WAITING_CHARGE = <MowerChargeState.WAITING_CHARGE: 'waiting_charge'>
LOW_POWER = <MowerChargeState.LOW_POWER: 'low_power'>
CHARGE_ERROR = <MowerChargeState.CHARGE_ERROR: 'charge_error'>
class MowerChargeType(MowerEnum):
133class MowerChargeType(MowerEnum):
134    """Reason for returning to charge reported by DPS 129."""
135
136    UNKNOWN = ("unknown", 0)
137    MANUAL_DOCK = ("manual_dock", 1)
138    RAIN_DOCK = ("rain_dock", 2)
139    DO_NOT_DISTURB_DOCK = ("do_not_disturb_dock", 3)
140    STANDBY_TIMEOUT_DOCK = ("standby_timeout_dock", 4)
141    LOW_BATTERY_DOCK = ("low_battery_dock", 5)
142    TASK_FINISHED_DOCK = ("task_finished_dock", 6)
143    MOW_FAULT_DOCK = ("mow_fault_dock", 7)

Reason for returning to charge reported by DPS 129.

UNKNOWN = <MowerChargeType.UNKNOWN: 'unknown'>
MANUAL_DOCK = <MowerChargeType.MANUAL_DOCK: 'manual_dock'>
RAIN_DOCK = <MowerChargeType.RAIN_DOCK: 'rain_dock'>
DO_NOT_DISTURB_DOCK = <MowerChargeType.DO_NOT_DISTURB_DOCK: 'do_not_disturb_dock'>
STANDBY_TIMEOUT_DOCK = <MowerChargeType.STANDBY_TIMEOUT_DOCK: 'standby_timeout_dock'>
LOW_BATTERY_DOCK = <MowerChargeType.LOW_BATTERY_DOCK: 'low_battery_dock'>
TASK_FINISHED_DOCK = <MowerChargeType.TASK_FINISHED_DOCK: 'task_finished_dock'>
MOW_FAULT_DOCK = <MowerChargeType.MOW_FAULT_DOCK: 'mow_fault_dock'>
class MowerConfMode(MowerEnum):
198class MowerConfMode(MowerEnum):
199    """Preference configuration scope on DPS 137."""
200
201    UNKNOWN = ("unknown", 0)
202    GLOBAL_CONFIG = ("global_config", 1)
203    ZONE_CUSTOM = ("zone_custom", 2)

Preference configuration scope on DPS 137.

UNKNOWN = <MowerConfMode.UNKNOWN: 'unknown'>
GLOBAL_CONFIG = <MowerConfMode.GLOBAL_CONFIG: 'global_config'>
ZONE_CUSTOM = <MowerConfMode.ZONE_CUSTOM: 'zone_custom'>
class MowerDetailState(MowerEnum):
256class MowerDetailState(MowerEnum):
257    """Detailed task state reported on DPS 123 and in GET_ROBOT_INFO replies."""
258
259    UNKNOWN = ("unknown", 0)
260
261    MAP_INITIALIZING = ("map_initializing", 1)
262    MAP_UNDOCKING = ("map_undocking", 2)
263    MAP_UNDOCK_FAULT = ("map_undock_fault", 3)
264    MAP_LOCATING = ("map_locating", 4)
265    MAP_PREPARE_BOUNDARY = ("map_prepare_boundary", 5)
266    MAP_PREPARE_ISLAND = ("map_prepare_island", 6)
267    MAP_PREPARE_PATH = ("map_prepare_path", 7)
268    MAP_BOUNDARY = ("map_boundary", 8)
269    MAP_ISLAND = ("map_island", 9)
270    MAP_PATH = ("map_path", 10)
271    MAP_BOUNDARY_AUTO = ("map_boundary_auto", 11)
272    # The protocol spelling "MAP_ERASEING" is intentional.
273    MAP_ERASING = ("map_eraseing", 12)
274    MAP_SAVE = ("map_save", 13)
275    MAP_WAIT = ("map_wait", 14)
276    MAP_RECOVERABLE_FAULT = ("map_recoverable_fault", 15)
277    MAP_FAULT = ("map_fault", 16)
278    MAP_EMERGENCY_STOP = ("map_emergency_stop", 17)
279    MAP_WAITING_FAULT = ("map_waiting_fault", 18)
280    MAP_NO_AVOID = ("map_no_avoid", 19)
281    MAP_PREPARE_NO_AVOID = ("map_prepare_no_avoid", 20)
282    MAP_RESET_PASSAGE = ("map_reset_passage", 21)
283    MAP_PREPARE_RESET_PASSAGE = ("map_prepare_reset_passage", 22)
284    MAP_EDIT_BOUNDARY = ("map_edit_boundary", 23)
285    MAP_PREPARE_EDIT_BOUNDARY = ("map_prepare_edit_boundary", 24)
286    MAP_CONFIRM_EDIT_BOUNDARY = ("map_confirm_edit_boundary", 25)
287
288    MOW_INITIALIZING = ("mow_initializing", 51)
289    MOW_UNDOCKING = ("mow_undocking", 52)
290    MOW_LOCATING = ("mow_locating", 53)
291    MOW_ADJUST_CUTTER = ("mow_adjust_cutter", 54)
292    MOW_ZIG_ZAG = ("mow_zig_zag", 55)
293    MOW_EDGE = ("mow_edge", 56)
294    MOW_GOTO = ("mow_goto", 57)
295    MOW_SUSPEND = ("mow_suspend", 58)
296    MOW_RECOVERABLE_FAULT = ("mow_recoverable_fault", 59)
297    MOW_FAULT = ("mow_fault", 60)
298    MOW_DOCK_RAINFALL = ("mow_dock_rainfall", 61)
299    MOW_DOCK_NOTDISTURB = ("mow_dock_notdisturb", 62)
300    MOW_DOCK_LOW_BATTERY = ("mow_dock_low_battery", 63)
301    MOW_WAIT = ("mow_wait", 64)
302    MOW_PREPARE_REMOTE = ("mow_prepare_remote", 65)
303    MOW_REMOTE = ("mow_remote", 66)
304    MOW_EMERGENCY_STOP = ("mow_emergency_stop", 67)
305    MOW_DOCK_MANUAL = ("mow_dock_manual", 68)
306    MOW_DOCK_FAULT = ("mow_dock_fault", 69)
307    MOW_REMOTE_UNDOCKING = ("mow_remote_undocking", 70)
308    MOW_TO_DOCK_INITIALIZING = ("mow_to_dock_initializing", 71)
309    MOW_TO_DOCK_LOCATING = ("mow_to_dock_locating", 72)
310    MOW_TO_DOCK_RECOVERABLE_FAULT = ("mow_to_dock_recoverable_fault", 73)
311    MOW_TO_DOCK_FAULT = ("mow_to_dock_fault", 74)
312    MOW_TO_DOCK_EMERGENCY_STOP = ("mow_to_dock_emergency_stop", 75)
313    MOW_TO_DOCK_CHARGING = ("mow_to_dock_charging", 76)
314    MOW_TO_DOCK_CHARGE_COMPLETED = ("mow_to_dock_charge_completed", 77)
315    MOW_PAUSE = ("mow_pause", 78)
316
317    FREE = ("free", 101)
318    FREE_INITIALIZING = ("free_initializing", 102)
319    FREE_LOCATING = ("free_locating", 103)
320    FREE_DOCK_MANUAL = ("free_dock_manual", 104)
321    FREE_DOCK_MOW_END = ("free_dock_mow_end", 105)
322    FREE_DOCK_PLAN_END = ("free_dock_plan_end", 106)
323    FREE_EMERGENCY_STOP = ("free_emergency_stop", 107)
324    FREE_RECOVERABLE_FAULT = ("free_recoverable_fault", 108)
325    FREE_FAULT = ("free_fault", 109)
326    FREE_BATTERY_HOLD_MODE = ("free_battery_hold_mode", 110)
327
328    CHARGING = ("charging", 151)
329    CHARGE_COMPLETED = ("charge_completed", 152)
330    CHARGE_WAITING = ("charge_waiting", 153)
331    CHARGE_FAULT = ("charge_fault", 154)

Detailed task state reported on DPS 123 and in GET_ROBOT_INFO replies.

UNKNOWN = <MowerDetailState.UNKNOWN: 'unknown'>
MAP_INITIALIZING = <MowerDetailState.MAP_INITIALIZING: 'map_initializing'>
MAP_UNDOCKING = <MowerDetailState.MAP_UNDOCKING: 'map_undocking'>
MAP_UNDOCK_FAULT = <MowerDetailState.MAP_UNDOCK_FAULT: 'map_undock_fault'>
MAP_LOCATING = <MowerDetailState.MAP_LOCATING: 'map_locating'>
MAP_PREPARE_BOUNDARY = <MowerDetailState.MAP_PREPARE_BOUNDARY: 'map_prepare_boundary'>
MAP_PREPARE_ISLAND = <MowerDetailState.MAP_PREPARE_ISLAND: 'map_prepare_island'>
MAP_PREPARE_PATH = <MowerDetailState.MAP_PREPARE_PATH: 'map_prepare_path'>
MAP_BOUNDARY = <MowerDetailState.MAP_BOUNDARY: 'map_boundary'>
MAP_ISLAND = <MowerDetailState.MAP_ISLAND: 'map_island'>
MAP_PATH = <MowerDetailState.MAP_PATH: 'map_path'>
MAP_BOUNDARY_AUTO = <MowerDetailState.MAP_BOUNDARY_AUTO: 'map_boundary_auto'>
MAP_ERASING = <MowerDetailState.MAP_ERASING: 'map_eraseing'>
MAP_SAVE = <MowerDetailState.MAP_SAVE: 'map_save'>
MAP_WAIT = <MowerDetailState.MAP_WAIT: 'map_wait'>
MAP_RECOVERABLE_FAULT = <MowerDetailState.MAP_RECOVERABLE_FAULT: 'map_recoverable_fault'>
MAP_FAULT = <MowerDetailState.MAP_FAULT: 'map_fault'>
MAP_EMERGENCY_STOP = <MowerDetailState.MAP_EMERGENCY_STOP: 'map_emergency_stop'>
MAP_WAITING_FAULT = <MowerDetailState.MAP_WAITING_FAULT: 'map_waiting_fault'>
MAP_NO_AVOID = <MowerDetailState.MAP_NO_AVOID: 'map_no_avoid'>
MAP_PREPARE_NO_AVOID = <MowerDetailState.MAP_PREPARE_NO_AVOID: 'map_prepare_no_avoid'>
MAP_RESET_PASSAGE = <MowerDetailState.MAP_RESET_PASSAGE: 'map_reset_passage'>
MAP_PREPARE_RESET_PASSAGE = <MowerDetailState.MAP_PREPARE_RESET_PASSAGE: 'map_prepare_reset_passage'>
MAP_EDIT_BOUNDARY = <MowerDetailState.MAP_EDIT_BOUNDARY: 'map_edit_boundary'>
MAP_PREPARE_EDIT_BOUNDARY = <MowerDetailState.MAP_PREPARE_EDIT_BOUNDARY: 'map_prepare_edit_boundary'>
MAP_CONFIRM_EDIT_BOUNDARY = <MowerDetailState.MAP_CONFIRM_EDIT_BOUNDARY: 'map_confirm_edit_boundary'>
MOW_INITIALIZING = <MowerDetailState.MOW_INITIALIZING: 'mow_initializing'>
MOW_UNDOCKING = <MowerDetailState.MOW_UNDOCKING: 'mow_undocking'>
MOW_LOCATING = <MowerDetailState.MOW_LOCATING: 'mow_locating'>
MOW_ADJUST_CUTTER = <MowerDetailState.MOW_ADJUST_CUTTER: 'mow_adjust_cutter'>
MOW_ZIG_ZAG = <MowerDetailState.MOW_ZIG_ZAG: 'mow_zig_zag'>
MOW_EDGE = <MowerDetailState.MOW_EDGE: 'mow_edge'>
MOW_GOTO = <MowerDetailState.MOW_GOTO: 'mow_goto'>
MOW_SUSPEND = <MowerDetailState.MOW_SUSPEND: 'mow_suspend'>
MOW_RECOVERABLE_FAULT = <MowerDetailState.MOW_RECOVERABLE_FAULT: 'mow_recoverable_fault'>
MOW_FAULT = <MowerDetailState.MOW_FAULT: 'mow_fault'>
MOW_DOCK_RAINFALL = <MowerDetailState.MOW_DOCK_RAINFALL: 'mow_dock_rainfall'>
MOW_DOCK_NOTDISTURB = <MowerDetailState.MOW_DOCK_NOTDISTURB: 'mow_dock_notdisturb'>
MOW_DOCK_LOW_BATTERY = <MowerDetailState.MOW_DOCK_LOW_BATTERY: 'mow_dock_low_battery'>
MOW_WAIT = <MowerDetailState.MOW_WAIT: 'mow_wait'>
MOW_PREPARE_REMOTE = <MowerDetailState.MOW_PREPARE_REMOTE: 'mow_prepare_remote'>
MOW_REMOTE = <MowerDetailState.MOW_REMOTE: 'mow_remote'>
MOW_EMERGENCY_STOP = <MowerDetailState.MOW_EMERGENCY_STOP: 'mow_emergency_stop'>
MOW_DOCK_MANUAL = <MowerDetailState.MOW_DOCK_MANUAL: 'mow_dock_manual'>
MOW_DOCK_FAULT = <MowerDetailState.MOW_DOCK_FAULT: 'mow_dock_fault'>
MOW_REMOTE_UNDOCKING = <MowerDetailState.MOW_REMOTE_UNDOCKING: 'mow_remote_undocking'>
MOW_TO_DOCK_INITIALIZING = <MowerDetailState.MOW_TO_DOCK_INITIALIZING: 'mow_to_dock_initializing'>
MOW_TO_DOCK_LOCATING = <MowerDetailState.MOW_TO_DOCK_LOCATING: 'mow_to_dock_locating'>
MOW_TO_DOCK_RECOVERABLE_FAULT = <MowerDetailState.MOW_TO_DOCK_RECOVERABLE_FAULT: 'mow_to_dock_recoverable_fault'>
MOW_TO_DOCK_FAULT = <MowerDetailState.MOW_TO_DOCK_FAULT: 'mow_to_dock_fault'>
MOW_TO_DOCK_EMERGENCY_STOP = <MowerDetailState.MOW_TO_DOCK_EMERGENCY_STOP: 'mow_to_dock_emergency_stop'>
MOW_TO_DOCK_CHARGING = <MowerDetailState.MOW_TO_DOCK_CHARGING: 'mow_to_dock_charging'>
MOW_TO_DOCK_CHARGE_COMPLETED = <MowerDetailState.MOW_TO_DOCK_CHARGE_COMPLETED: 'mow_to_dock_charge_completed'>
MOW_PAUSE = <MowerDetailState.MOW_PAUSE: 'mow_pause'>
FREE = <MowerDetailState.FREE: 'free'>
FREE_INITIALIZING = <MowerDetailState.FREE_INITIALIZING: 'free_initializing'>
FREE_LOCATING = <MowerDetailState.FREE_LOCATING: 'free_locating'>
FREE_DOCK_MANUAL = <MowerDetailState.FREE_DOCK_MANUAL: 'free_dock_manual'>
FREE_DOCK_MOW_END = <MowerDetailState.FREE_DOCK_MOW_END: 'free_dock_mow_end'>
FREE_DOCK_PLAN_END = <MowerDetailState.FREE_DOCK_PLAN_END: 'free_dock_plan_end'>
FREE_EMERGENCY_STOP = <MowerDetailState.FREE_EMERGENCY_STOP: 'free_emergency_stop'>
FREE_RECOVERABLE_FAULT = <MowerDetailState.FREE_RECOVERABLE_FAULT: 'free_recoverable_fault'>
FREE_FAULT = <MowerDetailState.FREE_FAULT: 'free_fault'>
FREE_BATTERY_HOLD_MODE = <MowerDetailState.FREE_BATTERY_HOLD_MODE: 'free_battery_hold_mode'>
CHARGING = <MowerDetailState.CHARGING: 'charging'>
CHARGE_COMPLETED = <MowerDetailState.CHARGE_COMPLETED: 'charge_completed'>
CHARGE_WAITING = <MowerDetailState.CHARGE_WAITING: 'charge_waiting'>
CHARGE_FAULT = <MowerDetailState.CHARGE_FAULT: 'charge_fault'>
class MowerDockState(MowerEnum):
123class MowerDockState(MowerEnum):
124    """Return-to-dock state reported by DPS 128."""
125
126    UNKNOWN = ("unknown", -1)
127    IDLE = ("idle", 0)
128    MOVING_TO_TARGET = ("moving_to_target", 1)
129    DOCKING = ("docking", 2)
130    SUSPENDED = ("suspended", 3)

Return-to-dock state reported by DPS 128.

UNKNOWN = <MowerDockState.UNKNOWN: 'unknown'>
IDLE = <MowerDockState.IDLE: 'idle'>
MOVING_TO_TARGET = <MowerDockState.MOVING_TO_TARGET: 'moving_to_target'>
DOCKING = <MowerDockState.DOCKING: 'docking'>
SUSPENDED = <MowerDockState.SUSPENDED: 'suspended'>
class MowerEffMode(MowerEnum):
177class MowerEffMode(MowerEnum):
178    """Reported efficiency mode on DPS 133."""
179
180    UNKNOWN = ("unknown", 0)
181    DAILY = ("daily", 1)
182    PRECISE = ("precise", 2)
183    FAST = ("fast", 3)

Reported efficiency mode on DPS 133.

UNKNOWN = <MowerEffMode.UNKNOWN: 'unknown'>
DAILY = <MowerEffMode.DAILY: 'daily'>
PRECISE = <MowerEffMode.PRECISE: 'precise'>
FAST = <MowerEffMode.FAST: 'fast'>
class MowerEnum(roborock.data.code_mappings.RoborockModeEnum):
37class MowerEnum(RoborockModeEnum):
38    """Base for mower enums."""
39
40    @classmethod
41    def from_code(cls, code: int | str) -> Self:
42        """Resolve a wire value by name, string value, or integer code."""
43        if (member := cls.from_any_optional(code)) is not None:
44            return member
45        _LOGGER.debug("Unknown %s code %r; defaulting to UNKNOWN", cls.__name__, code)
46        return cast(Self, cls.UNKNOWN)  # type: ignore[attr-defined]

Base for mower enums.

@classmethod
def from_code(cls, code: int | str) -> Self:
40    @classmethod
41    def from_code(cls, code: int | str) -> Self:
42        """Resolve a wire value by name, string value, or integer code."""
43        if (member := cls.from_any_optional(code)) is not None:
44            return member
45        _LOGGER.debug("Unknown %s code %r; defaulting to UNKNOWN", cls.__name__, code)
46        return cast(Self, cls.UNKNOWN)  # type: ignore[attr-defined]

Resolve a wire value by name, string value, or integer code.

class MowerErrorCode(MowerEnum):
334class MowerErrorCode(MowerEnum):
335    """User-facing error code reported by DPS 120."""
336
337    UNKNOWN = ("unknown", 0)
338    MAIN_CUTTER_OVER_CURRENT = ("main_cutter_over_current", 1)
339    MAIN_CUTTER_OVER_TEMPERATURE = ("main_cutter_over_temperature", 2)
340    MAIN_CUTTER_DYNAMIC_UNBALANCE = ("main_cutter_dynamic_unbalance", 3)
341    EDGE_CUTTER_OVER_CURRENT = ("edge_cutter_over_current", 4)
342    EDGE_CUTTER_OVER_TEMPERATURE = ("edge_cutter_over_temperature", 5)
343    EDGE_CUTTER_DYNAMIC_UNBALANCE = ("edge_cutter_dynamic_unbalance", 6)
344    HEIGHT_MODULE_ADJUSTING_INCOMPLETE = ("height_module_adjusting_incomplete", 7)
345    TRAVEL_MOTOR_LEFT_FRONT_OVER_CURRENT = ("travel_motor_left_front_over_current", 8)
346    TRAVEL_MOTOR_RIGHT_FRONT_OVER_CURRENT = ("travel_motor_right_front_over_current", 9)
347    TRAVEL_MOTOR_LEFT_REAR_OVER_CURRENT = ("travel_motor_left_rear_over_current", 10)
348    TRAVEL_MOTOR_RIGHT_REAR_OVER_CURRENT = ("travel_motor_right_rear_over_current", 11)
349    TRAVEL_MOTOR_OVER_TEMPERATURE = ("travel_motor_over_temperature", 12)
350    STEERING_MOTOR_LEFT_FRONT_OVER_CURRENT = ("steering_motor_left_front_over_current", 13)
351    STEERING_MOTOR_RIGHT_FRONT_OVER_CURRENT = ("steering_motor_right_front_over_current", 14)
352    STEERING_MOTOR_OVER_TEMPERATURE = ("steering_motor_over_temperature", 15)
353    STOP = ("stop", 16)
354    TILT = ("tilt", 17)
355    LIFT = ("lift", 18)
356    FLIP = ("flip", 19)
357    OUT_OF_BOUND = ("out_of_bound", 20)
358    BUMPER = ("bumper", 21)
359    BATTERY_DISCHARGE_OVER_TEMPERATURE = ("battery_discharge_over_temperature", 22)
360    BATTERY_DISCHARGE_LOW_TEMPERATURE = ("battery_discharge_low_temperature", 23)
361    BATTERY_UNOFFICIAL = ("battery_unofficial", 24)
362    DIRTY_CHARGING_CLIPS = ("dirty_charging_clips", 25)
363    CHARGE_STATION_NO_POWER = ("charge_station_no_power", 26)
364    CAMERA_DIRTY_OR_OBSTRUCTED = ("camera_dirty_or_obstructed", 27)
365    CAMERA_OVER_TEMPERATURE = ("camera_over_temperature", 28)
366    CAMERA_LED_OBSTRUCTED = ("camera_led_obstructed", 29)
367    LIDAR_DIRTY = ("lidar_dirty", 30)
368    LIDAR_OVER_TEMPERATURE = ("lidar_over_temperature", 31)
369    LOCATION_FAILED = ("location_failed", 32)
370    LOCATION_AT_ISLAND = ("location_at_island", 33)
371    LOCATION_AT_NON_COMPLIANT_SLOPE = ("location_at_non_compliant_slope", 34)
372    BE_TRAPPED = ("be_trapped", 35)
373    CHARGE_STATION_OR_RTK_SLIGHT_MOVEMENT_DOCK = ("charge_station_or_rtk_slight_movement_dock", 36)
374    N_RTK_SIGNIFICANT_MOVEMENT = ("n_rtk_significant_movement", 37)
375    RTK_SIGNIFICANT_MOVEMENT = ("rtk_significant_movement", 38)
376    DOCK_CHARGE_STATION_SEARCH_FAIL = ("dock_charge_station_search_fail", 39)
377    DOCK_QRCODE_SCAN_FAIL = ("dock_qrcode_scan_fail", 40)
378    DOCK_ADJUST_ERROR = ("dock_adjust_error", 41)
379    UNDOCK_ERROR = ("undock_error", 42)
380    BATTERY_CHARGE_OVER_TEMPERATURE = ("battery_charge_over_temperature", 43)
381    BATTERY_CHARGE_LOW_TEMPERATURE = ("battery_charge_low_temperature", 44)
382    CAMERA_SEVERELY_DIRTY = ("camera_severely_dirty", 45)
383    NO_PLUGIN_KEY = ("no_plugin_key", 46)
384    CAMERA_REAR_SIDE_DIRTY = ("camera_rear_side_dirty", 48)
385    N_RTK_NETWORK_ERROR = ("n_rtk_network_error", 55)
386    MAIN_CUTTER_FAULT = ("main_cutter_fault", 101)
387    EDGE_CUTTER_FAULT = ("edge_cutter_fault", 102)
388    HEIGHT_MODULE_FAULT = ("height_module_fault", 103)
389    BATTERY_FAULT = ("battery_fault", 104)
390    CAMERA_FAULT = ("camera_fault", 105)
391    CAMERA_LED_FAULT = ("camera_led_fault", 106)
392    MAIN_BOARD_FAULT = ("main_board_fault", 107)
393    LIDAR_FAULT = ("lidar_fault", 108)
394    TRAVEL_MOTOR_LEFT_FRONT_FAULT = ("travel_motor_left_front_fault", 109)
395    TRAVEL_MOTOR_RIGHT_FRONT_FAULT = ("travel_motor_right_front_fault", 110)
396    TRAVEL_MOTOR_LEFT_REAR_FAULT = ("travel_motor_left_rear_fault", 111)
397    TRAVEL_MOTOR_RIGHT_REAR_FAULT = ("travel_motor_right_rear_fault", 112)
398    STEERING_MOTOR_LEFT_FRONT_FAULT = ("steering_motor_left_front_fault", 113)
399    STEERING_MOTOR_RIGHT_FRONT_FAULT = ("steering_motor_right_front_fault", 114)
400    LED_SCREEN_FAULT = ("led_screen_fault", 115)
401    LEFT_SIDE_CAMERA_FAULT = ("left_side_camera_fault", 116)
402    RIGHT_SIDE_CAMERA_FAULT = ("right_side_camera_fault", 117)
403    REAR_SIDE_CAMERA_FAULT = ("rear_side_camera_fault", 118)

User-facing error code reported by DPS 120.

UNKNOWN = <MowerErrorCode.UNKNOWN: 'unknown'>
MAIN_CUTTER_OVER_CURRENT = <MowerErrorCode.MAIN_CUTTER_OVER_CURRENT: 'main_cutter_over_current'>
MAIN_CUTTER_OVER_TEMPERATURE = <MowerErrorCode.MAIN_CUTTER_OVER_TEMPERATURE: 'main_cutter_over_temperature'>
MAIN_CUTTER_DYNAMIC_UNBALANCE = <MowerErrorCode.MAIN_CUTTER_DYNAMIC_UNBALANCE: 'main_cutter_dynamic_unbalance'>
EDGE_CUTTER_OVER_CURRENT = <MowerErrorCode.EDGE_CUTTER_OVER_CURRENT: 'edge_cutter_over_current'>
EDGE_CUTTER_OVER_TEMPERATURE = <MowerErrorCode.EDGE_CUTTER_OVER_TEMPERATURE: 'edge_cutter_over_temperature'>
EDGE_CUTTER_DYNAMIC_UNBALANCE = <MowerErrorCode.EDGE_CUTTER_DYNAMIC_UNBALANCE: 'edge_cutter_dynamic_unbalance'>
HEIGHT_MODULE_ADJUSTING_INCOMPLETE = <MowerErrorCode.HEIGHT_MODULE_ADJUSTING_INCOMPLETE: 'height_module_adjusting_incomplete'>
TRAVEL_MOTOR_LEFT_FRONT_OVER_CURRENT = <MowerErrorCode.TRAVEL_MOTOR_LEFT_FRONT_OVER_CURRENT: 'travel_motor_left_front_over_current'>
TRAVEL_MOTOR_RIGHT_FRONT_OVER_CURRENT = <MowerErrorCode.TRAVEL_MOTOR_RIGHT_FRONT_OVER_CURRENT: 'travel_motor_right_front_over_current'>
TRAVEL_MOTOR_LEFT_REAR_OVER_CURRENT = <MowerErrorCode.TRAVEL_MOTOR_LEFT_REAR_OVER_CURRENT: 'travel_motor_left_rear_over_current'>
TRAVEL_MOTOR_RIGHT_REAR_OVER_CURRENT = <MowerErrorCode.TRAVEL_MOTOR_RIGHT_REAR_OVER_CURRENT: 'travel_motor_right_rear_over_current'>
TRAVEL_MOTOR_OVER_TEMPERATURE = <MowerErrorCode.TRAVEL_MOTOR_OVER_TEMPERATURE: 'travel_motor_over_temperature'>
STEERING_MOTOR_LEFT_FRONT_OVER_CURRENT = <MowerErrorCode.STEERING_MOTOR_LEFT_FRONT_OVER_CURRENT: 'steering_motor_left_front_over_current'>
STEERING_MOTOR_RIGHT_FRONT_OVER_CURRENT = <MowerErrorCode.STEERING_MOTOR_RIGHT_FRONT_OVER_CURRENT: 'steering_motor_right_front_over_current'>
STEERING_MOTOR_OVER_TEMPERATURE = <MowerErrorCode.STEERING_MOTOR_OVER_TEMPERATURE: 'steering_motor_over_temperature'>
STOP = <MowerErrorCode.STOP: 'stop'>
TILT = <MowerErrorCode.TILT: 'tilt'>
LIFT = <MowerErrorCode.LIFT: 'lift'>
FLIP = <MowerErrorCode.FLIP: 'flip'>
OUT_OF_BOUND = <MowerErrorCode.OUT_OF_BOUND: 'out_of_bound'>
BUMPER = <MowerErrorCode.BUMPER: 'bumper'>
BATTERY_DISCHARGE_OVER_TEMPERATURE = <MowerErrorCode.BATTERY_DISCHARGE_OVER_TEMPERATURE: 'battery_discharge_over_temperature'>
BATTERY_DISCHARGE_LOW_TEMPERATURE = <MowerErrorCode.BATTERY_DISCHARGE_LOW_TEMPERATURE: 'battery_discharge_low_temperature'>
BATTERY_UNOFFICIAL = <MowerErrorCode.BATTERY_UNOFFICIAL: 'battery_unofficial'>
DIRTY_CHARGING_CLIPS = <MowerErrorCode.DIRTY_CHARGING_CLIPS: 'dirty_charging_clips'>
CHARGE_STATION_NO_POWER = <MowerErrorCode.CHARGE_STATION_NO_POWER: 'charge_station_no_power'>
CAMERA_DIRTY_OR_OBSTRUCTED = <MowerErrorCode.CAMERA_DIRTY_OR_OBSTRUCTED: 'camera_dirty_or_obstructed'>
CAMERA_OVER_TEMPERATURE = <MowerErrorCode.CAMERA_OVER_TEMPERATURE: 'camera_over_temperature'>
CAMERA_LED_OBSTRUCTED = <MowerErrorCode.CAMERA_LED_OBSTRUCTED: 'camera_led_obstructed'>
LIDAR_DIRTY = <MowerErrorCode.LIDAR_DIRTY: 'lidar_dirty'>
LIDAR_OVER_TEMPERATURE = <MowerErrorCode.LIDAR_OVER_TEMPERATURE: 'lidar_over_temperature'>
LOCATION_FAILED = <MowerErrorCode.LOCATION_FAILED: 'location_failed'>
LOCATION_AT_ISLAND = <MowerErrorCode.LOCATION_AT_ISLAND: 'location_at_island'>
LOCATION_AT_NON_COMPLIANT_SLOPE = <MowerErrorCode.LOCATION_AT_NON_COMPLIANT_SLOPE: 'location_at_non_compliant_slope'>
BE_TRAPPED = <MowerErrorCode.BE_TRAPPED: 'be_trapped'>
CHARGE_STATION_OR_RTK_SLIGHT_MOVEMENT_DOCK = <MowerErrorCode.CHARGE_STATION_OR_RTK_SLIGHT_MOVEMENT_DOCK: 'charge_station_or_rtk_slight_movement_dock'>
N_RTK_SIGNIFICANT_MOVEMENT = <MowerErrorCode.N_RTK_SIGNIFICANT_MOVEMENT: 'n_rtk_significant_movement'>
RTK_SIGNIFICANT_MOVEMENT = <MowerErrorCode.RTK_SIGNIFICANT_MOVEMENT: 'rtk_significant_movement'>
DOCK_CHARGE_STATION_SEARCH_FAIL = <MowerErrorCode.DOCK_CHARGE_STATION_SEARCH_FAIL: 'dock_charge_station_search_fail'>
DOCK_QRCODE_SCAN_FAIL = <MowerErrorCode.DOCK_QRCODE_SCAN_FAIL: 'dock_qrcode_scan_fail'>
DOCK_ADJUST_ERROR = <MowerErrorCode.DOCK_ADJUST_ERROR: 'dock_adjust_error'>
UNDOCK_ERROR = <MowerErrorCode.UNDOCK_ERROR: 'undock_error'>
BATTERY_CHARGE_OVER_TEMPERATURE = <MowerErrorCode.BATTERY_CHARGE_OVER_TEMPERATURE: 'battery_charge_over_temperature'>
BATTERY_CHARGE_LOW_TEMPERATURE = <MowerErrorCode.BATTERY_CHARGE_LOW_TEMPERATURE: 'battery_charge_low_temperature'>
CAMERA_SEVERELY_DIRTY = <MowerErrorCode.CAMERA_SEVERELY_DIRTY: 'camera_severely_dirty'>
NO_PLUGIN_KEY = <MowerErrorCode.NO_PLUGIN_KEY: 'no_plugin_key'>
CAMERA_REAR_SIDE_DIRTY = <MowerErrorCode.CAMERA_REAR_SIDE_DIRTY: 'camera_rear_side_dirty'>
N_RTK_NETWORK_ERROR = <MowerErrorCode.N_RTK_NETWORK_ERROR: 'n_rtk_network_error'>
MAIN_CUTTER_FAULT = <MowerErrorCode.MAIN_CUTTER_FAULT: 'main_cutter_fault'>
EDGE_CUTTER_FAULT = <MowerErrorCode.EDGE_CUTTER_FAULT: 'edge_cutter_fault'>
HEIGHT_MODULE_FAULT = <MowerErrorCode.HEIGHT_MODULE_FAULT: 'height_module_fault'>
BATTERY_FAULT = <MowerErrorCode.BATTERY_FAULT: 'battery_fault'>
CAMERA_FAULT = <MowerErrorCode.CAMERA_FAULT: 'camera_fault'>
CAMERA_LED_FAULT = <MowerErrorCode.CAMERA_LED_FAULT: 'camera_led_fault'>
MAIN_BOARD_FAULT = <MowerErrorCode.MAIN_BOARD_FAULT: 'main_board_fault'>
LIDAR_FAULT = <MowerErrorCode.LIDAR_FAULT: 'lidar_fault'>
TRAVEL_MOTOR_LEFT_FRONT_FAULT = <MowerErrorCode.TRAVEL_MOTOR_LEFT_FRONT_FAULT: 'travel_motor_left_front_fault'>
TRAVEL_MOTOR_RIGHT_FRONT_FAULT = <MowerErrorCode.TRAVEL_MOTOR_RIGHT_FRONT_FAULT: 'travel_motor_right_front_fault'>
TRAVEL_MOTOR_LEFT_REAR_FAULT = <MowerErrorCode.TRAVEL_MOTOR_LEFT_REAR_FAULT: 'travel_motor_left_rear_fault'>
TRAVEL_MOTOR_RIGHT_REAR_FAULT = <MowerErrorCode.TRAVEL_MOTOR_RIGHT_REAR_FAULT: 'travel_motor_right_rear_fault'>
STEERING_MOTOR_LEFT_FRONT_FAULT = <MowerErrorCode.STEERING_MOTOR_LEFT_FRONT_FAULT: 'steering_motor_left_front_fault'>
STEERING_MOTOR_RIGHT_FRONT_FAULT = <MowerErrorCode.STEERING_MOTOR_RIGHT_FRONT_FAULT: 'steering_motor_right_front_fault'>
LED_SCREEN_FAULT = <MowerErrorCode.LED_SCREEN_FAULT: 'led_screen_fault'>
LEFT_SIDE_CAMERA_FAULT = <MowerErrorCode.LEFT_SIDE_CAMERA_FAULT: 'left_side_camera_fault'>
RIGHT_SIDE_CAMERA_FAULT = <MowerErrorCode.RIGHT_SIDE_CAMERA_FAULT: 'right_side_camera_fault'>
REAR_SIDE_CAMERA_FAULT = <MowerErrorCode.REAR_SIDE_CAMERA_FAULT: 'rear_side_camera_fault'>
class MowerFcState(MowerEnum):
217class MowerFcState(MowerEnum):
218    """Factory or test mode indicator on DPS 141."""
219
220    UNKNOWN = ("unknown", -1)
221    NOT_FC = ("not_fc", 0)
222    FC = ("fc", 1)

Factory or test mode indicator on DPS 141.

UNKNOWN = <MowerFcState.UNKNOWN: 'unknown'>
NOT_FC = <MowerFcState.NOT_FC: 'not_fc'>
FC = <MowerFcState.FC: 'fc'>
class MowerMappingState(MowerEnum):
88class MowerMappingState(MowerEnum):
89    """Mapping activity reported by DPS 125."""
90
91    UNKNOWN = ("unknown", -1)
92    IDLE = ("idle", 0)
93    AUTO_MAPPING = ("auto_mapping", 1)
94    TRACK_ERASE = ("track_erase", 2)
95    SUSPENDED = ("suspended", 3)
96    SAVING_MAP = ("saving_map", 4)
97    REMOTE_WALKING = ("remote_walking", 5)
98    REMOTE_MAPPING = ("remote_mapping", 6)

Mapping activity reported by DPS 125.

UNKNOWN = <MowerMappingState.UNKNOWN: 'unknown'>
IDLE = <MowerMappingState.IDLE: 'idle'>
AUTO_MAPPING = <MowerMappingState.AUTO_MAPPING: 'auto_mapping'>
TRACK_ERASE = <MowerMappingState.TRACK_ERASE: 'track_erase'>
SUSPENDED = <MowerMappingState.SUSPENDED: 'suspended'>
SAVING_MAP = <MowerMappingState.SAVING_MAP: 'saving_map'>
REMOTE_WALKING = <MowerMappingState.REMOTE_WALKING: 'remote_walking'>
REMOTE_MAPPING = <MowerMappingState.REMOTE_MAPPING: 'remote_mapping'>
class MowerMappingType(MowerEnum):
75class MowerMappingType(MowerEnum):
76    """Mapping operation reported by DPS 124."""
77
78    UNKNOWN = ("unknown", -1)
79    NONE = ("none", 0)
80    LAWN_MAPPING = ("lawn_mapping", 1)
81    FORBIDDEN_ZONE_MAPPING = ("forbidden_zone_mapping", 2)
82    CHANNEL_MAPPING = ("channel_mapping", 3)
83    SPLIT_WORKSPACE = ("split_workspace", 4)
84    MERGE_WORKSPACE = ("merge_workspace", 5)
85    BOUNDARY_MODIFY = ("boundary_modify", 6)

Mapping operation reported by DPS 124.

UNKNOWN = <MowerMappingType.UNKNOWN: 'unknown'>
NONE = <MowerMappingType.NONE: 'none'>
LAWN_MAPPING = <MowerMappingType.LAWN_MAPPING: 'lawn_mapping'>
FORBIDDEN_ZONE_MAPPING = <MowerMappingType.FORBIDDEN_ZONE_MAPPING: 'forbidden_zone_mapping'>
CHANNEL_MAPPING = <MowerMappingType.CHANNEL_MAPPING: 'channel_mapping'>
SPLIT_WORKSPACE = <MowerMappingType.SPLIT_WORKSPACE: 'split_workspace'>
MERGE_WORKSPACE = <MowerMappingType.MERGE_WORKSPACE: 'merge_workspace'>
BOUNDARY_MODIFY = <MowerMappingType.BOUNDARY_MODIFY: 'boundary_modify'>
class MowerMowState(MowerEnum):
62class MowerMowState(MowerEnum):
63    """Compact mowing state (MowStateDpValue.Type)."""
64
65    UNKNOWN = ("unknown", -1)
66    IDLE = ("idle", 0)
67    ZIGZAG_MOWING = ("zigzag_mowing", 1)
68    EDGE_MOWING = ("edge_mowing", 2)
69    TRANSITION = ("transition", 3)
70    SUSPENDED = ("suspended", 4)
71    REMOTE_WALKING = ("remote_walking", 5)
72    REMOTE_MOWING = ("remote_mowing", 6)

Compact mowing state (MowStateDpValue.Type).

UNKNOWN = <MowerMowState.UNKNOWN: 'unknown'>
IDLE = <MowerMowState.IDLE: 'idle'>
ZIGZAG_MOWING = <MowerMowState.ZIGZAG_MOWING: 'zigzag_mowing'>
EDGE_MOWING = <MowerMowState.EDGE_MOWING: 'edge_mowing'>
TRANSITION = <MowerMowState.TRANSITION: 'transition'>
SUSPENDED = <MowerMowState.SUSPENDED: 'suspended'>
REMOTE_WALKING = <MowerMowState.REMOTE_WALKING: 'remote_walking'>
REMOTE_MOWING = <MowerMowState.REMOTE_MOWING: 'remote_mowing'>
class MowerMowType(MowerEnum):
49class MowerMowType(MowerEnum):
50    """Mowing task selection reported by DPS 122."""
51
52    UNKNOWN = ("unknown", -1)
53    NONE = ("none", 0)
54    GLOBAL = ("global", 1)
55    EDGE = ("edge", 2)
56    SELECTION = ("selection", 3)
57    ZONING = ("zoning", 4)
58    REMOTE = ("remote", 5)
59    RANDOM = ("random", 6)

Mowing task selection reported by DPS 122.

UNKNOWN = <MowerMowType.UNKNOWN: 'unknown'>
NONE = <MowerMowType.NONE: 'none'>
GLOBAL = <MowerMowType.GLOBAL: 'global'>
EDGE = <MowerMowType.EDGE: 'edge'>
SELECTION = <MowerMowType.SELECTION: 'selection'>
ZONING = <MowerMowType.ZONING: 'zoning'>
REMOTE = <MowerMowType.REMOTE: 'remote'>
RANDOM = <MowerMowType.RANDOM: 'random'>
class MowerNetworkChannel(MowerEnum):
247class MowerNetworkChannel(MowerEnum):
248    """Current network route on DPS 145."""
249
250    UNKNOWN = ("unknown", 0)
251    WLAN0 = ("wlan0", 1)
252    WLAN1 = ("wlan1", 2)
253    MOBILE_4G = ("mobile_4g", 3)

Current network route on DPS 145.

UNKNOWN = <MowerNetworkChannel.UNKNOWN: 'unknown'>
WLAN0 = <MowerNetworkChannel.WLAN0: 'wlan0'>
WLAN1 = <MowerNetworkChannel.WLAN1: 'wlan1'>
MOBILE_4G = <MowerNetworkChannel.MOBILE_4G: 'mobile_4g'>
class MowerOffDockNoTaskStatus(MowerEnum):
225class MowerOffDockNoTaskStatus(MowerEnum):
226    """Mower off-dock status without an active task on DPS 143."""
227
228    UNKNOWN = ("unknown", 0)
229    WAITING = ("waiting", 1)
230    SUSPENDING = ("suspending", 2)
231    DOCKING = ("docking", 3)
232    REMOTING = ("remoting", 4)

Mower off-dock status without an active task on DPS 143.

UNKNOWN = <MowerOffDockNoTaskStatus.UNKNOWN: 'unknown'>
WAITING = <MowerOffDockNoTaskStatus.WAITING: 'waiting'>
SUSPENDING = <MowerOffDockNoTaskStatus.SUSPENDING: 'suspending'>
DOCKING = <MowerOffDockNoTaskStatus.DOCKING: 'docking'>
REMOTING = <MowerOffDockNoTaskStatus.REMOTING: 'remoting'>
class MowerOfflineStatus(MowerEnum):
206class MowerOfflineStatus(MowerEnum):
207    """Shutdown or reboot reason on DPS 138."""
208
209    UNKNOWN = ("unknown", -1)
210    ONLINE = ("online", 0)
211    MANUAL_SHUTDOWN = ("manual_shutdown", 1)
212    SLEEP_SHUTDOWN = ("sleep_shutdown", 2)
213    LOW_BATTERY_SHUTDOWN = ("low_battery_shutdown", 3)
214    UPGRADE_REBOOT = ("upgrade_reboot", 4)

Shutdown or reboot reason on DPS 138.

UNKNOWN = <MowerOfflineStatus.UNKNOWN: 'unknown'>
ONLINE = <MowerOfflineStatus.ONLINE: 'online'>
MANUAL_SHUTDOWN = <MowerOfflineStatus.MANUAL_SHUTDOWN: 'manual_shutdown'>
SLEEP_SHUTDOWN = <MowerOfflineStatus.SLEEP_SHUTDOWN: 'sleep_shutdown'>
LOW_BATTERY_SHUTDOWN = <MowerOfflineStatus.LOW_BATTERY_SHUTDOWN: 'low_battery_shutdown'>
UPGRADE_REBOOT = <MowerOfflineStatus.UPGRADE_REBOOT: 'upgrade_reboot'>
class MowerOtaState(MowerEnum):
101class MowerOtaState(MowerEnum):
102    """Firmware update state reported by DPS 126."""
103
104    UNKNOWN = ("unknown", -1)
105    IDLE = ("idle", 0)
106    DOWNLOADING = ("downloading", 1)
107    INSTALLING = ("installing", 2)
108    REBOOTING = ("rebooting", 3)

Firmware update state reported by DPS 126.

UNKNOWN = <MowerOtaState.UNKNOWN: 'unknown'>
IDLE = <MowerOtaState.IDLE: 'idle'>
DOWNLOADING = <MowerOtaState.DOWNLOADING: 'downloading'>
INSTALLING = <MowerOtaState.INSTALLING: 'installing'>
REBOOTING = <MowerOtaState.REBOOTING: 'rebooting'>
class MowerPattern(MowerEnum):
186class MowerPattern(MowerEnum):
187    """Reported mowing pattern on DPS 136."""
188
189    UNKNOWN = ("unknown", 0)
190    ZIGZAG = ("zigzag", 1)
191    WELL = ("well", 2)
192    DIAMOND = ("diamond", 3)
193    TRIANGLE = ("triangle", 4)
194    AUTO_DEFLECT = ("auto_deflect", 5)
195    RANDOM = ("random", 6)

Reported mowing pattern on DPS 136.

UNKNOWN = <MowerPattern.UNKNOWN: 'unknown'>
ZIGZAG = <MowerPattern.ZIGZAG: 'zigzag'>
WELL = <MowerPattern.WELL: 'well'>
DIAMOND = <MowerPattern.DIAMOND: 'diamond'>
TRIANGLE = <MowerPattern.TRIANGLE: 'triangle'>
AUTO_DEFLECT = <MowerPattern.AUTO_DEFLECT: 'auto_deflect'>
RANDOM = <MowerPattern.RANDOM: 'random'>
class MowerPendType(MowerEnum):
146class MowerPendType(MowerEnum):
147    """Pause or interruption reason reported by DPS 130."""
148
149    UNKNOWN = ("unknown", -1)
150    NOT_SUSPENDED = ("not_suspended", 0)
151    APP_PAUSE = ("app_pause", 1)
152    BUTTON_EMERGENCY_STOP = ("button_emergency_stop", 2)
153    FAULT = ("fault", 3)
154    BREAKPOINT_PAUSE = ("breakpoint_pause", 4)
155    OTHER = ("other", 5)

Pause or interruption reason reported by DPS 130.

UNKNOWN = <MowerPendType.UNKNOWN: 'unknown'>
NOT_SUSPENDED = <MowerPendType.NOT_SUSPENDED: 'not_suspended'>
APP_PAUSE = <MowerPendType.APP_PAUSE: 'app_pause'>
BUTTON_EMERGENCY_STOP = <MowerPendType.BUTTON_EMERGENCY_STOP: 'button_emergency_stop'>
FAULT = <MowerPendType.FAULT: 'fault'>
BREAKPOINT_PAUSE = <MowerPendType.BREAKPOINT_PAUSE: 'breakpoint_pause'>
OTHER = <MowerPendType.OTHER: 'other'>
class MowerRemoteState(MowerEnum):
158class MowerRemoteState(MowerEnum):
159    """Remote control state reported by DPS 131."""
160
161    UNKNOWN = ("unknown", -1)
162    IDLE = ("idle", 0)
163    VIDEO_REMOTE = ("video_remote", 1)
164    REMOTE_WALKING = ("remote_walking", 2)

Remote control state reported by DPS 131.

UNKNOWN = <MowerRemoteState.UNKNOWN: 'unknown'>
IDLE = <MowerRemoteState.IDLE: 'idle'>
VIDEO_REMOTE = <MowerRemoteState.VIDEO_REMOTE: 'video_remote'>
REMOTE_WALKING = <MowerRemoteState.REMOTE_WALKING: 'remote_walking'>
class MowerStartType(MowerEnum):
167class MowerStartType(MowerEnum):
168    """Task start trigger reported by DPS 132."""
169
170    UNKNOWN = ("unknown", -1)
171    DEFAULT = ("default", 0)
172    APP_START = ("app_start", 1)
173    BUTTON_START = ("button_start", 2)
174    SCHEDULE_START = ("schedule_start", 3)

Task start trigger reported by DPS 132.

UNKNOWN = <MowerStartType.UNKNOWN: 'unknown'>
DEFAULT = <MowerStartType.DEFAULT: 'default'>
APP_START = <MowerStartType.APP_START: 'app_start'>
BUTTON_START = <MowerStartType.BUTTON_START: 'button_start'>
SCHEDULE_START = <MowerStartType.SCHEDULE_START: 'schedule_start'>