1 """Support for Litter-Robot "Vacuum"."""
3 from __future__
import annotations
5 from datetime
import time
8 from pylitterbot
import LitterRobot
9 from pylitterbot.enums
import LitterBoxStatus
10 import voluptuous
as vol
18 StateVacuumEntityDescription,
26 from .
import LitterRobotConfigEntry
27 from .entity
import LitterRobotEntity
29 SERVICE_SET_SLEEP_MODE =
"set_sleep_mode"
31 LITTER_BOX_STATUS_STATE_MAP = {
32 LitterBoxStatus.CLEAN_CYCLE: STATE_CLEANING,
33 LitterBoxStatus.EMPTY_CYCLE: STATE_CLEANING,
34 LitterBoxStatus.CLEAN_CYCLE_COMPLETE: STATE_DOCKED,
35 LitterBoxStatus.CAT_DETECTED: STATE_DOCKED,
36 LitterBoxStatus.CAT_SENSOR_TIMING: STATE_DOCKED,
37 LitterBoxStatus.DRAWER_FULL_1: STATE_DOCKED,
38 LitterBoxStatus.DRAWER_FULL_2: STATE_DOCKED,
39 LitterBoxStatus.READY: STATE_DOCKED,
40 LitterBoxStatus.CAT_SENSOR_INTERRUPTED: STATE_PAUSED,
41 LitterBoxStatus.OFF: STATE_DOCKED,
45 key=
"litter_box", translation_key=
"litter_box"
51 entry: LitterRobotConfigEntry,
52 async_add_entities: AddEntitiesCallback,
54 """Set up Litter-Robot cleaner using config entry."""
55 hub = entry.runtime_data
58 for robot
in hub.litter_robots()
62 platform = entity_platform.async_get_current_platform()
63 platform.async_register_entity_service(
64 SERVICE_SET_SLEEP_MODE,
66 vol.Required(
"enabled"): cv.boolean,
67 vol.Optional(
"start_time"): cv.time,
69 "async_set_sleep_mode",
74 """Litter-Robot "Vacuum" Cleaner."""
76 _attr_supported_features = (
77 VacuumEntityFeature.START | VacuumEntityFeature.STATE | VacuumEntityFeature.STOP
82 """Return the state of the cleaner."""
83 return LITTER_BOX_STATUS_STATE_MAP.get(self.
robotrobot.status, STATE_ERROR)
87 """Return the status of the cleaner."""
89 f
"{self.robot.status.text}{' (Sleeping)' if self.robot.is_sleeping else ''}"
93 """Start a clean cycle."""
94 await self.
robotrobot.set_power_status(
True)
95 await self.
robotrobot.start_cleaning()
98 """Stop the vacuum cleaner."""
99 await self.
robotrobot.set_power_status(
False)
102 self, enabled: bool, start_time: str |
None =
None
104 """Set the sleep mode."""
105 await self.
robotrobot.set_sleep_mode(
111 """Parse a time string and add default timezone."""
115 if (parsed_time := dt_util.parse_time(time_str))
is None:
119 dt_util.start_of_local_day()
121 hour=parsed_time.hour,
122 minute=parsed_time.minute,
123 second=parsed_time.second,
130 """Return device specific state attributes."""
132 "is_sleeping": self.
robotrobot.is_sleeping,
133 "sleep_mode_enabled": self.
robotrobot.sleep_mode_enabled,
134 "power_status": self.
robotrobot.power_status,
135 "status": self.
statusstatus,
dict[str, Any] extra_state_attributes(self)
None async_stop(self, **Any kwargs)
time|None parse_time_at_default_timezone(str|None time_str)
None async_set_sleep_mode(self, bool enabled, str|None start_time=None)
None async_setup_entry(HomeAssistant hass, LitterRobotConfigEntry entry, AddEntitiesCallback async_add_entities)