1 """Support for HERE travel time sensors."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
6 from datetime
import timedelta
12 SensorEntityDescription,
32 ATTR_DESTINATION_NAME,
35 ATTR_DURATION_IN_TRAFFIC,
42 from .coordinator
import (
43 HERERoutingDataUpdateCoordinator,
44 HERETransitDataUpdateCoordinator,
51 """Construct SensorEntityDescriptions."""
54 translation_key=
"duration",
55 icon=ICONS.get(travel_mode, ICON_CAR),
57 state_class=SensorStateClass.MEASUREMENT,
58 native_unit_of_measurement=UnitOfTime.MINUTES,
61 translation_key=
"duration_in_traffic",
62 icon=ICONS.get(travel_mode, ICON_CAR),
63 key=ATTR_DURATION_IN_TRAFFIC,
64 state_class=SensorStateClass.MEASUREMENT,
65 native_unit_of_measurement=UnitOfTime.MINUTES,
68 translation_key=
"distance",
69 icon=ICONS.get(travel_mode, ICON_CAR),
71 state_class=SensorStateClass.MEASUREMENT,
72 device_class=SensorDeviceClass.DISTANCE,
73 native_unit_of_measurement=UnitOfLength.KILOMETERS,
80 config_entry: ConfigEntry,
81 async_add_entities: AddEntitiesCallback,
83 """Add HERE travel time entities from a config_entry."""
85 entry_id = config_entry.entry_id
86 name = config_entry.data[CONF_NAME]
87 coordinator = hass.data[DOMAIN][entry_id]
89 sensors: list[HERETravelTimeSensor] = [
98 sensors.append(
OriginSensor(entry_id, name, coordinator))
105 HERERoutingDataUpdateCoordinator | HERETransitDataUpdateCoordinator
109 """Representation of a HERE travel time sensor."""
111 _attr_has_entity_name =
True
115 unique_id_prefix: str,
117 sensor_description: SensorEntityDescription,
118 coordinator: HERERoutingDataUpdateCoordinator
119 | HERETransitDataUpdateCoordinator,
121 """Initialize the sensor."""
126 identifiers={(DOMAIN, unique_id_prefix)},
127 entry_type=DeviceEntryType.SERVICE,
129 manufacturer=
"HERE Technologies",
138 """Wait for start so origin and destination entities can be resolved."""
144 """Handle updated data from the coordinator."""
145 if self.coordinator.data
is not None:
153 """Return the attribution."""
154 if self.coordinator.data
is not None:
155 if (attribution := self.coordinator.data.get(ATTR_ATTRIBUTION))
is not None:
156 return str(attribution)
161 """Sensor holding information about the route origin."""
165 unique_id_prefix: str,
167 coordinator: HERERoutingDataUpdateCoordinator,
169 """Initialize the sensor."""
171 translation_key=
"origin",
172 icon=
"mdi:store-marker",
173 key=ATTR_ORIGIN_NAME,
175 super().
__init__(unique_id_prefix, name, sensor_description, coordinator)
179 """GPS coordinates."""
180 if self.coordinator.data
is not None:
182 ATTR_LATITUDE: self.coordinator.data[ATTR_ORIGIN].split(
",")[0],
183 ATTR_LONGITUDE: self.coordinator.data[ATTR_ORIGIN].split(
",")[1],
189 """Sensor holding information about the route destination."""
193 unique_id_prefix: str,
195 coordinator: HERERoutingDataUpdateCoordinator,
197 """Initialize the sensor."""
199 translation_key=
"destination",
200 icon=
"mdi:store-marker",
201 key=ATTR_DESTINATION_NAME,
203 super().
__init__(unique_id_prefix, name, sensor_description, coordinator)
207 """GPS coordinates."""
208 if self.coordinator.data
is not None:
210 ATTR_LATITUDE: self.coordinator.data[ATTR_DESTINATION].split(
",")[0],
211 ATTR_LONGITUDE: self.coordinator.data[ATTR_DESTINATION].split(
",")[1],
Mapping[str, Any]|None extra_state_attributes(self)
None __init__(self, str unique_id_prefix, str name, HERERoutingDataUpdateCoordinator coordinator)
None async_added_to_hass(self)
None __init__(self, str unique_id_prefix, str name, SensorEntityDescription sensor_description, HERERoutingDataUpdateCoordinator|HERETransitDataUpdateCoordinator coordinator)
None _async_restore_state(self)
str|None attribution(self)
None _handle_coordinator_update(self)
Mapping[str, Any]|None extra_state_attributes(self)
None __init__(self, str unique_id_prefix, str name, HERERoutingDataUpdateCoordinator coordinator)
SensorExtraStoredData|None async_get_last_sensor_data(self)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
tuple[SensorEntityDescription,...] sensor_descriptions(str travel_mode)