1 """Support for Roborock vacuum class."""
3 from dataclasses
import asdict
6 from roborock.code_mappings
import RoborockStateCode
7 from roborock.roborock_message
import RoborockDataProtocol
8 from roborock.roborock_typing
import RoborockCommand
24 from .
import RoborockConfigEntry
25 from .const
import DOMAIN, GET_MAPS_SERVICE_NAME
26 from .coordinator
import RoborockDataUpdateCoordinator
27 from .entity
import RoborockCoordinatedEntityV1
29 STATE_CODE_TO_STATE = {
30 RoborockStateCode.starting: STATE_IDLE,
31 RoborockStateCode.charger_disconnected: STATE_IDLE,
32 RoborockStateCode.idle: STATE_IDLE,
33 RoborockStateCode.remote_control_active: STATE_CLEANING,
34 RoborockStateCode.cleaning: STATE_CLEANING,
35 RoborockStateCode.returning_home: STATE_RETURNING,
36 RoborockStateCode.manual_mode: STATE_CLEANING,
37 RoborockStateCode.charging: STATE_DOCKED,
38 RoborockStateCode.charging_problem: STATE_ERROR,
39 RoborockStateCode.paused: STATE_PAUSED,
40 RoborockStateCode.spot_cleaning: STATE_CLEANING,
41 RoborockStateCode.error: STATE_ERROR,
42 RoborockStateCode.shutting_down: STATE_IDLE,
43 RoborockStateCode.updating: STATE_DOCKED,
44 RoborockStateCode.docking: STATE_RETURNING,
45 RoborockStateCode.going_to_target: STATE_CLEANING,
46 RoborockStateCode.zoned_cleaning: STATE_CLEANING,
47 RoborockStateCode.segment_cleaning: STATE_CLEANING,
48 RoborockStateCode.emptying_the_bin: STATE_DOCKED,
49 RoborockStateCode.washing_the_mop: STATE_DOCKED,
50 RoborockStateCode.going_to_wash_the_mop: STATE_RETURNING,
51 RoborockStateCode.charging_complete: STATE_DOCKED,
52 RoborockStateCode.device_offline: STATE_ERROR,
58 config_entry: RoborockConfigEntry,
59 async_add_entities: AddEntitiesCallback,
61 """Set up the Roborock sensor."""
64 for coordinator
in config_entry.runtime_data.v1
65 if isinstance(coordinator, RoborockDataUpdateCoordinator)
68 platform = entity_platform.async_get_current_platform()
70 platform.async_register_entity_service(
71 GET_MAPS_SERVICE_NAME,
73 RoborockVacuum.get_maps.__name__,
74 supports_response=SupportsResponse.ONLY,
79 """General Representation of a Roborock vacuum."""
81 _attr_icon =
"mdi:robot-vacuum"
82 _attr_supported_features = (
83 VacuumEntityFeature.PAUSE
84 | VacuumEntityFeature.STOP
85 | VacuumEntityFeature.RETURN_HOME
86 | VacuumEntityFeature.FAN_SPEED
87 | VacuumEntityFeature.BATTERY
88 | VacuumEntityFeature.SEND_COMMAND
89 | VacuumEntityFeature.LOCATE
90 | VacuumEntityFeature.CLEAN_SPOT
91 | VacuumEntityFeature.STATE
92 | VacuumEntityFeature.START
94 _attr_translation_key = DOMAIN
99 coordinator: RoborockDataUpdateCoordinator,
101 """Initialize a vacuum."""
102 StateVacuumEntity.__init__(self)
103 RoborockCoordinatedEntityV1.__init__(
105 coordinator.duid_slug,
108 RoborockDataProtocol.FAN_POWER,
109 RoborockDataProtocol.STATE,
116 """Return the status of the vacuum cleaner."""
118 return STATE_CODE_TO_STATE.get(self.
_device_status_device_status.state)
122 """Return the battery level of the vacuum cleaner."""
127 """Return the fan speed of the vacuum cleaner."""
131 """Start the vacuum."""
133 await self.
sendsendsend(RoborockCommand.RESUME_ZONED_CLEAN)
135 await self.
sendsendsend(RoborockCommand.RESUME_SEGMENT_CLEAN)
137 await self.
sendsendsend(RoborockCommand.APP_START)
140 """Pause the vacuum."""
141 await self.
sendsendsend(RoborockCommand.APP_PAUSE)
144 """Stop the vacuum."""
145 await self.
sendsendsend(RoborockCommand.APP_STOP)
148 """Send vacuum back to base."""
149 await self.
sendsendsend(RoborockCommand.APP_CHARGE)
153 await self.
sendsendsend(RoborockCommand.APP_SPOT)
157 await self.
sendsendsend(RoborockCommand.FIND_ME)
160 """Set vacuum fan speed."""
162 RoborockCommand.SET_CUSTOM_MODE,
163 [self.
_device_status_device_status.get_fan_speed_code(fan_speed)],
169 params: dict[str, Any] | list[Any] |
None =
None,
172 """Send a command to a vacuum cleaner."""
173 await self.
sendsendsend(command, params)
176 """Get map information such as map id and room ids."""
179 asdict(vacuum_map)
for vacuum_map
in self.coordinator.maps.values()
Status _device_status(self)
dict send(self, RoborockCommand|str command, dict[str, Any]|list[Any]|int|None params=None)
dict send(self, RoborockCommand|str command, dict[str, Any]|list[Any]|int|None params=None)
ServiceResponse get_maps(self)
None async_locate(self, **Any kwargs)
None __init__(self, RoborockDataUpdateCoordinator coordinator)
None async_return_to_base(self, **Any kwargs)
int|None battery_level(self)
None async_send_command(self, str command, dict[str, Any]|list[Any]|None params=None, **Any kwargs)
None async_clean_spot(self, **Any kwargs)
None async_set_fan_speed(self, str fan_speed, **Any kwargs)
None async_stop(self, **Any kwargs)
None async_setup_entry(HomeAssistant hass, RoborockConfigEntry config_entry, AddEntitiesCallback async_add_entities)