roborock.data.v1.v1_containers

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

A base enum class that represents a field name in a RoborockBase dataclass.

class StatusField(FieldNameBase):
100class StatusField(FieldNameBase):
101    """An enum that represents a field in the `Status` class.
102
103    This is used with `roborock.devices.traits.v1.status.DeviceFeaturesTrait`
104    to understand if a feature is supported by the device using `is_field_supported`.
105
106    The enum values are names of fields in the `Status` class. Each field is
107    annotated with `requires_schema_code` metadata to map the field to a schema
108    code in the product schema, which may have a different name than the field/attribute name.
109    """
110
111    STATE = "state"
112    BATTERY = "battery"
113    FAN_POWER = "fan_power"
114    WATER_BOX_MODE = "water_box_mode"
115    CHARGE_STATUS = "charge_status"
116    DRY_STATUS = "dry_status"

An enum that represents a field in the Status class.

This is used with roborock.devices.traits.v1.status.DeviceFeaturesTrait to understand if a feature is supported by the device using is_field_supported.

The enum values are names of fields in the Status class. Each field is annotated with requires_schema_code metadata to map the field to a schema code in the product schema, which may have a different name than the field/attribute name.

STATE = <StatusField.STATE: 'state'>
BATTERY = <StatusField.BATTERY: 'battery'>
FAN_POWER = <StatusField.FAN_POWER: 'fan_power'>
WATER_BOX_MODE = <StatusField.WATER_BOX_MODE: 'water_box_mode'>
CHARGE_STATUS = <StatusField.CHARGE_STATUS: 'charge_status'>
DRY_STATUS = <StatusField.DRY_STATUS: 'dry_status'>
@dataclass
class Status(roborock.data.containers.RoborockBase):
123@dataclass
124class Status(RoborockBase):
125    msg_ver: int | None = None
126    msg_seq: int | None = None
127    state: RoborockStateCode | None = _requires_schema_code("state", default=None)
128    battery: int | None = _requires_schema_code("battery", default=None)
129    clean_time: int | None = None
130    clean_area: int | None = None
131    error_code: RoborockErrorCode | None = None
132    map_present: int | None = None
133    in_cleaning: RoborockInCleaning | None = None
134    in_returning: int | None = None
135    in_fresh_state: int | None = None
136    lab_status: int | None = None
137    water_box_status: int | None = None
138    back_type: int | None = None
139    wash_phase: int | None = None
140    wash_ready: int | None = None
141    fan_power: RoborockFanPowerCode | None = _requires_schema_code("fan_power", default=None)
142    dnd_enabled: int | None = None
143    map_status: int | None = None
144    is_locating: int | None = None
145    lock_status: int | None = None
146    water_box_mode: RoborockMopIntensityCode | None = _requires_schema_code("water_box_mode", default=None)
147    water_box_carriage_status: int | None = None
148    mop_forbidden_enable: int | None = None
149    camera_status: int | None = None
150    is_exploring: int | None = None
151    home_sec_status: int | None = None
152    home_sec_enable_password: int | None = None
153    adbumper_status: list[int] | None = None
154    water_shortage_status: int | None = None
155    dock_type: RoborockDockTypeCode | None = None
156    dust_collection_status: int | None = None
157    auto_dust_collection: int | None = None
158    avoid_count: int | None = None
159    mop_mode: RoborockMopModeCode | None = None
160    debug_mode: int | None = None
161    collision_avoid_status: int | None = None
162    switch_map_mode: int | None = None
163    dock_error_status: RoborockDockErrorCode | None = None
164    charge_status: int | None = _requires_schema_code("charge_status", default=None)
165    unsave_map_reason: int | None = None
166    unsave_map_flag: int | None = None
167    wash_status: int | None = None
168    distance_off: int | None = None
169    in_warmup: int | None = None
170    dry_status: int | None = _requires_schema_code("drying_status", default=None)
171    rdt: int | None = None
172    clean_percent: int | None = None
173    rss: int | None = None
174    dss: int | None = None
175    common_status: int | None = None
176    corner_clean_mode: int | None = None
177    last_clean_t: int | None = None
178    replenish_mode: int | None = None
179    repeat: int | None = None
180    kct: int | None = None
181    subdivision_sets: int | None = None
182
183    @property
184    def square_meter_clean_area(self) -> float | None:
185        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None
186
187    @property
188    def error_code_name(self) -> str | None:
189        return self.error_code.name if self.error_code is not None else None
190
191    @property
192    def state_name(self) -> str | None:
193        return self.state.name if self.state is not None else None
194
195    @property
196    def water_box_mode_name(self) -> str | None:
197        return self.water_box_mode.name if self.water_box_mode is not None else None
198
199    @property
200    def fan_power_options(self) -> list[str]:
201        if self.fan_power is None:
202            return []
203        return list(self.fan_power.keys())
204
205    @property
206    def fan_power_name(self) -> str | None:
207        return self.fan_power.name if self.fan_power is not None else None
208
209    @property
210    def mop_mode_name(self) -> str | None:
211        return self.mop_mode.name if self.mop_mode is not None else None
212
213    def get_fan_speed_code(self, fan_speed: str) -> int:
214        if self.fan_power is None:
215            raise RoborockException("Attempted to get fan speed before status has been updated.")
216        return self.fan_power.as_dict().get(fan_speed)
217
218    def get_mop_intensity_code(self, mop_intensity: str) -> int:
219        if self.water_box_mode is None:
220            raise RoborockException("Attempted to get mop_intensity before status has been updated.")
221        return self.water_box_mode.as_dict().get(mop_intensity)
222
223    def get_mop_mode_code(self, mop_mode: str) -> int:
224        if self.mop_mode is None:
225            raise RoborockException("Attempted to get mop_mode before status has been updated.")
226        return self.mop_mode.as_dict().get(mop_mode)
227
228    @property
229    def current_map(self) -> int | None:
230        """Returns the current map ID if the map is present."""
231        if self.map_status is not None:
232            map_flag = self.map_status >> 2
233            if map_flag != NO_MAP:
234                return map_flag
235        return None
236
237    @property
238    def clear_water_box_status(self) -> ClearWaterBoxStatus | None:
239        if self.dss:
240            return ClearWaterBoxStatus((self.dss >> 2) & 3)
241        return None
242
243    @property
244    def dirty_water_box_status(self) -> DirtyWaterBoxStatus | None:
245        if self.dss:
246            return DirtyWaterBoxStatus((self.dss >> 4) & 3)
247        return None
248
249    @property
250    def dust_bag_status(self) -> DustBagStatus | None:
251        if self.dss:
252            return DustBagStatus((self.dss >> 6) & 3)
253        return None
254
255    @property
256    def water_box_filter_status(self) -> int | None:
257        if self.dss:
258            return (self.dss >> 8) & 3
259        return None
260
261    @property
262    def clean_fluid_status(self) -> CleanFluidStatus | None:
263        if self.dss:
264            value = (self.dss >> 10) & 3
265            if value == 0:
266                return None  # Feature not supported by this device
267            return CleanFluidStatus(value)
268        return None
269
270    @property
271    def hatch_door_status(self) -> int | None:
272        if self.dss:
273            return (self.dss >> 12) & 7
274        return None
275
276    @property
277    def dock_cool_fan_status(self) -> int | None:
278        if self.dss:
279            return (self.dss >> 15) & 3
280        return None
281
282    def __repr__(self) -> str:
283        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
183    @property
184    def square_meter_clean_area(self) -> float | None:
185        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None
error_code_name: str | None
187    @property
188    def error_code_name(self) -> str | None:
189        return self.error_code.name if self.error_code is not None else None
state_name: str | None
191    @property
192    def state_name(self) -> str | None:
193        return self.state.name if self.state is not None else None
water_box_mode_name: str | None
195    @property
196    def water_box_mode_name(self) -> str | None:
197        return self.water_box_mode.name if self.water_box_mode is not None else None
fan_power_options: list[str]
199    @property
200    def fan_power_options(self) -> list[str]:
201        if self.fan_power is None:
202            return []
203        return list(self.fan_power.keys())
fan_power_name: str | None
205    @property
206    def fan_power_name(self) -> str | None:
207        return self.fan_power.name if self.fan_power is not None else None
mop_mode_name: str | None
209    @property
210    def mop_mode_name(self) -> str | None:
211        return self.mop_mode.name if self.mop_mode is not None else None
def get_fan_speed_code(self, fan_speed: str) -> int:
213    def get_fan_speed_code(self, fan_speed: str) -> int:
214        if self.fan_power is None:
215            raise RoborockException("Attempted to get fan speed before status has been updated.")
216        return self.fan_power.as_dict().get(fan_speed)
def get_mop_intensity_code(self, mop_intensity: str) -> int:
218    def get_mop_intensity_code(self, mop_intensity: str) -> int:
219        if self.water_box_mode is None:
220            raise RoborockException("Attempted to get mop_intensity before status has been updated.")
221        return self.water_box_mode.as_dict().get(mop_intensity)
def get_mop_mode_code(self, mop_mode: str) -> int:
223    def get_mop_mode_code(self, mop_mode: str) -> int:
224        if self.mop_mode is None:
225            raise RoborockException("Attempted to get mop_mode before status has been updated.")
226        return self.mop_mode.as_dict().get(mop_mode)
current_map: int | None
228    @property
229    def current_map(self) -> int | None:
230        """Returns the current map ID if the map is present."""
231        if self.map_status is not None:
232            map_flag = self.map_status >> 2
233            if map_flag != NO_MAP:
234                return map_flag
235        return None

