1 """Support for KNX/IP datetime."""
3 from __future__
import annotations
5 from datetime
import datetime
8 from xknx.devices
import DateTimeDevice
as XknxDateTimeDevice
9 from xknx.dpt.dpt_19
import KNXDateTime
as XKNXDateTime
11 from homeassistant
import config_entries
26 from .
import KNXModule
34 from .entity
import KnxYamlEntity
40 async_add_entities: AddEntitiesCallback,
42 """Set up entities for KNX platform."""
43 knx_module = hass.data[KNX_MODULE_KEY]
44 config: list[ConfigType] = knx_module.config_yaml[Platform.DATETIME]
52 """Return a XKNX DateTime object to be used within XKNX."""
53 return XknxDateTimeDevice(
55 name=config[CONF_NAME],
57 group_address=config[KNX_ADDRESS],
58 group_address_state=config.get(CONF_STATE_ADDRESS),
59 respond_to_read=config[CONF_RESPOND_TO_READ],
60 sync_state=config[CONF_SYNC_STATE],
65 """Representation of a KNX datetime."""
67 _device: XknxDateTimeDevice
69 def __init__(self, knx_module: KNXModule, config: ConfigType) ->
None:
70 """Initialize a KNX time."""
72 knx_module=knx_module,
79 """Restore last state."""
82 not self.
_device_device.remote_value.readable
84 and last_state.state
not in (STATE_UNKNOWN, STATE_UNAVAILABLE)
86 self.
_device_device.remote_value.value = XKNXDateTime.from_datetime(
87 datetime.fromisoformat(last_state.state).astimezone(
88 dt_util.get_default_time_zone()
94 """Return the latest value."""
95 if (naive_dt := self.
_device_device.value)
is None:
97 return naive_dt.replace(tzinfo=dt_util.get_default_time_zone())
100 """Change the value."""
101 await self.
_device_device.set(value.astimezone(dt_util.get_default_time_zone()))
None async_set_value(self, datetime value)
None async_added_to_hass(self)
None __init__(self, KNXModule knx_module, ConfigType config)
datetime|None native_value(self)
State|None async_get_last_state(self)
XknxDateTimeDevice _create_xknx_device(XKNX xknx, ConfigType config)
None async_setup_entry(HomeAssistant hass, config_entries.ConfigEntry config_entry, AddEntitiesCallback async_add_entities)