1 """Rain Bird irrigation calendar."""
3 from __future__
import annotations
5 from datetime
import datetime
16 from .coordinator
import RainbirdScheduleUpdateCoordinator
17 from .types
import RainbirdConfigEntry
19 _LOGGER = logging.getLogger(__name__)
24 config_entry: RainbirdConfigEntry,
25 async_add_entities: AddEntitiesCallback,
27 """Set up entry for a Rain Bird irrigation calendar."""
28 data = config_entry.runtime_data
29 if not data.model_info.model_info.max_programs:
35 data.schedule_coordinator,
36 data.coordinator.unique_id,
37 data.coordinator.device_info,
38 data.coordinator.device_name,
45 CoordinatorEntity[RainbirdScheduleUpdateCoordinator], CalendarEntity
47 """A calendar event entity."""
49 _attr_has_entity_name =
True
50 _attr_name: str |
None =
None
51 _attr_translation_key =
"calendar"
55 coordinator: RainbirdScheduleUpdateCoordinator,
56 unique_id: str |
None,
57 device_info: DeviceInfo |
None,
60 """Create the Calendar event device."""
62 self._event: CalendarEvent |
None =
None
63 if unique_id
is not None:
70 def event(self) -> CalendarEvent | None:
71 """Return the next upcoming event."""
72 schedule = self.coordinator.data
75 cursor = schedule.timeline_tz(dt_util.get_default_time_zone()).active_after(
78 program_event = next(cursor,
None)
82 summary=program_event.program_id.name,
83 start=dt_util.as_local(program_event.start),
84 end=dt_util.as_local(program_event.end),
85 rrule=program_event.rrule_str,
89 self, hass: HomeAssistant, start_date: datetime, end_date: datetime
90 ) -> list[CalendarEvent]:
91 """Get all events in a specific time frame."""
92 schedule = self.coordinator.data
95 "Unable to get events: No data from controller yet"
97 cursor = schedule.timeline_tz(start_date.tzinfo).overlapping(
103 summary=program_event.program_id.name,
104 start=dt_util.as_local(program_event.start),
105 end=dt_util.as_local(program_event.end),
106 rrule=program_event.rrule_str,
108 for program_event
in cursor
112 """When entity is added to hass."""
118 self.coordinator.config_entry.async_create_background_task(
121 "rainbird.calendar-refresh",
CalendarEvent|None event(self)
None async_added_to_hass(self)
None __init__(self, RainbirdScheduleUpdateCoordinator coordinator, str|None unique_id, DeviceInfo|None device_info, str device_name)
list[CalendarEvent] async_get_events(self, HomeAssistant hass, datetime start_date, datetime end_date)
None async_request_refresh(self)
None async_setup_entry(HomeAssistant hass, RainbirdConfigEntry config_entry, AddEntitiesCallback async_add_entities)