roborock.data.v1.v1_containers

  1import datetime
  2import logging
  3from dataclasses import dataclass
  4from typing import Any
  5
  6from roborock.const import (
  7    CLEANING_BRUSH_REPLACE_TIME,
  8    DUST_COLLECTION_REPLACE_TIME,
  9    FILTER_REPLACE_TIME,
 10    MAIN_BRUSH_REPLACE_TIME,
 11    MOP_ROLLER_REPLACE_TIME,
 12    NO_MAP,
 13    ROBOROCK_G10S_PRO,
 14    ROBOROCK_P10,
 15    ROBOROCK_Q7_MAX,
 16    ROBOROCK_QREVO_CURV,
 17    ROBOROCK_QREVO_MASTER,
 18    ROBOROCK_QREVO_MAXV,
 19    ROBOROCK_QREVO_PRO,
 20    ROBOROCK_QREVO_S,
 21    ROBOROCK_S4_MAX,
 22    ROBOROCK_S5_MAX,
 23    ROBOROCK_S6,
 24    ROBOROCK_S6_MAXV,
 25    ROBOROCK_S6_PURE,
 26    ROBOROCK_S7,
 27    ROBOROCK_S7_MAXV,
 28    ROBOROCK_S8,
 29    ROBOROCK_S8_MAXV_ULTRA,
 30    ROBOROCK_S8_PRO_ULTRA,
 31    ROBOROCK_SAROS_10,
 32    ROBOROCK_SAROS_10R,
 33    SENSOR_DIRTY_REPLACE_TIME,
 34    SIDE_BRUSH_REPLACE_TIME,
 35    STRAINER_REPLACE_TIME,
 36    ROBOROCK_G20S_Ultra,
 37)
 38from roborock.exceptions import RoborockException
 39
 40from ..containers import RoborockBase, RoborockBaseTimer, _attr_repr
 41from .v1_code_mappings import (
 42    CleanFluidStatus,
 43    ClearWaterBoxStatus,
 44    DirtyWaterBoxStatus,
 45    DustBagStatus,
 46    RoborockCleanType,
 47    RoborockDockDustCollectionModeCode,
 48    RoborockDockErrorCode,
 49    RoborockDockTypeCode,
 50    RoborockDockWashTowelModeCode,
 51    RoborockErrorCode,
 52    RoborockFanPowerCode,
 53    RoborockFanSpeedP10,
 54    RoborockFanSpeedQ7Max,
 55    RoborockFanSpeedQRevoCurv,
 56    RoborockFanSpeedQRevoMaster,
 57    RoborockFanSpeedQRevoMaxV,
 58    RoborockFanSpeedS6Pure,
 59    RoborockFanSpeedS7,
 60    RoborockFanSpeedS7MaxV,
 61    RoborockFanSpeedS8MaxVUltra,
 62    RoborockFanSpeedSaros10,
 63    RoborockFanSpeedSaros10R,
 64    RoborockFinishReason,
 65    RoborockInCleaning,
 66    RoborockMopIntensityCode,
 67    RoborockMopIntensityP10,
 68    RoborockMopIntensityQ7Max,
 69    RoborockMopIntensityQRevoCurv,
 70    RoborockMopIntensityQRevoMaster,
 71    RoborockMopIntensityQRevoMaxV,
 72    RoborockMopIntensityS5Max,
 73    RoborockMopIntensityS6MaxV,
 74    RoborockMopIntensityS7,
 75    RoborockMopIntensityS8MaxVUltra,
 76    RoborockMopIntensitySaros10,
 77    RoborockMopIntensitySaros10R,
 78    RoborockMopModeCode,
 79    RoborockMopModeQRevoCurv,
 80    RoborockMopModeQRevoMaster,
 81    RoborockMopModeQRevoMaxV,
 82    RoborockMopModeS7,
 83    RoborockMopModeS8MaxVUltra,
 84    RoborockMopModeS8ProUltra,
 85    RoborockMopModeSaros10,
 86    RoborockMopModeSaros10R,
 87    RoborockStartType,
 88    RoborockStateCode,
 89)
 90
 91_LOGGER = logging.getLogger(__name__)
 92
 93
 94@dataclass
 95class Status(RoborockBase):
 96    msg_ver: int | None = None
 97    msg_seq: int | None = None
 98    state: RoborockStateCode | None = None
 99    battery: int | None = None
