"""Datetime entities for Sternwarte schedules.""" from __future__ import annotations from datetime import datetime from homeassistant.components.datetime import DateTimeEntity from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.util import dt as dt_util from .const import DOMAIN, ENTITY_SCHEDULE_CLOSE, ENTITY_SCHEDULE_OPEN from .entity import SternwarteEntity async def async_setup_entry( hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback, ) -> None: """Set up Sternwarte datetime entities.""" coordinator = hass.data[DOMAIN][entry.entry_id] async_add_entities( [ SternwarteOpenScheduleEntity(coordinator), SternwarteCloseScheduleEntity(coordinator), ] ) class SternwarteScheduleEntity(SternwarteEntity, DateTimeEntity): """Base datetime entity for schedules.""" _attr_icon = "mdi:calendar-clock" async def _async_set_schedule(self, value: datetime | None) -> None: raise NotImplementedError async def async_set_value(self, value: datetime) -> None: if value.tzinfo is None: value = value.replace(tzinfo=dt_util.DEFAULT_TIME_ZONE) await self._async_set_schedule(value) class SternwarteOpenScheduleEntity(SternwarteScheduleEntity): _attr_name = "Öffnen geplant" def __init__(self, coordinator): super().__init__(coordinator, ENTITY_SCHEDULE_OPEN) @property def native_value(self) -> datetime | None: value = self.coordinator.open_schedule_at return dt_util.as_local(value) if value is not None else None async def _async_set_schedule(self, value: datetime | None) -> None: await self.coordinator.async_set_open_schedule(value) class SternwarteCloseScheduleEntity(SternwarteScheduleEntity): _attr_name = "Schließen geplant" def __init__(self, coordinator): super().__init__(coordinator, ENTITY_SCHEDULE_CLOSE) @property def native_value(self) -> datetime | None: value = self.coordinator.close_schedule_at return dt_util.as_local(value) if value is not None else None async def _async_set_schedule(self, value: datetime | None) -> None: await self.coordinator.async_set_close_schedule(value)