roborock.data.b01_q10.b01_q10_containers

Data container classes for Q10 B01 devices.

Many of these classes use the field(metadata={"dps": ...}) convention to map dataclass fields to device Data Points (DPS). This metadata is utilized by the UpdatableTrait helper in roborock.devices.traits.b01.q10.common to automatically update objects from raw device responses.

  1"""Data container classes for Q10 B01 devices.
  2
  3Many of these classes use the `field(metadata={"dps": ...})` convention to map
  4dataclass fields to device Data Points (DPS). This metadata is utilized by the
  5`UpdatableTrait` helper in `roborock.devices.traits.b01.q10.common` to
  6automatically update objects from raw device responses.
  7"""
  8
  9from dataclasses import dataclass, field
 10
 11from ..containers import RoborockBase
 12from .b01_q10_code_mappings import (
 13    B01_Q10_DP,
 14    YXAreaUnit,
 15    YXBackType,
 16    YXCarpetCleanType,
 17    YXCleanLine,
 18    YXCleanType,
 19    YXDeviceCleanTask,
 20    YXDeviceDustCollectionFrequency,
 21    YXDeviceState,
 22    YXFanLevel,
 23    YXWaterLevel,
 24)
 25
 26
 27@dataclass
 28class dpCleanRecord(RoborockBase):
 29    op: str
 30    result: int
 31    id: str
 32    data: list
 33
 34
 35@dataclass
 36class dpMultiMap(RoborockBase):
 37    op: str
 38    result: int
 39    data: list
 40
 41
 42@dataclass
 43class dpGetCarpet(RoborockBase):
 44    op: str
 45    result: int
 46    data: str
 47
 48
 49@dataclass
 50class dpSelfIdentifyingCarpet(RoborockBase):
 51    op: str
 52    result: int
 53    data: str
 54
 55
 56@dataclass
 57class dpNetInfo(RoborockBase):
 58    wifi_name: str | None = None
 59    # "ip_adress" intentionally mirrors the device's "ipAdress" key (sic).
 60    ip_adress: str | None = None
 61    mac: str | None = None
 62    signal: int | None = None
 63
 64    @property
 65    def ip_address(self) -> str | None:
 66        """Correctly-spelled alias for :attr:`ip_adress`."""
 67        return self.ip_adress
 68
 69
 70@dataclass
 71class dpNotDisturbExpand(RoborockBase):
 72    disturb_dust_enable: int | None = None
 73    disturb_light: int | None = None
 74    disturb_resume_clean: int | None = None
 75    disturb_voice: int | None = None
 76
 77
 78@dataclass
 79class dpCurrentCleanRoomIds(RoborockBase):
 80    room_id_list: list
 81
 82
 83@dataclass
 84class dpVoiceVersion(RoborockBase):
 85    version: int
 86
 87
 88@dataclass
 89class dpTimeZone(RoborockBase):
 90    time_zone_city: str | None = None
 91    time_zone_sec: int | None = None
 92
 93
 94@dataclass
 95class Q10Status(RoborockBase):
 96    """Core vacuum status for Q10 devices.
 97
 98    Fields are mapped to DPS values using metadata. Objects of this class can be
 99    automatically updated using the `UpdatableTrait` helper. Settings that have
100    their own trait (volume, child lock, do-not-disturb, dust collection,
101    network info, consumables) live on those traits instead of here.
102    """
103
104    clean_time: int | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_TIME})
105    clean_area: int | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_AREA})
106    battery: int | None = field(default=None, metadata={"dps": B01_Q10_DP.BATTERY})
107    status: YXDeviceState | None = field(default=None, metadata={"dps": B01_Q10_DP.STATUS})
108    fan_level: YXFanLevel | None = field(default=None, metadata={"dps": B01_Q10_DP.FAN_LEVEL})
109    water_level: YXWaterLevel | None = field(default=None, metadata={"dps": B01_Q10_DP.WATER_LEVEL})
110    clean_count: int | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_COUNT})
111    total_clean_area: int | None = field(default=None, metadata={"dps": B01_Q10_DP.TOTAL_CLEAN_AREA})
112    total_clean_count: int | None = field(default=None, metadata={"dps": B01_Q10_DP.TOTAL_CLEAN_COUNT})
113    total_clean_time: int | None = field(default=None, metadata={"dps": B01_Q10_DP.TOTAL_CLEAN_TIME})
114    clean_mode: YXCleanType | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_MODE})
115    clean_task_type: YXDeviceCleanTask | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_TASK_TYPE})
116    back_type: YXBackType | None = field(default=None, metadata={"dps": B01_Q10_DP.BACK_TYPE})
117    cleaning_progress: int | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_PROGRESS})
118    fault: int | None = field(default=None, metadata={"dps": B01_Q10_DP.FAULT})
119
120    # Additional state reported in the device's full status dump.
121    clean_line: YXCleanLine | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_LINE})
122    carpet_clean_type: YXCarpetCleanType | None = field(default=None, metadata={"dps": B01_Q10_DP.CARPET_CLEAN_TYPE})
123    area_unit: YXAreaUnit | None = field(default=None, metadata={"dps": B01_Q10_DP.AREA_UNIT})
124    auto_boost: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.AUTO_BOOST})
125    multi_map_switch: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.MULTI_MAP_SWITCH})
126    map_save_switch: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.MAP_SAVE_SWITCH})
127    recent_clean_record: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.RECENT_CLEAN_RECORD})
128    valley_point_charging: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.VALLEY_POINT_CHARGING})
129    line_laser_obstacle_avoidance: bool | None = field(
130        default=None, metadata={"dps": B01_Q10_DP.LINE_LASER_OBSTACLE_AVOIDANCE}
131    )
132    # Whether a mop module is attached, and whether "clean along floor direction" is on.
133    mop_state: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.MOP_STATE})
134    ground_clean: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.GROUND_CLEAN})
135    # True while an "add area" / re-clean (the app's draw-a-rectangle "re cleaning")
136    # request is in progress; pulses back to False once the robot has the area.
137    add_clean_state: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.ADD_CLEAN_STATE})
138    robot_country_code: str | None = field(default=None, metadata={"dps": B01_Q10_DP.ROBOT_COUNTRY_CODE})
139    time_zone: dpTimeZone | None = field(default=None, metadata={"dps": B01_Q10_DP.TIME_ZONE})
140
141    # TODO(#846): value mappings for these ints are not yet decoded (no app
142    # control found / internal / constant); keep as int until reverse-engineered.
143    breakpoint_clean: int | None = field(default=None, metadata={"dps": B01_Q10_DP.BREAKPOINT_CLEAN})
144    timer_type: int | None = field(default=None, metadata={"dps": B01_Q10_DP.TIMER_TYPE})
145    user_plan: int | None = field(default=None, metadata={"dps": B01_Q10_DP.USER_PLAN})
146    robot_type: int | None = field(default=None, metadata={"dps": B01_Q10_DP.ROBOT_TYPE})
147
148    # DEPRECATED: consumable/accessory remaining-life now lives on the
149    # ``Q10Consumable`` trait. These aliases are kept here for backwards
150    # compatibility and will be removed in a follow-up release. See PR #846.
151    main_brush_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.MAIN_BRUSH_LIFE})
152    side_brush_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.SIDE_BRUSH_LIFE})
153    filter_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.FILTER_LIFE})
154    sensor_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.SENSOR_LIFE})
155
156
157@dataclass
158class SoundVolume(RoborockBase):
159    """Speaker volume read-model (0-100)."""
160
161    volume: int | None = field(default=None, metadata={"dps": B01_Q10_DP.VOLUME})
162
163
164@dataclass
165class ChildLock(RoborockBase):
166    """Child-lock read-model."""
167
168    child_lock: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.CHILD_LOCK})
169
170
171@dataclass
172class DoNotDisturb(RoborockBase):
173    """Do Not Disturb read-model."""
174
175    not_disturb: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.NOT_DISTURB})
176    not_disturb_expand: dpNotDisturbExpand | None = field(default=None, metadata={"dps": B01_Q10_DP.NOT_DISTURB_EXPAND})
177
178
179@dataclass
180class DustCollection(RoborockBase):
181    """Dock auto-empty (dust collection) read-model."""
182
183    dust_switch: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.DUST_SWITCH})
184    dust_setting: YXDeviceDustCollectionFrequency | None = field(
185        default=None, metadata={"dps": B01_Q10_DP.DUST_SETTING}
186    )
187
188
189@dataclass
190class Q10Consumable(RoborockBase):
191    """Consumable / accessory remaining-life read-model.
192
193    Named with a ``Q10`` prefix to avoid shadowing the v1 ``Consumable`` when both
194    are star-imported into the ``roborock.data`` namespace.
195    """
196
197    main_brush_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.MAIN_BRUSH_LIFE})
198    side_brush_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.SIDE_BRUSH_LIFE})
199    filter_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.FILTER_LIFE})
200    sensor_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.SENSOR_LIFE})
201
202
203@dataclass
204class Q10NetworkInfo(RoborockBase):
205    """Network information read-model.
206
207    Named with a ``Q10`` prefix to avoid shadowing the v1 ``NetworkInfo`` when both
208    are star-imported into the ``roborock.data`` namespace.
209    """
210
211    net_info: dpNetInfo | None = field(default=None, metadata={"dps": B01_Q10_DP.NET_INFO})
@dataclass
class dpCleanRecord(roborock.data.containers.RoborockBase):
28@dataclass
29class dpCleanRecord(RoborockBase):
30    op: str
31    result: int
32    id: str
33    data: list
dpCleanRecord(op: str, result: int, id: str, data: list)
op: str
result: int
id: str
data: list
@dataclass
class dpMultiMap(roborock.data.containers.RoborockBase):
36@dataclass
37class dpMultiMap(RoborockBase):
38    op: str
39    result: int
40    data: list
dpMultiMap(op: str, result: int, data: list)
op: str
result: int
data: list
@dataclass
class dpGetCarpet(roborock.data.containers.RoborockBase):
43@dataclass
44class dpGetCarpet(RoborockBase):
45    op: str
46    result: int
47    data: str
dpGetCarpet(op: str, result: int, data: str)
op: str
result: int
data: str
@dataclass
class dpSelfIdentifyingCarpet(roborock.data.containers.RoborockBase):
50@dataclass
51class dpSelfIdentifyingCarpet(RoborockBase):
52    op: str
53    result: int
54    data: str
dpSelfIdentifyingCarpet(op: str, result: int, data: str)
op: str
result: int
data: str
@dataclass
class dpNetInfo(roborock.data.containers.RoborockBase):
57@dataclass
58class dpNetInfo(RoborockBase):
59    wifi_name: str | None = None
60    # "ip_adress" intentionally mirrors the device's "ipAdress" key (sic).
61    ip_adress: str | None = None
62    mac: str | None = None
63    signal: int | None = None
64
65    @property
66    def ip_address(self) -> str | None:
67        """Correctly-spelled alias for :attr:`ip_adress`."""
68        return self.ip_adress
dpNetInfo( wifi_name: str | None = None, ip_adress: str | None = None, mac: str | None = None, signal: int | None = None)
wifi_name: str | None = None
ip_adress: str | None = None
mac: str | None = None
signal: int | None = None
ip_address: str | None
65    @property
66    def ip_address(self) -> str | None:
67        """Correctly-spelled alias for :attr:`ip_adress`."""
68        return self.ip_adress

