Home Assistant Unofficial Reference 2024.12.1
calendar.py
Go to the documentation of this file.
1 """Creates a calendar entity for the mower."""
2 
3 from datetime import datetime
4 import logging
5 
6 from aioautomower.model import make_name_string
7 
8 from homeassistant.components.calendar import CalendarEntity, CalendarEvent
9 from homeassistant.core import HomeAssistant
10 from homeassistant.helpers.entity_platform import AddEntitiesCallback
11 from homeassistant.util import dt as dt_util
12 
13 from . import AutomowerConfigEntry
14 from .coordinator import AutomowerDataUpdateCoordinator
15 from .entity import AutomowerBaseEntity
16 
17 _LOGGER = logging.getLogger(__name__)
18 
19 
21  hass: HomeAssistant,
22  entry: AutomowerConfigEntry,
23  async_add_entities: AddEntitiesCallback,
24 ) -> None:
25  """Set up lawn mower platform."""
26  coordinator = entry.runtime_data
28  AutomowerCalendarEntity(mower_id, coordinator) for mower_id in coordinator.data
29  )
30 
31 
33  """Representation of the Automower Calendar element."""
34 
35  _attr_name: str | None = None
36 
37  def __init__(
38  self,
39  mower_id: str,
40  coordinator: AutomowerDataUpdateCoordinator,
41  ) -> None:
42  """Set up AutomowerCalendarEntity."""
43  super().__init__(mower_id, coordinator)
44  self._attr_unique_id_attr_unique_id = mower_id
45  self._event: CalendarEvent | None = None
46 
47  @property
48  def event(self) -> CalendarEvent | None:
49  """Return the current or next upcoming event."""
50  schedule = self.mower_attributesmower_attributes.calendar
51  cursor = schedule.timeline.active_after(dt_util.now())
52  program_event = next(cursor, None)
53  _LOGGER.debug("program_event %s", program_event)
54  if not program_event:
55  return None
56  work_area_name = None
57  if self.mower_attributesmower_attributes.work_area_dict and program_event.work_area_id:
58  work_area_name = self.mower_attributesmower_attributes.work_area_dict[
59  program_event.work_area_id
60  ]
61  return CalendarEvent(
62  summary=make_name_string(work_area_name, program_event.schedule_no),
63  start=program_event.start,
64  end=program_event.end,
65  rrule=program_event.rrule_str,
66  )
67 
68  async def async_get_events(
69  self, hass: HomeAssistant, start_date: datetime, end_date: datetime
70  ) -> list[CalendarEvent]:
71  """Return calendar events within a datetime range.
72 
73  This is only called when opening the calendar in the UI.
74  """
75  schedule = self.mower_attributesmower_attributes.calendar
76  cursor = schedule.timeline.overlapping(
77  start_date,
78  end_date,
79  )
80  calendar_events = []
81  for program_event in cursor:
82  work_area_name = None
83  if self.mower_attributesmower_attributes.work_area_dict and program_event.work_area_id:
84  work_area_name = self.mower_attributesmower_attributes.work_area_dict[
85  program_event.work_area_id
86  ]
87  calendar_events.append(
89  summary=make_name_string(work_area_name, program_event.schedule_no),
90  start=program_event.start.replace(tzinfo=start_date.tzinfo),
91  end=program_event.end.replace(tzinfo=start_date.tzinfo),
92  rrule=program_event.rrule_str,
93  )
94  )
95  return calendar_events
list[CalendarEvent] async_get_events(self, HomeAssistant hass, datetime start_date, datetime end_date)
Definition: calendar.py:70
None __init__(self, str mower_id, AutomowerDataUpdateCoordinator coordinator)
Definition: calendar.py:41
None async_setup_entry(HomeAssistant hass, AutomowerConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: calendar.py:24