1 """Support for vacuum entities."""
3 from __future__
import annotations
5 from enum
import StrEnum
8 from thinqconnect
import DeviceType
9 from thinqconnect.integration
import ExtendedProperty
17 StateVacuumEntityDescription,
24 from .
import ThinqConfigEntry
25 from .entity
import ThinQEntity
27 DEVICE_TYPE_VACUUM_MAP: dict[DeviceType, tuple[StateVacuumEntityDescription, ...]] = {
28 DeviceType.ROBOT_CLEANER: (
30 key=ExtendedProperty.VACUUM,
38 """State of device."""
48 ROBOT_STATUS_TO_HA = {
49 "charging": STATE_DOCKED,
50 "diagnosis": STATE_IDLE,
51 "homing": STATE_RETURNING,
52 "initializing": STATE_IDLE,
53 "macrosector": STATE_IDLE,
54 "monitoring_detecting": STATE_IDLE,
55 "monitoring_moving": STATE_IDLE,
56 "monitoring_positioning": STATE_IDLE,
57 "pause": STATE_PAUSED,
58 "reservation": STATE_IDLE,
59 "setdate": STATE_IDLE,
61 "standby": STATE_IDLE,
62 "working": STATE_CLEANING,
74 _LOGGER = logging.getLogger(__name__)
79 entry: ThinqConfigEntry,
80 async_add_entities: AddEntitiesCallback,
82 """Set up an entry for vacuum platform."""
83 entities: list[ThinQStateVacuumEntity] = []
84 for coordinator
in entry.runtime_data.coordinators.values():
86 descriptions := DEVICE_TYPE_VACUUM_MAP.get(
87 coordinator.api.device.device_type
90 for description
in descriptions:
93 for property_id
in coordinator.api.get_active_idx(description.key)
101 """Represent a thinq vacuum platform."""
103 _attr_supported_features = (
104 VacuumEntityFeature.SEND_COMMAND
105 | VacuumEntityFeature.STATE
106 | VacuumEntityFeature.BATTERY
107 | VacuumEntityFeature.START
108 | VacuumEntityFeature.PAUSE
109 | VacuumEntityFeature.RETURN_HOME
113 """Update status itself."""
120 if (level := self.
datadatadatadata.battery)
is not None:
122 level
if isinstance(level, int)
else ROBOT_BATT_TO_HA.get(level, 0)
126 "[%s:%s] update status: %s -> %s (battery_level=%s)",
127 self.coordinator.device_name,
135 """Start the device."""
137 value = State.WAKE_UP
144 "[%s:%s] async_start", self.coordinator.device_name, self.
property_idproperty_id
147 self.coordinator.api.async_set_clean_operation_mode(self.
property_idproperty_id, value)
151 """Pause the device."""
153 "[%s:%s] async_pause", self.coordinator.device_name, self.
property_idproperty_id
156 self.coordinator.api.async_set_clean_operation_mode(
162 """Return device to dock."""
164 "[%s:%s] async_return_to_base",
165 self.coordinator.device_name,
169 self.coordinator.api.async_set_clean_operation_mode(
None async_call_api(self, Coroutine[Any, Any, Any] target, Callable[[], None]|None on_fail_method=None)
None async_pause(self, **kwargs)
None _update_status(self)
None async_return_to_base(self, **kwargs)
None async_start(self, **kwargs)
int|None battery_level(self)
None async_setup_entry(HomeAssistant hass, ThinqConfigEntry entry, AddEntitiesCallback async_add_entities)