Returns the current map ID if the map is present.

clear_water_box_status: roborock.data.v1.v1_code_mappings.ClearWaterBoxStatus | None
237    @property
238    def clear_water_box_status(self) -> ClearWaterBoxStatus | None:
239        if self.dss:
240            return ClearWaterBoxStatus((self.dss >> 2) & 3)
241        return None
dirty_water_box_status: roborock.data.v1.v1_code_mappings.DirtyWaterBoxStatus | None
243    @property
244    def dirty_water_box_status(self) -> DirtyWaterBoxStatus | None:
245        if self.dss:
246            return DirtyWaterBoxStatus((self.dss >> 4) & 3)
247        return None
dust_bag_status: roborock.data.v1.v1_code_mappings.DustBagStatus | None
249    @property
250    def dust_bag_status(self) -> DustBagStatus | None:
251        if self.dss:
252            return DustBagStatus((self.dss >> 6) & 3)
253        return None
water_box_filter_status: int | None
255    @property
256    def water_box_filter_status(self) -> int | None:
257        if self.dss:
258            return (self.dss >> 8) & 3
259        return None
clean_fluid_status: roborock.data.v1.v1_code_mappings.CleanFluidStatus | None
261    @property
262    def clean_fluid_status(self) -> CleanFluidStatus | None:
263        if self.dss:
264            value = (self.dss >> 10) & 3
265            if value == 0:
266                return None  # Feature not supported by this device
267            return CleanFluidStatus(value)
268        return None
hatch_door_status: int | None
270    @property
271    def hatch_door_status(self) -> int | None:
272        if self.dss:
273            return (self.dss >> 12) & 7
274        return None
dock_cool_fan_status: int | None
276    @property
277    def dock_cool_fan_status(self) -> int | None:
278        if self.dss:
279            return (self.dss >> 15) & 3
280        return None
@dataclass
class S4MaxStatus(Status):
286@dataclass
287class S4MaxStatus(Status):
288    fan_power: RoborockFanSpeedS6Pure | None = None
289    water_box_mode: RoborockMopIntensityS7 | None = None
290    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):
293@dataclass
294class S5MaxStatus(Status):
295    fan_power: RoborockFanSpeedS6Pure | None = None
296    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):
299@dataclass
300class Q7MaxStatus(Status):
301    fan_power: RoborockFanSpeedQ7Max | None = None
302    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):
305@dataclass
306class QRevoMasterStatus(Status):
307    fan_power: RoborockFanSpeedQRevoMaster | None = None
308    water_box_mode: RoborockMopIntensityQRevoMaster | None = None
309    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):
312@dataclass
313class QRevoCurvStatus(Status):
314    fan_power: RoborockFanSpeedQRevoCurv | None = None
315    water_box_mode: RoborockMopIntensityQRevoCurv | None = None
316    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):
319@dataclass
320class QRevoMaxVStatus(Status):
321    fan_power: RoborockFanSpeedQRevoMaxV | None = None
322    water_box_mode: RoborockMopIntensityQRevoMaxV | None = None
323    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):
326@dataclass
327class S6MaxVStatus(Status):
328    fan_power: RoborockFanSpeedS7MaxV | None = None
329    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):
332@dataclass
333class S6PureStatus(Status):
334    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):
337@dataclass
338class S7MaxVStatus(Status):
339    fan_power: RoborockFanSpeedS7MaxV | None = None
340    water_box_mode: RoborockMopIntensityS7 | None = None
341    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):
344@dataclass
345class S7Status(Status):
346    fan_power: RoborockFanSpeedS7 | None = None
347    water_box_mode: RoborockMopIntensityS7 | None = None
348    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):
351@dataclass
352class S8ProUltraStatus(Status):
353    fan_power: RoborockFanSpeedS7MaxV | None = None
354    water_box_mode: RoborockMopIntensityS7 | None = None
355    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):
358@dataclass
359class S8Status(Status):
360    fan_power: RoborockFanSpeedS7MaxV | None = None
361    water_box_mode: RoborockMopIntensityS7 | None = None
362    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):
365@dataclass
366class P10Status(Status):
367    fan_power: RoborockFanSpeedP10 | None = None
368    water_box_mode: RoborockMopIntensityP10 | None = None
369    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):
372@dataclass
373class S8MaxvUltraStatus(Status):
374    fan_power: RoborockFanSpeedS8MaxVUltra | None = None
375    water_box_mode: RoborockMopIntensityS8MaxVUltra | None = None
376    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):
379@dataclass
380class Saros10RStatus(Status):
381    fan_power: RoborockFanSpeedSaros10R | None = None
382    water_box_mode: RoborockMopIntensitySaros10R | None = None
383    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):
386@dataclass
387class Saros10Status(Status):
388    fan_power: RoborockFanSpeedSaros10 | None = None
389    water_box_mode: RoborockMopIntensitySaros10 | None = None
390    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):
421@dataclass
422class DnDTimer(RoborockBaseTimer):
423    """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):
426@dataclass
427class ValleyElectricityTimer(RoborockBaseTimer):
428    """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):
431@dataclass
432class CleanSummary(RoborockBase):
433    clean_time: int | None = None
434    clean_area: int | None = None
435    clean_count: int | None = None
436    dust_collection_count: int | None = None
437    records: list[int] | None = None
438    last_clean_t: int | None = None
439
440    @property
441    def square_meter_clean_area(self) -> float | None:
442        """Returns the clean area in square meters."""
443        if isinstance(self.clean_area, list | str):
444            _LOGGER.warning(f"Clean area is a unexpected type! Please give the following in a issue: {self.clean_area}")
445            return None
446        return round(self.clean_area / 1000000, 1) if self.clean_area is not None else None
447
448    def __repr__(self) -> str:
449        """Return a string representation of the object including all attributes."""
450        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
440    @property
441    def square_meter_clean_area(self) -> float | None:
442        """Returns the clean area in square meters."""
443        if isinstance(self.clean_area, list | str):
444            _LOGGER.warning(f"Clean area is a unexpected type! Please give the following in a issue: {self.clean_area}")
445            return None
446        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):
453@dataclass
454class CleanRecord(RoborockBase):
455    begin: int | None = None
456    end: int | None = None
457    duration: int | None = None
458    area: int | None = None
459    error: int | None = None
460    complete: int | None = None
461    start_type: RoborockStartType | None = None
462    clean_type: RoborockCleanType | None = None
463    finish_reason: RoborockFinishReason | None = None
464    dust_collection_status: int | None = None
465    avoid_count: int | None = None
466    wash_count: int | None = None
467    map_flag: int | None = None
468
469    @property
470    def square_meter_area(self) -> float | None:
471        return round(self.area / 1000000, 1) if self.area is not None else None
472
473    @property
474    def begin_datetime(self) -> datetime.datetime | None:
475        return datetime.datetime.fromtimestamp(self.begin).astimezone(datetime.UTC) if self.begin else None
476
477    @property
478    def end_datetime(self) -> datetime.datetime | None:
479        return datetime.datetime.fromtimestamp(self.end).astimezone(datetime.UTC) if self.end else None
480
481    def __repr__(self) -> str:
482        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
469    @property
470    def square_meter_area(self) -> float | None:
471        return round(self.area / 1000000, 1) if self.area is not None else None
begin_datetime: datetime.datetime | None
473    @property
474    def begin_datetime(self) -> datetime.datetime | None:
475        return datetime.datetime.fromtimestamp(self.begin).astimezone(datetime.UTC) if self.begin else None
end_datetime: datetime.datetime | None
477    @property
478    def end_datetime(self) -> datetime.datetime | None:
479        return datetime.datetime.fromtimestamp(self.end).astimezone(datetime.UTC) if self.end else None
class CleanSummaryWithDetail(CleanSummary):
485class CleanSummaryWithDetail(CleanSummary):
486    """CleanSummary with the last CleanRecord included."""
487
488    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):
491@dataclass
492class Consumable(RoborockBase):
493    main_brush_work_time: int | None = None
494    side_brush_work_time: int | None = None
495    filter_work_time: int | None = None
496    filter_element_work_time: int | None = None
497    sensor_dirty_time: int | None = None
498    strainer_work_times: int | None = None
499    dust_collection_work_times: int | None = None
500    cleaning_brush_work_times: int | None = None
501    moproller_work_time: int | None = None
502
503    @property
504    def main_brush_time_left(self) -> int | None:
505        return MAIN_BRUSH_REPLACE_TIME - self.main_brush_work_time if self.main_brush_work_time is not None else None
506
507    @property
508    def side_brush_time_left(self) -> int | None:
509        return SIDE_BRUSH_REPLACE_TIME - self.side_brush_work_time if self.side_brush_work_time is not None else None
510
511    @property
512    def filter_time_left(self) -> int | None:
513        return FILTER_REPLACE_TIME - self.filter_work_time if self.filter_work_time is not None else None
514
515    @property
516    def sensor_time_left(self) -> int | None:
517        return SENSOR_DIRTY_REPLACE_TIME - self.sensor_dirty_time if self.sensor_dirty_time is not None else None
518
519    @property
520    def strainer_time_left(self) -> int | None:
521        return STRAINER_REPLACE_TIME - self.strainer_work_times if self.strainer_work_times is not None else None
522
523    @property
524    def dust_collection_time_left(self) -> int | None:
525        return (
526            DUST_COLLECTION_REPLACE_TIME - self.dust_collection_work_times
527            if self.dust_collection_work_times is not None
528            else None
529        )
530
531    @property
532    def cleaning_brush_time_left(self) -> int | None:
533        return (
534            CLEANING_BRUSH_REPLACE_TIME - self.cleaning_brush_work_times
535            if self.cleaning_brush_work_times is not None
536            else None
537        )
538
539    @property
540    def mop_roller_time_left(self) -> int | None:
541        return MOP_ROLLER_REPLACE_TIME - self.moproller_work_time if self.moproller_work_time is not None else None
542
543    def __repr__(self) -> str:
544        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
503    @property
504    def main_brush_time_left(self) -> int | None:
505        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
507    @property
508    def side_brush_time_left(self) -> int | None:
509        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
511    @property
512    def filter_time_left(self) -> int | None:
513        return FILTER_REPLACE_TIME - self.filter_work_time if self.filter_work_time is not None else None
sensor_time_left: int | None
515    @property
516    def sensor_time_left(self) -> int | None:
517        return SENSOR_DIRTY_REPLACE_TIME - self.sensor_dirty_time if self.sensor_dirty_time is not None else None
strainer_time_left: int | None
519    @property
520    def strainer_time_left(self) -> int | None:
521        return STRAINER_REPLACE_TIME - self.strainer_work_times if self.strainer_work_times is not None else None
dust_collection_time_left: int | None
523    @property
524    def dust_collection_time_left(self) -> int | None:
525        return (
526            DUST_COLLECTION_REPLACE_TIME - self.dust_collection_work_times
527            if self.dust_collection_work_times is not None
528            else None
529        )
cleaning_brush_time_left: int | None
531    @property
532    def cleaning_brush_time_left(self) -> int | None:
533        return (
534            CLEANING_BRUSH_REPLACE_TIME - self.cleaning_brush_work_times
535            if self.cleaning_brush_work_times is not None
536            else None
537        )
mop_roller_time_left: int | None
539    @property
540    def mop_roller_time_left(self) -> int | None:
541        return MOP_ROLLER_REPLACE_TIME - self.moproller_work_time if self.moproller_work_time is not None else None
@dataclass
class MultiMapsListRoom(roborock.data.containers.RoborockBase):
547@dataclass
548class MultiMapsListRoom(RoborockBase):
549    id: int | None = None
550    tag: int | None = None
551    iot_name_id: str | None = None
552    iot_name: str | None = None
MultiMapsListRoom( id: int | None = None, tag: int | None = None, iot_name_id: str | None = None, iot_name: str | None = None)
id: int | None = None
tag: int | None = None
iot_name_id: str | None = None
iot_name: str | None = None
@dataclass
class MultiMapsListMapInfoBakMaps(roborock.data.containers.RoborockBase):
555@dataclass
556class MultiMapsListMapInfoBakMaps(RoborockBase):
557    mapflag: Any | None = None
558    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):
561@dataclass
562class MultiMapsListMapInfo(RoborockBase):
563    map_flag: int
564    name: str
565    add_time: Any | None = None
566    length: Any | None = None
567    bak_maps: list[MultiMapsListMapInfoBakMaps] | None = None
568    rooms: list[MultiMapsListRoom] | None = None
569
570    @property
571    def mapFlag(self) -> int:
572        """Alias for map_flag, returns the map flag as an integer."""
573        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, rooms: list[MultiMapsListRoom] | None = None)
map_flag: int
name: str
add_time: typing.Any | None = None
length: typing.Any | None = None
bak_maps: list[MultiMapsListMapInfoBakMaps] | None = None
rooms: list[MultiMapsListRoom] | None = None
mapFlag: int
570    @property
571    def mapFlag(self) -> int:
572        """Alias for map_flag, returns the map flag as an integer."""
573        return self.map_flag

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