Correctly-spelled alias for ip_adress.

@dataclass
class dpNotDisturbExpand(roborock.data.containers.RoborockBase):
71@dataclass
72class dpNotDisturbExpand(RoborockBase):
73    disturb_dust_enable: int | None = None
74    disturb_light: int | None = None
75    disturb_resume_clean: int | None = None
76    disturb_voice: int | None = None
dpNotDisturbExpand( disturb_dust_enable: int | None = None, disturb_light: int | None = None, disturb_resume_clean: int | None = None, disturb_voice: int | None = None)
disturb_dust_enable: int | None = None
disturb_light: int | None = None
disturb_resume_clean: int | None = None
disturb_voice: int | None = None
@dataclass
class dpCurrentCleanRoomIds(roborock.data.containers.RoborockBase):
79@dataclass
80class dpCurrentCleanRoomIds(RoborockBase):
81    room_id_list: list
dpCurrentCleanRoomIds(room_id_list: list)
room_id_list: list
@dataclass
class dpVoiceVersion(roborock.data.containers.RoborockBase):
84@dataclass
85class dpVoiceVersion(RoborockBase):
86    version: int
dpVoiceVersion(version: int)
version: int
@dataclass
class dpTimeZone(roborock.data.containers.RoborockBase):
89@dataclass
90class dpTimeZone(RoborockBase):
91    time_zone_city: str | None = None
92    time_zone_sec: int | None = None
dpTimeZone(time_zone_city: str | None = None, time_zone_sec: int | None = None)
time_zone_city: str | None = None
time_zone_sec: int | None = None
@dataclass
class Q10Status(roborock.data.containers.RoborockBase):
 95@dataclass
 96class Q10Status(RoborockBase):
 97    """Core vacuum status for Q10 devices.
 98
 99    Fields are mapped to DPS values using metadata. Objects of this class can be
100    automatically updated using the `UpdatableTrait` helper. Settings that have
101    their own trait (volume, child lock, do-not-disturb, dust collection,
102    network info, consumables) live on those traits instead of here.
103    """
104
105    clean_time: int | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_TIME})
106    clean_area: int | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_AREA})
107    battery: int | None = field(default=None, metadata={"dps": B01_Q10_DP.BATTERY})
108    status: YXDeviceState | None = field(default=None, metadata={"dps": B01_Q10_DP.STATUS})
109    fan_level: YXFanLevel | None = field(default=None, metadata={"dps": B01_Q10_DP.FAN_LEVEL})
110    water_level: YXWaterLevel | None = field(default=None, metadata={"dps": B01_Q10_DP.WATER_LEVEL})
111    clean_count: int | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_COUNT})
112    total_clean_area: int | None = field(default=None, metadata={"dps": B01_Q10_DP.TOTAL_CLEAN_AREA})
113    total_clean_count: int | None = field(default=None, metadata={"dps": B01_Q10_DP.TOTAL_CLEAN_COUNT})
114    total_clean_time: int | None = field(default=None, metadata={"dps": B01_Q10_DP.TOTAL_CLEAN_TIME})
115    clean_mode: YXCleanType | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_MODE})
116    clean_task_type: YXDeviceCleanTask | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_TASK_TYPE})
117    back_type: YXBackType | None = field(default=None, metadata={"dps": B01_Q10_DP.BACK_TYPE})
118    cleaning_progress: int | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_PROGRESS})
119    fault: int | None = field(default=None, metadata={"dps": B01_Q10_DP.FAULT})
120
121    # Additional state reported in the device's full status dump.
122    clean_line: YXCleanLine | None = field(default=None, metadata={"dps": B01_Q10_DP.CLEAN_LINE})
123    carpet_clean_type: YXCarpetCleanType | None = field(default=None, metadata={"dps": B01_Q10_DP.CARPET_CLEAN_TYPE})
124    area_unit: YXAreaUnit | None = field(default=None, metadata={"dps": B01_Q10_DP.AREA_UNIT})
125    auto_boost: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.AUTO_BOOST})
126    multi_map_switch: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.MULTI_MAP_SWITCH})
127    map_save_switch: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.MAP_SAVE_SWITCH})
128    recent_clean_record: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.RECENT_CLEAN_RECORD})
129    valley_point_charging: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.VALLEY_POINT_CHARGING})
130    line_laser_obstacle_avoidance: bool | None = field(
131        default=None, metadata={"dps": B01_Q10_DP.LINE_LASER_OBSTACLE_AVOIDANCE}
132    )
133    # Whether a mop module is attached, and whether "clean along floor direction" is on.
134    mop_state: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.MOP_STATE})
135    ground_clean: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.GROUND_CLEAN})
136    # True while an "add area" / re-clean (the app's draw-a-rectangle "re cleaning")
137    # request is in progress; pulses back to False once the robot has the area.
138    add_clean_state: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.ADD_CLEAN_STATE})
139    robot_country_code: str | None = field(default=None, metadata={"dps": B01_Q10_DP.ROBOT_COUNTRY_CODE})
140    time_zone: dpTimeZone | None = field(default=None, metadata={"dps": B01_Q10_DP.TIME_ZONE})
141
142    # TODO(#846): value mappings for these ints are not yet decoded (no app
143    # control found / internal / constant); keep as int until reverse-engineered.
144    breakpoint_clean: int | None = field(default=None, metadata={"dps": B01_Q10_DP.BREAKPOINT_CLEAN})
145    timer_type: int | None = field(default=None, metadata={"dps": B01_Q10_DP.TIMER_TYPE})
146    user_plan: int | None = field(default=None, metadata={"dps": B01_Q10_DP.USER_PLAN})
147    robot_type: int | None = field(default=None, metadata={"dps": B01_Q10_DP.ROBOT_TYPE})
148
149    # DEPRECATED: consumable/accessory remaining-life now lives on the
150    # ``Q10Consumable`` trait. These aliases are kept here for backwards
151    # compatibility and will be removed in a follow-up release. See PR #846.
152    main_brush_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.MAIN_BRUSH_LIFE})
153    side_brush_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.SIDE_BRUSH_LIFE})
154    filter_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.FILTER_LIFE})
155    sensor_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.SENSOR_LIFE})

