1 """Calendar platform for La Marzocco espresso machines."""
3 from collections.abc
import Iterator
4 from datetime
import datetime, timedelta
6 from pylamarzocco.models
import LaMarzoccoWakeUpSleepEntry
13 from .coordinator
import LaMarzoccoConfigEntry, LaMarzoccoUpdateCoordinator
14 from .entity
import LaMarzoccoBaseEntity
16 CALENDAR_KEY =
"auto_on_off_schedule"
31 entry: LaMarzoccoConfigEntry,
32 async_add_entities: AddEntitiesCallback,
34 """Set up switch entities and services."""
36 coordinator = entry.runtime_data
39 for wake_up_sleep_entry
in coordinator.device.config.wake_up_sleep_entries.values()
44 """Class representing a La Marzocco calendar."""
46 _attr_translation_key = CALENDAR_KEY
50 coordinator: LaMarzoccoUpdateCoordinator,
52 wake_up_sleep_entry: LaMarzoccoWakeUpSleepEntry,
54 """Set up calendar."""
55 super().
__init__(coordinator, f
"{key}_{wake_up_sleep_entry.entry_id}")
60 def event(self) -> CalendarEvent | None:
61 """Return the next upcoming event."""
68 return next(iter(events),
None)
75 ) -> list[CalendarEvent]:
76 """Return calendar events within a datetime range."""
79 start_date=start_date,
87 ) -> list[CalendarEvent]:
88 """Get calendar events within a datetime range."""
90 events: list[CalendarEvent] = []
93 if scheduled.end < start_date:
95 if scheduled.start > end_date:
97 events.append(scheduled)
101 self, start_date: datetime, end_date: datetime
102 ) -> Iterator[datetime]:
103 current_date = start_date
104 while current_date.date() < end_date.date():
110 """Return calendar event for a given weekday."""
131 end_date = date.replace(
133 minute=
int(minute_off),
140 minute=
int(minute_on),
143 summary=f
"Machine {self.coordinator.config_entry.title} on",
144 description=
"Machine is scheduled to turn on at the start time and off at the end time",
CalendarEvent|None _async_get_calendar_event(self, datetime date)
None __init__(self, LaMarzoccoUpdateCoordinator coordinator, str key, LaMarzoccoWakeUpSleepEntry wake_up_sleep_entry)
_attr_translation_placeholders
CalendarEvent|None event(self)
Iterator[datetime] _get_date_range(self, datetime start_date, datetime end_date)
list[CalendarEvent] async_get_events(self, HomeAssistant hass, datetime start_date, datetime end_date)
list[CalendarEvent] _get_events(self, datetime start_date, datetime end_date)
None async_setup_entry(HomeAssistant hass, LaMarzoccoConfigEntry entry, AddEntitiesCallback async_add_entities)