100    clean_time: int | None = None
101    clean_area: int | None = None
102    error_code: RoborockErrorCode | None = None
103    map_present: int | None = None
104    in_cleaning: RoborockInCleaning | None = None
105    in_returning: int | None = None
106    in_fresh_state: int | None = None
107    lab_status: int | None = None
108    water_box_status: int | None = None
109    back_type: int | None = None
110    wash_phase: int | None = None
111    wash_ready: int | None = None
112    fan_power: RoborockFanPowerCode | None = None
113    dnd_enabled: int | None = None
114    map_status: int | None = None
115    is_locating: int | None = None
116    lock_status: int | None = None
117    water_box_mode: RoborockMopIntensityCode | None = None
118    water_box_carriage_status: int | None = None
119    mop_forbidden_enable: int | None = None
120    camera_status: int | None = None
121    is_exploring: int | None = None
122    home_sec_status: int | None = None
123    home_sec_enable_password: int | None = None
124    adbumper_status: list[int] | None = None
125    water_shortage_status: int | None = None
126    dock_type: RoborockDockTypeCode | None = None
127    dust_collection_status: int | None = None
128    auto_dust_collection: int | None = None
129    avoid_count: int | None = None
130    mop_mode: RoborockMopModeCode | None = None
131    debug_mode: int | None = None
132    collision_avoid_status: int | None = None
133    switch_map_mode: int | None = None
134    dock_error_status: RoborockDockErrorCode | None = None
135    charge_status: int | None = None
136    unsave_map_reason: int | None = None
137    unsave_map_flag: int | None = None
138    wash_status: int | None = None
139    distance_off: int | None = None
140    in_warmup: int | None = None
141    dry_status: int | None = None
142    rdt: int | None = None
143    clean_percent: int | None = None
144    rss: int | None = None
145    dss: int | None = None
146    common_status: int | None = None
147    corner_clean_mode: int | None = None
148    last_clean_t: int | None = None
149    replenish_mode: int | None = None
150    repeat: int | None = None
151    kct: int | None = None
152    subdivision_sets: int | None = None
153
154    @property
155    def square_meter_clean_area(self) -> float | None:
156        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None
157
158    @property
159    def error_code_name(self) -> str | None:
160        return self.error_code.name if self.error_code is not None else None
161
162    @property
163    def state_name(self) -> str | None:
164        return self.state.name if self.state is not None else None
165
166    @property
167    def water_box_mode_name(self) -> str | None:
168        return self.water_box_mode.name if self.water_box_mode is not None else None
169
170    @property
171    def fan_power_options(self) -> list[str]:
172        if self.fan_power is None:
173            return []
174        return list(self.fan_power.keys())
175
176    @property
177    def fan_power_name(self) -> str | None:
178        return self.fan_power.name if self.fan_power is not None else None
179
180    @property
181    def mop_mode_name(self) -> str | None:
182        return self.mop_mode.name if self.mop_mode is not None else None
183
184    def get_fan_speed_code(self, fan_speed: str) -> int:
185        if self.fan_power is None:
186            raise RoborockException("Attempted to get fan speed before status has been updated.")
187        return self.fan_power.as_dict().get(fan_speed)
188
189    def get_mop_intensity_code(self, mop_intensity: str) -> int:
190        if self.water_box_mode is None:
191            raise RoborockException("Attempted to get mop_intensity before status has been updated.")
192        return self.water_box_mode.as_dict().get(mop_intensity)
193
194    def get_mop_mode_code(self, mop_mode: str) -> int:
195        if self.mop_mode is None:
196            raise RoborockException("Attempted to get mop_mode before status has been updated.")
197        return self.mop_mode.as_dict().get(mop_mode)
198
199    @property
200    def current_map(self) -> int | None:
201        """Returns the current map ID if the map is present."""
202        if self.map_status is not None:
203            map_flag = self.map_status >> 2
204            if map_flag != NO_MAP:
205                return map_flag
206        return None
207
208    @property
209    def clear_water_box_status(self) -> ClearWaterBoxStatus | None:
210        if self.dss:
211            return ClearWaterBoxStatus((self.dss >> 2) & 3)
212        return None
213
214    @property
215    def dirty_water_box_status(self) -> DirtyWaterBoxStatus | None:
216        if self.dss:
217            return DirtyWaterBoxStatus((self.dss >> 4) & 3)
218        return None
219
220    @property
221    def dust_bag_status(self) -> DustBagStatus | None:
222        if self.dss:
223            return DustBagStatus((self.dss >> 6) & 3)
224        return None
225
226    @property
227    def water_box_filter_status(self) -> int | None:
228        if self.dss:
229            return (self.dss >> 8) & 3
230        return None
231
232    @property
233    def clean_fluid_status(self) -> CleanFluidStatus | None:
234        if self.dss:
235            value = (self.dss >> 10) & 3
236            if value == 0:
237                return None  # Feature not supported by this device
238            return CleanFluidStatus(value)
239        return None
240
241    @property
242    def hatch_door_status(self) -> int | None:
243        if self.dss:
244            return (self.dss >> 12) & 7
245        return None
246
247    @property
248    def dock_cool_fan_status(self) -> int | None:
249        if self.dss:
250            return (self.dss >> 15) & 3
251        return None
252
253    def __repr__(self) -> str:
254        return _attr_repr(self)
255
256
257@dataclass
258class S4MaxStatus(Status):
259    fan_power: RoborockFanSpeedS6Pure | None = None
260    water_box_mode: RoborockMopIntensityS7 | None = None
261    mop_mode: RoborockMopModeS7 | None = None
262
263
264@dataclass
265class S5MaxStatus(Status):
266    fan_power: RoborockFanSpeedS6Pure | None = None
267    water_box_mode: RoborockMopIntensityS5Max | None = None
268
269
270@dataclass
271class Q7MaxStatus(Status):
272    fan_power: RoborockFanSpeedQ7Max | None = None
273    water_box_mode: RoborockMopIntensityQ7Max | None = None
274
275
276@dataclass
277class QRevoMasterStatus(Status):
278    fan_power: RoborockFanSpeedQRevoMaster | None = None
279    water_box_mode: RoborockMopIntensityQRevoMaster | None = None
280    mop_mode: RoborockMopModeQRevoMaster | None = None
281
282
283@dataclass
284class QRevoCurvStatus(Status):
285    fan_power: RoborockFanSpeedQRevoCurv | None = None
286    water_box_mode: RoborockMopIntensityQRevoCurv | None = None
287    mop_mode: RoborockMopModeQRevoCurv | None = None
288
289
290@dataclass
291class QRevoMaxVStatus(Status):
292    fan_power: RoborockFanSpeedQRevoMaxV | None = None
293    water_box_mode: RoborockMopIntensityQRevoMaxV | None = None
294    mop_mode: RoborockMopModeQRevoMaxV | None = None
295
296
297@dataclass
298class S6MaxVStatus(Status):
299    fan_power: RoborockFanSpeedS7MaxV | None = None
300    water_box_mode: RoborockMopIntensityS6MaxV | None = None
301
302
303@dataclass
304class S6PureStatus(Status):
305    fan_power: RoborockFanSpeedS6Pure | None = None
306
307
308@dataclass
309class S7MaxVStatus(Status):
310    fan_power: RoborockFanSpeedS7MaxV | None = None
311    water_box_mode: RoborockMopIntensityS7 | None = None
312    mop_mode: RoborockMopModeS7 | None = None
313
314
315@dataclass
316class S7Status(Status):
317    fan_power: RoborockFanSpeedS7 | None = None
318    water_box_mode: RoborockMopIntensityS7 | None = None
319    mop_mode: RoborockMopModeS7 | None = None
320
321
322@dataclass
323class S8ProUltraStatus(Status):
324    fan_power: RoborockFanSpeedS7MaxV | None = None
325    water_box_mode: RoborockMopIntensityS7 | None = None
326    mop_mode: RoborockMopModeS8ProUltra | None = None
327
328
329@dataclass
330class S8Status(Status):
331    fan_power: RoborockFanSpeedS7MaxV | None = None
332    water_box_mode: RoborockMopIntensityS7 | None = None
333    mop_mode: RoborockMopModeS8ProUltra | None = None
334
335
336@dataclass
337class P10Status(Status):
338    fan_power: RoborockFanSpeedP10 | None = None
339    water_box_mode: RoborockMopIntensityP10 | None = None
340    mop_mode: RoborockMopModeS8ProUltra | None = None
341
342
343@dataclass
344class S8MaxvUltraStatus(Status):
345    fan_power: RoborockFanSpeedS8MaxVUltra | None = None
346    water_box_mode: RoborockMopIntensityS8MaxVUltra | None = None
347    mop_mode: RoborockMopModeS8MaxVUltra | None = None
348
349
350@dataclass
351class Saros10RStatus(Status):
352    fan_power: RoborockFanSpeedSaros10R | None = None
353    water_box_mode: RoborockMopIntensitySaros10R | None = None
354    mop_mode: RoborockMopModeSaros10R | None = None
355
356
357@dataclass
358class Saros10Status(Status):
359    fan_power: RoborockFanSpeedSaros10 | None = None
360    water_box_mode: RoborockMopIntensitySaros10 | None = None
361    mop_mode: RoborockMopModeSaros10 | None = None
362
363
364ModelStatus: dict[str, type[Status]] = {
365    ROBOROCK_S4_MAX: S4MaxStatus,
366    ROBOROCK_S5_MAX: S5MaxStatus,
367    ROBOROCK_Q7_MAX: Q7MaxStatus,
368    ROBOROCK_QREVO_MASTER: QRevoMasterStatus,
369    ROBOROCK_QREVO_CURV: QRevoCurvStatus,
370    ROBOROCK_S6: S6PureStatus,
371    ROBOROCK_S6_MAXV: S6MaxVStatus,
372    ROBOROCK_S6_PURE: S6PureStatus,
373    ROBOROCK_S7_MAXV: S7MaxVStatus,
374    ROBOROCK_S7: S7Status,
375    ROBOROCK_S8: S8Status,
376    ROBOROCK_S8_PRO_ULTRA: S8ProUltraStatus,
377    ROBOROCK_G10S_PRO: S7MaxVStatus,
378    ROBOROCK_G20S_Ultra: QRevoMasterStatus,
379    ROBOROCK_P10: P10Status,
380    # These likely are not correct,
381    # but i am currently unable to do my typical reverse engineering/ get any data from users on this,
382    # so this will be here in the mean time.
383    ROBOROCK_QREVO_S: P10Status,
384    ROBOROCK_QREVO_MAXV: QRevoMaxVStatus,
385    ROBOROCK_QREVO_PRO: P10Status,
386    ROBOROCK_S8_MAXV_ULTRA: S8MaxvUltraStatus,
387    ROBOROCK_SAROS_10R: Saros10RStatus,
388    ROBOROCK_SAROS_10: Saros10Status,
389}
390
391
392@dataclass
393class DnDTimer(RoborockBaseTimer):
394    """DnDTimer"""
395
396
397@dataclass
398class ValleyElectricityTimer(RoborockBaseTimer):
399    """ValleyElectricityTimer"""
400
401
402@dataclass
403class CleanSummary(RoborockBase):
404    clean_time: int | None = None
405    clean_area: int | None = None
406    clean_count: int | None = None
407    dust_collection_count: int | None = None
408    records: list[int] | None = None
409    last_clean_t: int | None = None
410
411    @property
412    def square_meter_clean_area(self) -> float | None:
413        """Returns the clean area in square meters."""
414        if isinstance(self.clean_area, list | str):
415            _LOGGER.warning(f"Clean area is a unexpected type! Please give the following in a issue: {self.clean_area}")
416            return None
417        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None
418
419    def __repr__(self) -> str:
420        """Return a string representation of the object including all attributes."""
421        return _attr_repr(self)
422
423
424@dataclass
425class CleanRecord(RoborockBase):
426    begin: int | None = None
427    end: int | None = None
428    duration: int | None = None
429    area: int | None = None
430    error: int | None = None
431    complete: int | None = None
432    start_type: RoborockStartType | None = None
433    clean_type: RoborockCleanType | None = None
434    finish_reason: RoborockFinishReason | None = None
435    dust_collection_status: int | None = None
436    avoid_count: int | None = None
437    wash_count: int | None = None
438    map_flag: int | None = None
439
440    @property
441    def square_meter_area(self) -> float | None:
442        return round(self.area / 1000000, 1) if self.area is not None else None
443
444    @property
445    def begin_datetime(self) -> datetime.datetime | None:
446        return datetime.datetime.fromtimestamp(self.begin).astimezone(datetime.UTC) if self.begin else None
447
448    @property
449    def end_datetime(self) -> datetime.datetime | None:
450        return datetime.datetime.fromtimestamp(self.end).astimezone(datetime.UTC) if self.end else None
451
452    def __repr__(self) -> str:
453        return _attr_repr(self)
454
455
456class CleanSummaryWithDetail(CleanSummary):
457    """CleanSummary with the last CleanRecord included."""
458
459    last_clean_record: CleanRecord | None = None
460
461
462@dataclass
463class Consumable(RoborockBase):
464    main_brush_work_time: int | None = None
465    side_brush_work_time: int | None = None
466    filter_work_time: int | None = None
467    filter_element_work_time: int | None = None
468    sensor_dirty_time: int | None = None
469    strainer_work_times: int | None = None
470    dust_collection_work_times: int | None = None
471    cleaning_brush_work_times: int | None = None
472    moproller_work_time: int | None = None
473
474    @property
475    def main_brush_time_left(self) -> int | None:
476        return MAIN_BRUSH_REPLACE_TIME - self.main_brush_work_time if self.main_brush_work_time is not None else None
477
478    @property
479    def side_brush_time_left(self) -> int | None:
480        return SIDE_BRUSH_REPLACE_TIME - self.side_brush_work_time if self.side_brush_work_time is not None else None
481
482    @property
483    def filter_time_left(self) -> int | None:
484        return FILTER_REPLACE_TIME - self.filter_work_time if self.filter_work_time is not None else None
485
486    @property
487    def sensor_time_left(self) -> int | None:
488        return SENSOR_DIRTY_REPLACE_TIME - self.sensor_dirty_time if self.sensor_dirty_time is not None else None
489
490    @property
491    def strainer_time_left(self) -> int | None:
492        return STRAINER_REPLACE_TIME - self.strainer_work_times if self.strainer_work_times is not None else None
493
494    @property
495    def dust_collection_time_left(self) -> int | None:
496        return (
497            DUST_COLLECTION_REPLACE_TIME - self.dust_collection_work_times
498            if self.dust_collection_work_times is not None
499            else None
500        )
501
502    @property
503    def cleaning_brush_time_left(self) -> int | None:
504        return (
505            CLEANING_BRUSH_REPLACE_TIME - self.cleaning_brush_work_times
506            if self.cleaning_brush_work_times is not None
507            else None
508        )
509
510    @property
511    def mop_roller_time_left(self) -> int | None:
512        return MOP_ROLLER_REPLACE_TIME - self.moproller_work_time if self.moproller_work_time is not None else None
513
514    def __repr__(self) -> str:
515        return _attr_repr(self)
516
517
518@dataclass
519class MultiMapsListMapInfoBakMaps(RoborockBase):
520    mapflag: Any | None = None
521    add_time: Any | None = None
522
523
524@dataclass
525class MultiMapsListMapInfo(RoborockBase):
526    map_flag: int
527    name: str
528    add_time: Any | None = None
529    length: Any | None = None
530    bak_maps: list[MultiMapsListMapInfoBakMaps] | None = None
531
532    @property
533    def mapFlag(self) -> int:
534        """Alias for map_flag, returns the map flag as an integer."""
535        return self.map_flag
536
537
538@dataclass
539class MultiMapsList(RoborockBase):
540    max_multi_map: int | None = None
541    max_bak_map: int | None = None
542    multi_map_count: int | None = None
543    map_info: list[MultiMapsListMapInfo] | None = None
544
545
546@dataclass
547class SmartWashParams(RoborockBase):
548    smart_wash: int | None = None
549    wash_interval: int | None = None
550
551
552@dataclass
553class DustCollectionMode(RoborockBase):
554    mode: RoborockDockDustCollectionModeCode | None = None
555
556
557@dataclass
558class WashTowelMode(RoborockBase):
559    wash_mode: RoborockDockWashTowelModeCode | None = None
560
561
562@dataclass
563class NetworkInfo(RoborockBase):
564    ip: str
565    ssid: str | None = None
566    mac: str | None = None
567    bssid: str | None = None
568    rssi: int | None = None
569
570
571@dataclass
572class AppInitStatusLocalInfo(RoborockBase):
573    location: str
574    bom: str | None = None
575    featureset: int | None = None
576    language: str | None = None
577    logserver: str | None = None
578    wifiplan: str | None = None
579    timezone: str | None = None
580    name: str | None = None
581
582
583@dataclass
584class AppInitStatus(RoborockBase):
585    local_info: AppInitStatusLocalInfo
586    feature_info: list[int]
587    new_feature_info: int
588    new_feature_info_str: str = ""
589    new_feature_info_2: int | None = None
590    carriage_type: int | None = None
591    dsp_version: str | None = None
592
593
594@dataclass
595class ChildLockStatus(RoborockBase):
596    lock_status: int = 0
597
598
599@dataclass
600class FlowLedStatus(RoborockBase):
601    status: int = 0
602
603
604@dataclass
605class LedStatus(RoborockBase):
606    status: int = 0
@dataclass
class Status(roborock.data.containers.RoborockBase):
 95@dataclass
 96class Status(RoborockBase):
 97    msg_ver: int | None = None
 98    msg_seq: int | None = None
 99    state: RoborockStateCode | None = None
