1 """Support for israel rail."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from datetime
import datetime
9 from typing
import TYPE_CHECKING
14 SensorEntityDescription,
22 from .
import IsraelRailConfigEntry
23 from .const
import ATTRIBUTION, DEPARTURES_COUNT, DOMAIN
24 from .coordinator
import DataConnection, IsraelRailDataUpdateCoordinator
26 _LOGGER = logging.getLogger(__name__)
29 @dataclass(kw_only=True, frozen=True)
31 """Describes israel rail sensor entity."""
33 value_fn: Callable[[DataConnection], StateType | datetime]
38 DEPARTURE_SENSORS: tuple[IsraelRailSensorEntityDescription, ...] = (
41 key=f
"departure{i or ''}",
42 translation_key=f
"departure{i}",
43 device_class=SensorDeviceClass.TIMESTAMP,
44 value_fn=
lambda data_connection: data_connection.departure,
47 for i
in range(DEPARTURES_COUNT)
51 SENSORS: tuple[IsraelRailSensorEntityDescription, ...] = (
54 translation_key=
"platform",
55 value_fn=
lambda data_connection: data_connection.platform,
59 translation_key=
"trains",
60 value_fn=
lambda data_connection: data_connection.trains,
64 translation_key=
"train_number",
65 value_fn=
lambda data_connection: data_connection.train_number,
72 config_entry: IsraelRailConfigEntry,
73 async_add_entities: AddEntitiesCallback,
75 """Set up the sensor from a config entry created in the integrations UI."""
76 coordinator = config_entry.runtime_data
78 unique_id = config_entry.unique_id
85 for description
in (*DEPARTURE_SENSORS, *SENSORS)
90 CoordinatorEntity[IsraelRailDataUpdateCoordinator], SensorEntity
92 """Define a Israel Rail sensor."""
94 entity_description: IsraelRailSensorEntityDescription
95 _attr_attribution = ATTRIBUTION
96 _attr_has_entity_name =
True
100 coordinator: IsraelRailDataUpdateCoordinator,
101 entity_description: IsraelRailSensorEntityDescription,
104 """Initialize the sensor."""
108 identifiers={(DOMAIN, unique_id)},
109 entry_type=DeviceEntryType.SERVICE,
115 """Return the state of the sensor."""
StateType|datetime native_value(self)
None __init__(self, IsraelRailDataUpdateCoordinator coordinator, IsraelRailSensorEntityDescription entity_description, str unique_id)
None async_setup_entry(HomeAssistant hass, IsraelRailConfigEntry config_entry, AddEntitiesCallback async_add_entities)