1 """Support for Litter-Robot time."""
3 from __future__
import annotations
5 from collections.abc
import Callable, Coroutine
6 from dataclasses
import dataclass
7 from datetime
import datetime, time
8 from typing
import Any, Generic
10 from pylitterbot
import LitterRobot3
18 from .
import LitterRobotConfigEntry
19 from .entity
import LitterRobotEntity, _RobotT
22 @dataclass(frozen=True)
24 """A class that describes robot time entity required keys."""
26 value_fn: Callable[[_RobotT], time |
None]
27 set_fn: Callable[[_RobotT, time], Coroutine[Any, Any, bool]]
30 @dataclass(frozen=True)
32 """A class that describes robot time entities."""
36 """Return a datetime as local time."""
37 return dt_util.as_local(start).
time()
if start
else None
40 LITTER_ROBOT_3_SLEEP_START = RobotTimeEntityDescription[LitterRobot3](
41 key=
"sleep_mode_start_time",
42 translation_key=
"sleep_mode_start_time",
43 entity_category=EntityCategory.CONFIG,
44 value_fn=
lambda robot:
_as_local_time(robot.sleep_mode_start_time),
45 set_fn=
lambda robot, value: robot.set_sleep_mode(
46 robot.sleep_mode_enabled, value.replace(tzinfo=dt_util.get_default_time_zone())
53 entry: LitterRobotConfigEntry,
54 async_add_entities: AddEntitiesCallback,
56 """Set up Litter-Robot cleaner using config entry."""
57 hub = entry.runtime_data
61 robot=robot, hub=hub, description=LITTER_ROBOT_3_SLEEP_START
63 for robot
in hub.litter_robots()
64 if isinstance(robot, LitterRobot3)
70 """Litter-Robot time entity."""
72 entity_description: RobotTimeEntityDescription[_RobotT]
76 """Return the value reported by the time."""
80 """Update the current value."""
None async_set_value(self, time value)
time|None native_value(self)
None async_setup_entry(HomeAssistant hass, LitterRobotConfigEntry entry, AddEntitiesCallback async_add_entities)
time|None _as_local_time(datetime|None start)
bool time(HomeAssistant hass, dt_time|str|None before=None, dt_time|str|None after=None, str|Container[str]|None weekday=None)