1 """Support for Roborock device base class."""
5 from roborock.api
import RoborockClient
6 from roborock.command_cache
import CacheableAttribute
7 from roborock.containers
import Consumable, Status
8 from roborock.exceptions
import RoborockException
9 from roborock.roborock_message
import RoborockDataProtocol
10 from roborock.roborock_typing
import RoborockCommand
11 from roborock.version_1_apis.roborock_client_v1
import AttributeCache, RoborockClientV1
12 from roborock.version_1_apis.roborock_mqtt_client_v1
import RoborockMqttClientV1
13 from roborock.version_a01_apis
import RoborockClientA01
20 from .const
import DOMAIN
21 from .coordinator
import RoborockDataUpdateCoordinator, RoborockDataUpdateCoordinatorA01
25 """Representation of a base Roborock Entity."""
27 _attr_has_entity_name =
True
32 device_info: DeviceInfo,
35 """Initialize the Roborock Device."""
42 """Representation of a base Roborock V1 Entity."""
44 _api: RoborockClientV1
47 self, unique_id: str, device_info: DeviceInfo, api: RoborockClientV1
49 """Initialize the Roborock Device."""
50 super().
__init__(unique_id, device_info, api)
52 def get_cache(self, attribute: CacheableAttribute) -> AttributeCache:
53 """Get an item from the api cache."""
54 return self.
_api_api.cache[attribute]
58 command: RoborockCommand | str,
59 params: dict[str, Any] | list[Any] | int |
None =
None,
61 """Send a command to a vacuum cleaner."""
63 response: dict = await self.
_api_api.send_command(command, params)
64 except RoborockException
as err:
65 if isinstance(command, RoborockCommand):
66 command_name = command.name
68 command_name = command
70 translation_domain=DOMAIN,
71 translation_key=
"command_failed",
72 translation_placeholders={
73 "command": command_name,
79 def api(self) -> RoborockClientV1:
80 """Returns the api."""
85 """Representation of a base Roborock Entity for A01 devices."""
87 _api: RoborockClientA01
90 self, unique_id: str, device_info: DeviceInfo, api: RoborockClientA01
92 """Initialize the Roborock Device."""
93 super().
__init__(unique_id, device_info, api)
97 RoborockEntityV1, CoordinatorEntity[RoborockDataUpdateCoordinator]
99 """Representation of a base a coordinated Roborock Entity."""
101 _attr_has_entity_name =
True
106 coordinator: RoborockDataUpdateCoordinator,
107 listener_request: list[RoborockDataProtocol]
108 | RoborockDataProtocol
111 """Initialize the coordinated Roborock Device."""
112 RoborockEntityV1.__init__(
115 device_info=coordinator.device_info,
118 CoordinatorEntity.__init__(self, coordinator=coordinator)
120 if isinstance(listener_request, RoborockDataProtocol):
121 listener_request = [listener_request]
125 """Add listeners when the device is added to hass."""
128 self.
apiapiapi.add_listener(
133 """Remove listeners when the device is removed from hass."""
140 """Return the status of the device."""
141 data = self.coordinator.data
146 """Return the cloud api."""
147 return self.coordinator.cloud_api
151 command: RoborockCommand | str,
152 params: dict[str, Any] | list[Any] | int |
None =
None,
154 """Overloads normal send command but refreshes coordinator."""
155 res = await super().
send(command, params)
160 """Update the status or consumable data from a listener and then write the new entity state."""
161 if isinstance(value, Status):
162 self.coordinator.roborock_device_info.props.status = value
164 self.coordinator.roborock_device_info.props.consumable = value
165 self.coordinator.data = self.coordinator.roborock_device_info.props
170 RoborockEntityA01, CoordinatorEntity[RoborockDataUpdateCoordinatorA01]
172 """Representation of a base a coordinated Roborock Entity."""
177 coordinator: RoborockDataUpdateCoordinatorA01,
179 """Initialize the coordinated Roborock Device."""
180 RoborockEntityA01.__init__(
183 device_info=coordinator.device_info,
186 CoordinatorEntity.__init__(self, coordinator=coordinator)
None __init__(self, str unique_id, RoborockDataUpdateCoordinatorA01 coordinator)
None __init__(self, str unique_id, RoborockDataUpdateCoordinator coordinator, list[RoborockDataProtocol]|RoborockDataProtocol|None listener_request=None)
Status _device_status(self)
None _update_from_listener(self, Status|Consumable value)
None async_will_remove_from_hass(self)
dict send(self, RoborockCommand|str command, dict[str, Any]|list[Any]|int|None params=None)
None async_added_to_hass(self)
None __init__(self, str unique_id, DeviceInfo device_info, RoborockClientA01 api)
None __init__(self, str unique_id, DeviceInfo device_info, RoborockClientV1 api)
RoborockClientV1 api(self)
AttributeCache get_cache(self, CacheableAttribute attribute)
dict send(self, RoborockCommand|str command, dict[str, Any]|list[Any]|int|None params=None)
None __init__(self, str unique_id, DeviceInfo device_info, RoborockClient api)
None schedule_update_ha_state(self, bool force_refresh=False)