@dataclass
class MultiMapsList(roborock.data.containers.RoborockBase):
576@dataclass
577class MultiMapsList(RoborockBase):
578    max_multi_map: int | None = None
579    max_bak_map: int | None = None
580    multi_map_count: int | None = None
581    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):
584@dataclass
585class SmartWashParams(RoborockBase):
586    smart_wash: int | None = None
587    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):
590@dataclass
591class DustCollectionMode(RoborockBase):
592    mode: RoborockDockDustCollectionModeCode | None = None
@dataclass
class WashTowelMode(roborock.data.containers.RoborockBase):
595@dataclass
596class WashTowelMode(RoborockBase):
597    wash_mode: RoborockDockWashTowelModeCode | None = None
WashTowelMode( wash_mode: roborock.data.v1.v1_code_mappings.RoborockDockWashTowelModeCode | None = None)
@dataclass
class NetworkInfo(roborock.data.containers.RoborockBase):
600@dataclass
601class NetworkInfo(RoborockBase):
602    ip: str
603    ssid: str | None = None
604    mac: str | None = None
605    bssid: str | None = None
606    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):
609@dataclass
610class AppInitStatusLocalInfo(RoborockBase):
611    location: str
612    bom: str | None = None
613    featureset: int | None = None
614    language: str | None = None
615    logserver: str | None = None
616    wifiplan: str | None = None
617    timezone: str | None = None
618    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):
621@dataclass
622class AppInitStatus(RoborockBase):
623    local_info: AppInitStatusLocalInfo
624    feature_info: list[int]
625    new_feature_info: int
626    new_feature_info_str: str = ""
627    new_feature_info_2: int | None = None
628    carriage_type: int | None = None
629    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):
632@dataclass
633class ChildLockStatus(RoborockBase):
634    lock_status: int = 0
ChildLockStatus(lock_status: int = 0)
lock_status: int = 0
@dataclass
class FlowLedStatus(roborock.data.containers.RoborockBase):
637@dataclass
638class FlowLedStatus(RoborockBase):
639    status: int = 0
FlowLedStatus(status: int = 0)
status: int = 0
@dataclass
class LedStatus(roborock.data.containers.RoborockBase):
642@dataclass
643class LedStatus(RoborockBase):
644    status: int = 0
LedStatus(status: int = 0)
status: int = 0