Core vacuum status for Q10 devices.

Fields are mapped to DPS values using metadata. Objects of this class can be automatically updated using the UpdatableTrait helper. Settings that have their own trait (volume, child lock, do-not-disturb, dust collection, network info, consumables) live on those traits instead of here.

Q10Status( clean_time: int | None = None, clean_area: int | None = None, battery: int | None = None, status: roborock.data.b01_q10.b01_q10_code_mappings.YXDeviceState | None = None, fan_level: roborock.data.b01_q10.b01_q10_code_mappings.YXFanLevel | None = None, water_level: roborock.data.b01_q10.b01_q10_code_mappings.YXWaterLevel | None = None, clean_count: int | None = None, total_clean_area: int | None = None, total_clean_count: int | None = None, total_clean_time: int | None = None, clean_mode: roborock.data.b01_q10.b01_q10_code_mappings.YXCleanType | None = None, clean_task_type: roborock.data.b01_q10.b01_q10_code_mappings.YXDeviceCleanTask | None = None, back_type: roborock.data.b01_q10.b01_q10_code_mappings.YXBackType | None = None, cleaning_progress: int | None = None, fault: int | None = None, clean_line: roborock.data.b01_q10.b01_q10_code_mappings.YXCleanLine | None = None, carpet_clean_type: roborock.data.b01_q10.b01_q10_code_mappings.YXCarpetCleanType | None = None, area_unit: roborock.data.b01_q10.b01_q10_code_mappings.YXAreaUnit | None = None, auto_boost: bool | None = None, multi_map_switch: bool | None = None, map_save_switch: bool | None = None, recent_clean_record: bool | None = None, valley_point_charging: bool | None = None, line_laser_obstacle_avoidance: bool | None = None, mop_state: bool | None = None, ground_clean: bool | None = None, add_clean_state: bool | None = None, robot_country_code: str | None = None, time_zone: dpTimeZone | None = None, breakpoint_clean: int | None = None, timer_type: int | None = None, user_plan: int | None = None, robot_type: int | None = None, main_brush_life: int | None = None, side_brush_life: int | None = None, filter_life: int | None = None, sensor_life: int | None = None)
clean_time: int | None = None
clean_area: int | None = None
battery: int | None = None
clean_count: int | None = None
total_clean_area: int | None = None
total_clean_count: int | None = None
total_clean_time: int | None = None
cleaning_progress: int | None = None
fault: int | None = None
auto_boost: bool | None = None
multi_map_switch: bool | None = None
map_save_switch: bool | None = None
recent_clean_record: bool | None = None
valley_point_charging: bool | None = None
line_laser_obstacle_avoidance: bool | None = None
mop_state: bool | None = None
ground_clean: bool | None = None
add_clean_state: bool | None = None
robot_country_code: str | None = None
time_zone: dpTimeZone | None = None
breakpoint_clean: int | None = None
timer_type: int | None = None
user_plan: int | None = None
robot_type: int | None = None
main_brush_life: int | None = None
side_brush_life: int | None = None
filter_life: int | None = None
sensor_life: int | None = None
@dataclass
class SoundVolume(roborock.data.containers.RoborockBase):
158@dataclass
159class SoundVolume(RoborockBase):
160    """Speaker volume read-model (0-100)."""
161
162    volume: int | None = field(default=None, metadata={"dps": B01_Q10_DP.VOLUME})

