Home Assistant Unofficial Reference 2024.12.1
date.py
Go to the documentation of this file.
1 """Support for KNX/IP date."""
2 
3 from __future__ import annotations
4 
5 from datetime import date as dt_date
6 
7 from xknx import XKNX
8 from xknx.devices import DateDevice as XknxDateDevice
9 from xknx.dpt.dpt_11 import KNXDate as XKNXDate
10 
11 from homeassistant import config_entries
12 from homeassistant.components.date import DateEntity
13 from homeassistant.const import (
14  CONF_ENTITY_CATEGORY,
15  CONF_NAME,
16  STATE_UNAVAILABLE,
17  STATE_UNKNOWN,
18  Platform,
19 )
20 from homeassistant.core import HomeAssistant
21 from homeassistant.helpers.entity_platform import AddEntitiesCallback
22 from homeassistant.helpers.restore_state import RestoreEntity
23 from homeassistant.helpers.typing import ConfigType
24 
25 from . import KNXModule
26 from .const import (
27  CONF_RESPOND_TO_READ,
28  CONF_STATE_ADDRESS,
29  CONF_SYNC_STATE,
30  KNX_ADDRESS,
31  KNX_MODULE_KEY,
32 )
33 from .entity import KnxYamlEntity
34 
35 
37  hass: HomeAssistant,
38  config_entry: config_entries.ConfigEntry,
39  async_add_entities: AddEntitiesCallback,
40 ) -> None:
41  """Set up entities for KNX platform."""
42  knx_module = hass.data[KNX_MODULE_KEY]
43  config: list[ConfigType] = knx_module.config_yaml[Platform.DATE]
44 
46  KNXDateEntity(knx_module, entity_config) for entity_config in config
47  )
48 
49 
50 def _create_xknx_device(xknx: XKNX, config: ConfigType) -> XknxDateDevice:
51  """Return a XKNX DateTime object to be used within XKNX."""
52  return XknxDateDevice(
53  xknx,
54  name=config[CONF_NAME],
55  localtime=False,
56  group_address=config[KNX_ADDRESS],
57  group_address_state=config.get(CONF_STATE_ADDRESS),
58  respond_to_read=config[CONF_RESPOND_TO_READ],
59  sync_state=config[CONF_SYNC_STATE],
60  )
61 
62 
64  """Representation of a KNX date."""
65 
66  _device: XknxDateDevice
67 
68  def __init__(self, knx_module: KNXModule, config: ConfigType) -> None:
69  """Initialize a KNX time."""
70  super().__init__(
71  knx_module=knx_module,
72  device=_create_xknx_device(knx_module.xknx, config),
73  )
74  self._attr_entity_category_attr_entity_category = config.get(CONF_ENTITY_CATEGORY)
75  self._attr_unique_id_attr_unique_id = str(self._device_device.remote_value.group_address)
76 
77  async def async_added_to_hass(self) -> None:
78  """Restore last state."""
79  await super().async_added_to_hass()
80  if (
81  not self._device_device.remote_value.readable
82  and (last_state := await self.async_get_last_stateasync_get_last_state()) is not None
83  and last_state.state not in (STATE_UNKNOWN, STATE_UNAVAILABLE)
84  ):
85  self._device_device.remote_value.value = XKNXDate.from_date(
86  dt_date.fromisoformat(last_state.state)
87  )
88 
89  @property
90  def native_value(self) -> dt_date | None:
91  """Return the latest value."""
92  return self._device_device.value
93 
94  async def async_set_value(self, value: dt_date) -> None:
95  """Change the value."""
96  await self._device_device.set(value)
None async_set_value(self, dt_date value)
Definition: date.py:94
None __init__(self, KNXModule knx_module, ConfigType config)
Definition: date.py:68
None async_setup_entry(HomeAssistant hass, config_entries.ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: date.py:40
XknxDateDevice _create_xknx_device(XKNX xknx, ConfigType config)
Definition: date.py:50