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})
28@dataclass 29class dpCleanRecord(RoborockBase): 30 op: str 31 result: int 32 id: str 33 data: list
Inherited Members
Inherited Members
Inherited Members
Inherited Members
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
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.
Inherited Members
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
Inherited Members
Inherited Members
Inherited Members
89@dataclass 90class dpTimeZone(RoborockBase): 91 time_zone_city: str | None = None 92 time_zone_sec: int | None = None
Inherited Members
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.
Inherited Members
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).
Inherited Members
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.
Inherited Members
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.
Inherited Members
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.
Inherited Members
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.
Inherited Members
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.