Speaker volume read-model (0-100).

SoundVolume(volume: int | None = None)
volume: int | None = None
@dataclass
class ChildLock(roborock.data.containers.RoborockBase):
165@dataclass
166class ChildLock(RoborockBase):
167    """Child-lock read-model."""
168
169    child_lock: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.CHILD_LOCK})

Child-lock read-model.

ChildLock(child_lock: bool | None = None)
child_lock: bool | None = None
@dataclass
class DoNotDisturb(roborock.data.containers.RoborockBase):
172@dataclass
173class DoNotDisturb(RoborockBase):
174    """Do Not Disturb read-model."""
175
176    not_disturb: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.NOT_DISTURB})
177    not_disturb_expand: dpNotDisturbExpand | None = field(default=None, metadata={"dps": B01_Q10_DP.NOT_DISTURB_EXPAND})

Do Not Disturb read-model.

DoNotDisturb( not_disturb: bool | None = None, not_disturb_expand: dpNotDisturbExpand | None = None)
not_disturb: bool | None = None
not_disturb_expand: dpNotDisturbExpand | None = None
@dataclass
class DustCollection(roborock.data.containers.RoborockBase):
180@dataclass
181class DustCollection(RoborockBase):
182    """Dock auto-empty (dust collection) read-model."""
183
184    dust_switch: bool | None = field(default=None, metadata={"dps": B01_Q10_DP.DUST_SWITCH})
185    dust_setting: YXDeviceDustCollectionFrequency | None = field(
186        default=None, metadata={"dps": B01_Q10_DP.DUST_SETTING}
187    )