100    battery: int | None = None
101    clean_time: int | None = None
102    clean_area: int | None = None
103    error_code: RoborockErrorCode | None = None
104    map_present: int | None = None
105    in_cleaning: RoborockInCleaning | None = None
106    in_returning: int | None = None
107    in_fresh_state: int | None = None
108    lab_status: int | None = None
109    water_box_status: int | None = None
110    back_type: int | None = None
111    wash_phase: int | None = None
112    wash_ready: int | None = None
113    fan_power: RoborockFanPowerCode | None = None
114    dnd_enabled: int | None = None
115    map_status: int | None = None
116    is_locating: int | None = None
117    lock_status: int | None = None
118    water_box_mode: RoborockMopIntensityCode | None = None
119    water_box_carriage_status: int | None = None
120    mop_forbidden_enable: int | None = None
121    camera_status: int | None = None
122    is_exploring: int | None = None
123    home_sec_status: int | None = None
124    home_sec_enable_password: int | None = None
125    adbumper_status: list[int] | None = None
126    water_shortage_status: int | None = None
127    dock_type: RoborockDockTypeCode | None = None
128    dust_collection_status: int | None = None
129    auto_dust_collection: int | None = None
130    avoid_count: int | None = None
131    mop_mode: RoborockMopModeCode | None = None
132    debug_mode: int | None = None
133    collision_avoid_status: int | None = None
134    switch_map_mode: int | None = None
135    dock_error_status: RoborockDockErrorCode | None = None
136    charge_status: int | None = None
137    unsave_map_reason: int | None = None
138    unsave_map_flag: int | None = None
139    wash_status: int | None = None
140    distance_off: int | None = None
141    in_warmup: int | None = None
142    dry_status: int | None = None
143    rdt: int | None = None
144    clean_percent: int | None = None
145    rss: int | None = None
146    dss: int | None = None
147    common_status: int | None = None
148    corner_clean_mode: int | None = None
149    last_clean_t: int | None = None
150    replenish_mode: int | None = None
151    repeat: int | None = None
152    kct: int | None = None
153    subdivision_sets: int | None = None
154
155    @property
156    def square_meter_clean_area(self) -> float | None:
157        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None
158
159    @property
160    def error_code_name(self) -> str | None:
161        return self.error_code.name if self.error_code is not None else None
162
163    @property
164    def state_name(self) -> str | None:
165        return self.state.name if self.state is not None else None
166
167    @property
168    def water_box_mode_name(self) -> str | None:
169        return self.water_box_mode.name if self.water_box_mode is not None else None
170
171    @property
172    def fan_power_options(self) -> list[str]:
173        if self.fan_power is None:
174            return []
175        return list(self.fan_power.keys())
176
177    @property
178    def fan_power_name(self) -> str | None:
179        return self.fan_power.name if self.fan_power is not None else None
180
181    @property
182    def mop_mode_name(self) -> str | None:
183        return self.mop_mode.name if self.mop_mode is not None else None
184
185    def get_fan_speed_code(self, fan_speed: str) -> int:
186        if self.fan_power is None:
187            raise RoborockException("Attempted to get fan speed before status has been updated.")
188        return self.fan_power.as_dict().get(fan_speed)
189
190    def get_mop_intensity_code(self, mop_intensity: str) -> int:
191        if self.water_box_mode is None:
192            raise RoborockException("Attempted to get mop_intensity before status has been updated.")
193        return self.water_box_mode.as_dict().get(mop_intensity)
194
195    def get_mop_mode_code(self, mop_mode: str) -> int:
196        if self.mop_mode is None:
197            raise RoborockException("Attempted to get mop_mode before status has been updated.")
198        return self.mop_mode.as_dict().get(mop_mode)
199
200    @property
201    def current_map(self) -> int | None:
202        """Returns the current map ID if the map is present."""
203        if self.map_status is not None:
204            map_flag = self.map_status >> 2
205            if map_flag != NO_MAP:
206                return map_flag
207        return None
208
209    @property
210    def clear_water_box_status(self) -> ClearWaterBoxStatus | None:
211        if self.dss:
212            return ClearWaterBoxStatus((self.dss >> 2) & 3)
213        return None
214
215    @property
216    def dirty_water_box_status(self) -> DirtyWaterBoxStatus | None:
217        if self.dss:
218            return DirtyWaterBoxStatus((self.dss >> 4) & 3)
219        return None
220
221    @property
222    def dust_bag_status(self) -> DustBagStatus | None:
223        if self.dss:
224            return DustBagStatus((self.dss >> 6) & 3)
225        return None
226
227    @property
228    def water_box_filter_status(self) -> int | None:
229        if self.dss:
230            return (self.dss >> 8) & 3
231        return None
232
233    @property
234    def clean_fluid_status(self) -> CleanFluidStatus | None:
235        if self.dss:
236            value = (self.dss >> 10) & 3
237            if value == 0:
238                return None  # Feature not supported by this device
239            return CleanFluidStatus(value)
240        return None
241
242    @property
243    def hatch_door_status(self) -> int | None:
244        if self.dss:
245            return (self.dss >> 12) & 7
246        return None
247
248    @property
249    def dock_cool_fan_status(self) -> int | None:
250        if self.dss:
251            return (self.dss >> 15) & 3
252        return None
253
254    def __repr__(self) -> str:
255        return _attr_repr(self)
Status( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanPowerCode | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityCode | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeCode | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
msg_ver: int | None = None
msg_seq: int | None = None
battery: int | None = None
clean_time: int | None = None
clean_area: int | None = None
map_present: int | None = None
in_returning: int | None = None
in_fresh_state: int | None = None
lab_status: int | None = None
water_box_status: int | None = None
back_type: int | None = None
wash_phase: int | None = None
wash_ready: int | None = None
dnd_enabled: int | None = None
map_status: int | None = None
is_locating: int | None = None
lock_status: int | None = None
water_box_carriage_status: int | None = None
mop_forbidden_enable: int | None = None
camera_status: int | None = None
is_exploring: int | None = None
home_sec_status: int | None = None
home_sec_enable_password: int | None = None
adbumper_status: list[int] | None = None
water_shortage_status: int | None = None
dust_collection_status: int | None = None
auto_dust_collection: int | None = None
avoid_count: int | None = None
debug_mode: int | None = None
collision_avoid_status: int | None = None
switch_map_mode: int | None = None
charge_status: int | None = None
unsave_map_reason: int | None = None
unsave_map_flag: int | None = None
wash_status: int | None = None
distance_off: int | None = None
in_warmup: int | None = None
dry_status: int | None = None
rdt: int | None = None
clean_percent: int | None = None
rss: int | None = None
dss: int | None = None
common_status: int | None = None
corner_clean_mode: int | None = None
last_clean_t: int | None = None
replenish_mode: int | None = None
repeat: int | None = None
kct: int | None = None
subdivision_sets: int | None = None
square_meter_clean_area: float | None
155    @property
156    def square_meter_clean_area(self) -> float | None:
157        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None
error_code_name: str | None
159    @property
160    def error_code_name(self) -> str | None:
161        return self.error_code.name if self.error_code is not None else None
state_name: str | None
163    @property
164    def state_name(self) -> str | None:
165        return self.state.name if self.state is not None else None
water_box_mode_name: str | None
167    @property
168    def water_box_mode_name(self) -> str | None:
169        return self.water_box_mode.name if self.water_box_mode is not None else None
fan_power_options: list[str]
171    @property
172    def fan_power_options(self) -> list[str]:
173        if self.fan_power is None:
174            return []
175        return list(self.fan_power.keys())
fan_power_name: str | None
177    @property
178    def fan_power_name(self) -> str | None:
179        return self.fan_power.name if self.fan_power is not None else None
mop_mode_name: str | None
181    @property
182    def mop_mode_name(self) -> str | None:
183        return self.mop_mode.name if self.mop_mode is not None else None
def get_fan_speed_code(self, fan_speed: str) -> int:
185    def get_fan_speed_code(self, fan_speed: str) -> int:
186        if self.fan_power is None:
187            raise RoborockException("Attempted to get fan speed before status has been updated.")
188        return self.fan_power.as_dict().get(fan_speed)
def get_mop_intensity_code(self, mop_intensity: str) -> int:
190    def get_mop_intensity_code(self, mop_intensity: str) -> int:
191        if self.water_box_mode is None:
192            raise RoborockException("Attempted to get mop_intensity before status has been updated.")
193        return self.water_box_mode.as_dict().get(mop_intensity)
def get_mop_mode_code(self, mop_mode: str) -> int:
195    def get_mop_mode_code(self, mop_mode: str) -> int:
196        if self.mop_mode is None:
197            raise RoborockException("Attempted to get mop_mode before status has been updated.")
198        return self.mop_mode.as_dict().get(mop_mode)
current_map: int | None
200    @property
201    def current_map(self) -> int | None:
202        """Returns the current map ID if the map is present."""
203        if self.map_status is not None:
204            map_flag = self.map_status >> 2
205            if map_flag != NO_MAP:
206                return map_flag
207        return None

Returns the current map ID if the map is present.

clear_water_box_status: roborock.data.v1.v1_code_mappings.ClearWaterBoxStatus | None
209    @property
210    def clear_water_box_status(self) -> ClearWaterBoxStatus | None:
211        if self.dss:
212            return ClearWaterBoxStatus((self.dss >> 2) & 3)
213        return None
dirty_water_box_status: roborock.data.v1.v1_code_mappings.DirtyWaterBoxStatus | None
215    @property
216    def dirty_water_box_status(self) -> DirtyWaterBoxStatus | None:
217        if self.dss:
218            return DirtyWaterBoxStatus((self.dss >> 4) & 3)
219        return None
dust_bag_status: roborock.data.v1.v1_code_mappings.DustBagStatus | None
221    @property
222    def dust_bag_status(self) -> DustBagStatus | None:
223        if self.dss:
224            return DustBagStatus((self.dss >> 6) & 3)
225        return None
water_box_filter_status: int | None
227    @property
228    def water_box_filter_status(self) -> int | None:
229        if self.dss:
230            return (self.dss >> 8) & 3
231        return None
clean_fluid_status: roborock.data.v1.v1_code_mappings.CleanFluidStatus | None
233    @property
234    def clean_fluid_status(self) -> CleanFluidStatus | None:
235        if self.dss:
236            value = (self.dss >> 10) & 3
237            if value == 0:
238                return None  # Feature not supported by this device
239            return CleanFluidStatus(value)
240        return None
hatch_door_status: int | None
242    @property
243    def hatch_door_status(self) -> int | None:
244        if self.dss:
245            return (self.dss >> 12) & 7
246        return None
dock_cool_fan_status: int | None
248    @property
249    def dock_cool_fan_status(self) -> int | None:
250        if self.dss:
251            return (self.dss >> 15) & 3
252        return None
@dataclass
class S4MaxStatus(Status):
258@dataclass
259class S4MaxStatus(Status):
260    fan_power: RoborockFanSpeedS6Pure | None = None
261    water_box_mode: RoborockMopIntensityS7 | None = None
262    mop_mode: RoborockMopModeS7 | None = None
S4MaxStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS6Pure | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityS7 | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeS7 | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class S5MaxStatus(Status):
265@dataclass
266class S5MaxStatus(Status):
267    fan_power: RoborockFanSpeedS6Pure | None = None
268    water_box_mode: RoborockMopIntensityS5Max | None = None
S5MaxStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS6Pure | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityS5Max | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeCode | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class Q7MaxStatus(Status):
271@dataclass
272class Q7MaxStatus(Status):
273    fan_power: RoborockFanSpeedQ7Max | None = None
274    water_box_mode: RoborockMopIntensityQ7Max | None = None
Q7MaxStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedQ7Max | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityQ7Max | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeCode | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class QRevoMasterStatus(Status):
277@dataclass
278class QRevoMasterStatus(Status):
279    fan_power: RoborockFanSpeedQRevoMaster | None = None
280    water_box_mode: RoborockMopIntensityQRevoMaster | None = None
281    mop_mode: RoborockMopModeQRevoMaster | None = None
QRevoMasterStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedQRevoMaster | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityQRevoMaster | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeQRevoMaster | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class QRevoCurvStatus(Status):
284@dataclass
285class QRevoCurvStatus(Status):
286    fan_power: RoborockFanSpeedQRevoCurv | None = None
287    water_box_mode: RoborockMopIntensityQRevoCurv | None = None
288    mop_mode: RoborockMopModeQRevoCurv | None = None
QRevoCurvStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedQRevoCurv | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityQRevoCurv | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeQRevoCurv | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class QRevoMaxVStatus(Status):
291@dataclass
292class QRevoMaxVStatus(Status):
293    fan_power: RoborockFanSpeedQRevoMaxV | None = None
294    water_box_mode: RoborockMopIntensityQRevoMaxV | None = None
295    mop_mode: RoborockMopModeQRevoMaxV | None = None
QRevoMaxVStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedQRevoMaxV | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityQRevoMaxV | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeQRevoMaxV | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class S6MaxVStatus(Status):
298@dataclass
299class S6MaxVStatus(Status):
300    fan_power: RoborockFanSpeedS7MaxV | None = None
301    water_box_mode: RoborockMopIntensityS6MaxV | None = None
S6MaxVStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS7MaxV | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityS6MaxV | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeCode | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class S6PureStatus(Status):
304@dataclass
305class S6PureStatus(Status):
306    fan_power: RoborockFanSpeedS6Pure | None = None
S6PureStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS6Pure | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityCode | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeCode | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class S7MaxVStatus(Status):
309@dataclass
310class S7MaxVStatus(Status):
311    fan_power: RoborockFanSpeedS7MaxV | None = None
312    water_box_mode: RoborockMopIntensityS7 | None = None
313    mop_mode: RoborockMopModeS7 | None = None
S7MaxVStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS7MaxV | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityS7 | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeS7 | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class S7Status(Status):
316@dataclass
317class S7Status(Status):
318    fan_power: RoborockFanSpeedS7 | None = None
319    water_box_mode: RoborockMopIntensityS7 | None = None
320    mop_mode: RoborockMopModeS7 | None = None
S7Status( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS7 | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityS7 | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeS7 | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class S8ProUltraStatus(Status):
323@dataclass
324class S8ProUltraStatus(Status):
325    fan_power: RoborockFanSpeedS7MaxV | None = None
326    water_box_mode: RoborockMopIntensityS7 | None = None
327    mop_mode: RoborockMopModeS8ProUltra | None = None
S8ProUltraStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS7MaxV | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityS7 | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeS8ProUltra | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class S8Status(Status):
330@dataclass
331class S8Status(Status):
332    fan_power: RoborockFanSpeedS7MaxV | None = None
333    water_box_mode: RoborockMopIntensityS7 | None = None
334    mop_mode: RoborockMopModeS8ProUltra | None = None
S8Status( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS7MaxV | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityS7 | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeS8ProUltra | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class P10Status(Status):
337@dataclass
338class P10Status(Status):
339    fan_power: RoborockFanSpeedP10 | None = None
340    water_box_mode: RoborockMopIntensityP10 | None = None
341    mop_mode: RoborockMopModeS8ProUltra | None = None
P10Status( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedP10 | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityP10 | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeS8ProUltra | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class S8MaxvUltraStatus(Status):
344@dataclass
345class S8MaxvUltraStatus(Status):
346    fan_power: RoborockFanSpeedS8MaxVUltra | None = None
347    water_box_mode: RoborockMopIntensityS8MaxVUltra | None = None
348    mop_mode: RoborockMopModeS8MaxVUltra | None = None
S8MaxvUltraStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedS8MaxVUltra | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensityS8MaxVUltra | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeS8MaxVUltra | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class Saros10RStatus(Status):
351@dataclass
352class Saros10RStatus(Status):
353    fan_power: RoborockFanSpeedSaros10R | None = None
354    water_box_mode: RoborockMopIntensitySaros10R | None = None
355    mop_mode: RoborockMopModeSaros10R | None = None
Saros10RStatus( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedSaros10R | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensitySaros10R | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeSaros10R | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
@dataclass
class Saros10Status(Status):
358@dataclass
359class Saros10Status(Status):
360    fan_power: RoborockFanSpeedSaros10 | None = None
361    water_box_mode: RoborockMopIntensitySaros10 | None = None
362    mop_mode: RoborockMopModeSaros10 | None = None
Saros10Status( msg_ver: int | None = None, msg_seq: int | None = None, state: roborock.data.v1.v1_code_mappings.RoborockStateCode | None = None, battery: int | None = None, clean_time: int | None = None, clean_area: int | None = None, error_code: roborock.data.v1.v1_code_mappings.RoborockErrorCode | None = None, map_present: int | None = None, in_cleaning: roborock.data.v1.v1_code_mappings.RoborockInCleaning | None = None, in_returning: int | None = None, in_fresh_state: int | None = None, lab_status: int | None = None, water_box_status: int | None = None, back_type: int | None = None, wash_phase: int | None = None, wash_ready: int | None = None, fan_power: roborock.data.v1.v1_code_mappings.RoborockFanSpeedSaros10 | None = None, dnd_enabled: int | None = None, map_status: int | None = None, is_locating: int | None = None, lock_status: int | None = None, water_box_mode: roborock.data.v1.v1_code_mappings.RoborockMopIntensitySaros10 | None = None, water_box_carriage_status: int | None = None, mop_forbidden_enable: int | None = None, camera_status: int | None = None, is_exploring: int | None = None, home_sec_status: int | None = None, home_sec_enable_password: int | None = None, adbumper_status: list[int] | None = None, water_shortage_status: int | None = None, dock_type: roborock.data.v1.v1_code_mappings.RoborockDockTypeCode | None = None, dust_collection_status: int | None = None, auto_dust_collection: int | None = None, avoid_count: int | None = None, mop_mode: roborock.data.v1.v1_code_mappings.RoborockMopModeSaros10 | None = None, debug_mode: int | None = None, collision_avoid_status: int | None = None, switch_map_mode: int | None = None, dock_error_status: roborock.data.v1.v1_code_mappings.RoborockDockErrorCode | None = None, charge_status: int | None = None, unsave_map_reason: int | None = None, unsave_map_flag: int | None = None, wash_status: int | None = None, distance_off: int | None = None, in_warmup: int | None = None, dry_status: int | None = None, rdt: int | None = None, clean_percent: int | None = None, rss: int | None = None, dss: int | None = None, common_status: int | None = None, corner_clean_mode: int | None = None, last_clean_t: int | None = None, replenish_mode: int | None = None, repeat: int | None = None, kct: int | None = None, subdivision_sets: int | None = None)
ModelStatus: dict[str, type[Status]] = {'roborock.vacuum.a19': <class 'S4MaxStatus'>, 'roborock.vacuum.s5e': <class 'S5MaxStatus'>, 'roborock.vacuum.a38': <class 'Q7MaxStatus'>, 'roborock.vacuum.a117': <class 'QRevoMasterStatus'>, 'roborock.vacuum.a135': <class 'QRevoCurvStatus'>, 'roborock.vacuum.s6': <class 'S6PureStatus'>, 'roborock.vacuum.a10': <class 'S6MaxVStatus'>, 'roborock.vacuum.a08': <class 'S6PureStatus'>, 'roborock.vacuum.a27': <class 'S7MaxVStatus'>, 'roborock.vacuum.a15': <class 'S7Status'>, 'roborock.vacuum.a51': <class 'S8Status'>, 'roborock.vacuum.a70': <class 'S8ProUltraStatus'>, 'roborock.vacuum.a26': <class 'S7MaxVStatus'>, 'roborock.vacuum.a143': <class 'QRevoMasterStatus'>, 'roborock.vacuum.a75': <class 'P10Status'>, 'roborock.vacuum.a104': <class 'P10Status'>, 'roborock.vacuum.a87': <class 'QRevoMaxVStatus'>, 'roborock.vacuum.a101': <class 'P10Status'>, 'roborock.vacuum.a97': <class 'S8MaxvUltraStatus'>, 'roborock.vacuum.a144': <class 'Saros10RStatus'>, 'roborock.vacuum.a147': <class 'Saros10Status'>}
@dataclass
class DnDTimer(roborock.data.containers.RoborockBaseTimer):
393@dataclass
394class DnDTimer(RoborockBaseTimer):
395    """DnDTimer"""

DnDTimer

DnDTimer( start_hour: int | None = None, start_minute: int | None = None, end_hour: int | None = None, end_minute: int | None = None, enabled: int | None = None)
@dataclass
class ValleyElectricityTimer(roborock.data.containers.RoborockBaseTimer):
398@dataclass
399class ValleyElectricityTimer(RoborockBaseTimer):
400    """ValleyElectricityTimer"""

ValleyElectricityTimer

ValleyElectricityTimer( start_hour: int | None = None, start_minute: int | None = None, end_hour: int | None = None, end_minute: int | None = None, enabled: int | None = None)
@dataclass
class CleanSummary(roborock.data.containers.RoborockBase):
403@dataclass
404class CleanSummary(RoborockBase):
405    clean_time: int | None = None
406    clean_area: int | None = None
407    clean_count: int | None = None
408    dust_collection_count: int | None = None
409    records: list[int] | None = None
410    last_clean_t: int | None = None
411
412    @property
413    def square_meter_clean_area(self) -> float | None:
414        """Returns the clean area in square meters."""
415        if isinstance(self.clean_area, list | str):
416            _LOGGER.warning(f"Clean area is a unexpected type! Please give the following in a issue: {self.clean_area}")
417            return None
418        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None
419
420    def __repr__(self) -> str:
421        """Return a string representation of the object including all attributes."""
422        return _attr_repr(self)
CleanSummary( clean_time: int | None = None, clean_area: int | None = None, clean_count: int | None = None, dust_collection_count: int | None = None, records: list[int] | None = None, last_clean_t: int | None = None)
clean_time: int | None = None
clean_area: int | None = None
clean_count: int | None = None
dust_collection_count: int | None = None
records: list[int] | None = None
last_clean_t: int | None = None
square_meter_clean_area: float | None
412    @property
413    def square_meter_clean_area(self) -> float | None:
414        """Returns the clean area in square meters."""
415        if isinstance(self.clean_area, list | str):
416            _LOGGER.warning(f"Clean area is a unexpected type! Please give the following in a issue: {self.clean_area}")
417            return None
418        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None

Returns the clean area in square meters.

@dataclass
class CleanRecord(roborock.data.containers.RoborockBase):
425@dataclass
426class CleanRecord(RoborockBase):
427    begin: int | None = None
428    end: int | None = None
429    duration: int | None = None
430    area: int | None = None
431    error: int | None = None
432    complete: int | None = None
433    start_type: RoborockStartType | None = None
434    clean_type: RoborockCleanType | None = None
435    finish_reason: RoborockFinishReason | None = None
436    dust_collection_status: int | None = None
437    avoid_count: int | None = None
438    wash_count: int | None = None
439    map_flag: int | None = None
440
441    @property
442    def square_meter_area(self) -> float | None:
443        return round(self.area / 1000000, 1) if self.area is not None else None
444
445    @property
446    def begin_datetime(self) -> datetime.datetime | None:
447        return datetime.datetime.fromtimestamp(self.begin).astimezone(datetime.UTC) if self.begin else None
448
449    @property
450    def end_datetime(self) -> datetime.datetime | None:
451        return datetime.datetime.fromtimestamp(self.end).astimezone(datetime.UTC) if self.end else None
452
453    def __repr__(self) -> str:
454        return _attr_repr(self)
CleanRecord( begin: int | None = None, end: int | None = None, duration: int | None = None, area: int | None = None, error: int | None = None, complete: int | None = None, start_type: roborock.data.v1.v1_code_mappings.RoborockStartType | None = None, clean_type: roborock.data.v1.v1_code_mappings.RoborockCleanType | None = None, finish_reason: roborock.data.v1.v1_code_mappings.RoborockFinishReason | None = None, dust_collection_status: int | None = None, avoid_count: int | None = None, wash_count: int | None = None, map_flag: int | None = None)
begin: int | None = None
end: int | None = None
duration: int | None = None
area: int | None = None
error: int | None = None
complete: int | None = None
dust_collection_status: int | None = None
avoid_count: int | None = None
wash_count: int | None = None
map_flag: int | None = None
square_meter_area: float | None
441    @property
442    def square_meter_area(self) -> float | None:
443        return round(self.area / 1000000, 1) if self.area is not None else None
begin_datetime: datetime.datetime | None
445    @property
446    def begin_datetime(self) -> datetime.datetime | None:
447        return datetime.datetime.fromtimestamp(self.begin).astimezone(datetime.UTC) if self.begin else None
end_datetime: datetime.datetime | None
449    @property
450    def end_datetime(self) -> datetime.datetime | None:
451        return datetime.datetime.fromtimestamp(self.end).astimezone(datetime.UTC) if self.end else None
class CleanSummaryWithDetail(CleanSummary):
457class CleanSummaryWithDetail(CleanSummary):
458    """CleanSummary with the last CleanRecord included."""
459
460    last_clean_record: CleanRecord | None = None

CleanSummary with the last CleanRecord included.

last_clean_record: CleanRecord | None = None
@dataclass
class Consumable(roborock.data.containers.RoborockBase):
463@dataclass
464class Consumable(RoborockBase):
465    main_brush_work_time: int | None = None
466    side_brush_work_time: int | None = None
467    filter_work_time: int | None = None
468    filter_element_work_time: int | None = None
469    sensor_dirty_time: int | None = None
470    strainer_work_times: int | None = None
471    dust_collection_work_times: int | None = None
472    cleaning_brush_work_times: int | None = None
473    moproller_work_time: int | None = None
474
475    @property
476    def main_brush_time_left(self) -> int | None:
477        return MAIN_BRUSH_REPLACE_TIME - self.main_brush_work_time if self.main_brush_work_time is not None else None
478
479    @property
480    def side_brush_time_left(self) -> int | None:
481        return SIDE_BRUSH_REPLACE_TIME - self.side_brush_work_time if self.side_brush_work_time is not None else None
482
483    @property
484    def filter_time_left(self) -> int | None:
485        return FILTER_REPLACE_TIME - self.filter_work_time if self.filter_work_time is not None else None
486
487    @property
488    def sensor_time_left(self) -> int | None:
489        return SENSOR_DIRTY_REPLACE_TIME - self.sensor_dirty_time if self.sensor_dirty_time is not None else None
490
491    @property
492    def strainer_time_left(self) -> int | None:
493        return STRAINER_REPLACE_TIME - self.strainer_work_times if self.strainer_work_times is not None else None
494
495    @property
496    def dust_collection_time_left(self) -> int | None:
497        return (
498            DUST_COLLECTION_REPLACE_TIME - self.dust_collection_work_times
499            if self.dust_collection_work_times is not None
500            else None
501        )
502
503    @property
504    def cleaning_brush_time_left(self) -> int | None:
505        return (
506            CLEANING_BRUSH_REPLACE_TIME - self.cleaning_brush_work_times
507            if self.cleaning_brush_work_times is not None
508            else None
509        )
510
511    @property
512    def mop_roller_time_left(self) -> int | None:
513        return MOP_ROLLER_REPLACE_TIME - self.moproller_work_time if self.moproller_work_time is not None else None
514
515    def __repr__(self) -> str:
516        return _attr_repr(self)
Consumable( main_brush_work_time: int | None = None, side_brush_work_time: int | None = None, filter_work_time: int | None = None, filter_element_work_time: int | None = None, sensor_dirty_time: int | None = None, strainer_work_times: int | None = None, dust_collection_work_times: int | None = None, cleaning_brush_work_times: int | None = None, moproller_work_time: int | None = None)
main_brush_work_time: int | None = None
side_brush_work_time: int | None = None
filter_work_time: int | None = None
filter_element_work_time: int | None = None
sensor_dirty_time: int | None = None
strainer_work_times: int | None = None
dust_collection_work_times: int | None = None
cleaning_brush_work_times: int | None = None
moproller_work_time: int | None = None
main_brush_time_left: int | None
475    @property
476    def main_brush_time_left(self) -> int | None:
477        return MAIN_BRUSH_REPLACE_TIME - self.main_brush_work_time if self.main_brush_work_time is not None else None
side_brush_time_left: int | None
479    @property
480    def side_brush_time_left(self) -> int | None:
481        return SIDE_BRUSH_REPLACE_TIME - self.side_brush_work_time if self.side_brush_work_time is not None else None
filter_time_left: int | None
483    @property
484    def filter_time_left(self) -> int | None:
485        return FILTER_REPLACE_TIME - self.filter_work_time if self.filter_work_time is not None else None
sensor_time_left: int | None
487    @property
488    def sensor_time_left(self) -> int | None:
489        return SENSOR_DIRTY_REPLACE_TIME - self.sensor_dirty_time if self.sensor_dirty_time is not None else None
strainer_time_left: int | None
491    @property
492    def strainer_time_left(self) -> int | None:
493        return STRAINER_REPLACE_TIME - self.strainer_work_times if self.strainer_work_times is not None else None
dust_collection_time_left: int | None
495    @property
496    def dust_collection_time_left(self) -> int | None:
497        return (
498            DUST_COLLECTION_REPLACE_TIME - self.dust_collection_work_times
499            if self.dust_collection_work_times is not None
500            else None
501        )
cleaning_brush_time_left: int | None
503    @property
504    def cleaning_brush_time_left(self) -> int | None:
505        return (
506            CLEANING_BRUSH_REPLACE_TIME - self.cleaning_brush_work_times
507            if self.cleaning_brush_work_times is not None
508            else None
509        )
mop_roller_time_left: int | None
511    @property
512    def mop_roller_time_left(self) -> int | None:
513        return MOP_ROLLER_REPLACE_TIME - self.moproller_work_time if self.moproller_work_time is not None else None
@dataclass
class MultiMapsListMapInfoBakMaps(roborock.data.containers.RoborockBase):
519@dataclass
520class MultiMapsListMapInfoBakMaps(RoborockBase):
521    mapflag: Any | None = None
522    add_time: Any | None = None
MultiMapsListMapInfoBakMaps( mapflag: typing.Any | None = None, add_time: typing.Any | None = None)
mapflag: typing.Any | None = None
add_time: typing.Any | None = None
@dataclass
class MultiMapsListMapInfo(roborock.data.containers.RoborockBase):
525@dataclass
526class MultiMapsListMapInfo(RoborockBase):
527    map_flag: int
528    name: str
529    add_time: Any | None = None
530    length: Any | None = None
531    bak_maps: list[MultiMapsListMapInfoBakMaps] | None = None
532
533    @property
534    def mapFlag(self) -> int:
535        """Alias for map_flag, returns the map flag as an integer."""
536        return self.map_flag
MultiMapsListMapInfo( map_flag: int, name: str, add_time: typing.Any | None = None, length: typing.Any | None = None, bak_maps: list[MultiMapsListMapInfoBakMaps] | None = None)
map_flag: int
name: str
add_time: typing.Any | None = None
length: typing.Any | None = None
bak_maps: list[MultiMapsListMapInfoBakMaps] | None = None
mapFlag: int
533    @property
534    def mapFlag(self) -> int:
535        """Alias for map_flag, returns the map flag as an integer."""
536        return self.map_flag

Alias for map_flag, returns the map flag as an integer.

@dataclass
class MultiMapsList(roborock.data.containers.RoborockBase):
539@dataclass
540class MultiMapsList(RoborockBase):
541    max_multi_map: int | None = None
542    max_bak_map: int | None = None
543    multi_map_count: int | None = None
544    map_info: list[MultiMapsListMapInfo] | None = None
MultiMapsList( max_multi_map: int | None = None, max_bak_map: int | None = None, multi_map_count: int | None = None, map_info: list[MultiMapsListMapInfo] | None = None)
max_multi_map: int | None = None
max_bak_map: int | None = None
multi_map_count: int | None = None
map_info: list[MultiMapsListMapInfo] | None = None
@dataclass
class SmartWashParams(roborock.data.containers.RoborockBase):
547@dataclass
548class SmartWashParams(RoborockBase):
549    smart_wash: int | None = None
550    wash_interval: int | None = None
SmartWashParams(smart_wash: int | None = None, wash_interval: int | None = None)
smart_wash: int | None = None
wash_interval: int | None = None
@dataclass
class DustCollectionMode(roborock.data.containers.RoborockBase):
553@dataclass
554class DustCollectionMode(RoborockBase):
555    mode: RoborockDockDustCollectionModeCode | None = None
@dataclass
class WashTowelMode(roborock.data.containers.RoborockBase):
558@dataclass
559class WashTowelMode(RoborockBase):
560    wash_mode: RoborockDockWashTowelModeCode | None = None
WashTowelMode( wash_mode: roborock.data.v1.v1_code_mappings.RoborockDockWashTowelModeCode | None = None)
@dataclass
class NetworkInfo(roborock.data.containers.RoborockBase):
563@dataclass
564class NetworkInfo(RoborockBase):
565    ip: str
566    ssid: str | None = None
567    mac: str | None = None
568    bssid: str | None = None
569    rssi: int | None = None
NetworkInfo( ip: str, ssid: str | None = None, mac: str | None = None, bssid: str | None = None, rssi: int | None = None)
ip: str
ssid: str | None = None
mac: str | None = None
bssid: str | None = None
rssi: int | None = None
@dataclass
class AppInitStatusLocalInfo(roborock.data.containers.RoborockBase):
572@dataclass
573class AppInitStatusLocalInfo(RoborockBase):
574    location: str
575    bom: str | None = None
576    featureset: int | None = None
577    language: str | None = None
578    logserver: str | None = None
579    wifiplan: str | None = None
580    timezone: str | None = None
581    name: str | None = None
AppInitStatusLocalInfo( location: str, bom: str | None = None, featureset: int | None = None, language: str | None = None, logserver: str | None = None, wifiplan: str | None = None, timezone: str | None = None, name: str | None = None)
location: str
bom: str | None = None
featureset: int | None = None
language: str | None = None
logserver: str | None = None
wifiplan: str | None = None
timezone: str | None = None
name: str | None = None
@dataclass
class AppInitStatus(roborock.data.containers.RoborockBase):
584@dataclass
585class AppInitStatus(RoborockBase):
586    local_info: AppInitStatusLocalInfo
587    feature_info: list[int]
588    new_feature_info: int
589    new_feature_info_str: str = ""
590    new_feature_info_2: int | None = None
591    carriage_type: int | None = None
592    dsp_version: str | None = None
AppInitStatus( local_info: AppInitStatusLocalInfo, feature_info: list[int], new_feature_info: int, new_feature_info_str: str = '', new_feature_info_2: int | None = None, carriage_type: int | None = None, dsp_version: str | None = None)
feature_info: list[int]
new_feature_info: int
new_feature_info_str: str = ''
new_feature_info_2: int | None = None
carriage_type: int | None = None
dsp_version: str | None = None
@dataclass
class ChildLockStatus(roborock.data.containers.RoborockBase):
595@dataclass
596class ChildLockStatus(RoborockBase):
597    lock_status: int = 0
ChildLockStatus(lock_status: int = 0)
lock_status: int = 0
@dataclass
class FlowLedStatus(roborock.data.containers.RoborockBase):
600@dataclass
601class FlowLedStatus(RoborockBase):
602    status: int = 0
FlowLedStatus(status: int = 0)
status: int = 0
@dataclass
class LedStatus(roborock.data.containers.RoborockBase):
605@dataclass
606class LedStatus(RoborockBase):
607    status: int = 0
LedStatus(status: int = 0)
status: int = 0