Dock auto-empty (dust collection) read-model.

DustCollection( dust_switch: bool | None = None, dust_setting: roborock.data.b01_q10.b01_q10_code_mappings.YXDeviceDustCollectionFrequency | None = None)
dust_switch: bool | None = None
@dataclass
class Q10Consumable(roborock.data.containers.RoborockBase):
190@dataclass
191class Q10Consumable(RoborockBase):
192    """Consumable / accessory remaining-life read-model.
193
194    Named with a ``Q10`` prefix to avoid shadowing the v1 ``Consumable`` when both
195    are star-imported into the ``roborock.data`` namespace.
196    """
197
198    main_brush_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.MAIN_BRUSH_LIFE})
199    side_brush_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.SIDE_BRUSH_LIFE})
200    filter_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.FILTER_LIFE})
201    sensor_life: int | None = field(default=None, metadata={"dps": B01_Q10_DP.SENSOR_LIFE})

Consumable / accessory remaining-life read-model.

Named with a Q10 prefix to avoid shadowing the v1 Consumable when both are star-imported into the roborock.data namespace.

Q10Consumable( main_brush_life: int | None = None, side_brush_life: int | None = None, filter_life: int | None = None, sensor_life: int | None = None)
main_brush_life: int | None = None
side_brush_life: int | None = None
filter_life: int | None = None
sensor_life: int | None = None
@dataclass
class Q10NetworkInfo(roborock.data.containers.RoborockBase):
204@dataclass
205class Q10NetworkInfo(RoborockBase):
206    """Network information read-model.
207
208    Named with a ``Q10`` prefix to avoid shadowing the v1 ``NetworkInfo`` when both
209    are star-imported into the ``roborock.data`` namespace.
210    """
211
212    net_info: dpNetInfo | None = field(default=None, metadata={"dps": B01_Q10_DP.NET_INFO})

Network information read-model.

Named with a Q10 prefix to avoid shadowing the v1 NetworkInfo when both are star-imported into the roborock.data namespace.

Q10NetworkInfo( net_info: dpNetInfo | None = None)
net_info: dpNetInfo | None = None