Home Assistant Unofficial Reference 2024.12.1
device_tracker.py
Go to the documentation of this file.
1 """Support for Renault device trackers."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass
6 
7 from renault_api.kamereon.models import KamereonVehicleLocationData
8 
10  TrackerEntity,
11  TrackerEntityDescription,
12 )
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.entity_platform import AddEntitiesCallback
15 
16 from . import RenaultConfigEntry
17 from .entity import RenaultDataEntity, RenaultDataEntityDescription
18 
19 
20 @dataclass(frozen=True, kw_only=True)
22  TrackerEntityDescription, RenaultDataEntityDescription
23 ):
24  """Class describing Renault tracker entities."""
25 
26 
28  hass: HomeAssistant,
29  config_entry: RenaultConfigEntry,
30  async_add_entities: AddEntitiesCallback,
31 ) -> None:
32  """Set up the Renault entities from config entry."""
33  entities: list[RenaultDeviceTracker] = [
34  RenaultDeviceTracker(vehicle, description)
35  for vehicle in config_entry.runtime_data.vehicles.values()
36  for description in DEVICE_TRACKER_TYPES
37  if description.coordinator in vehicle.coordinators
38  ]
39  async_add_entities(entities)
40 
41 
43  RenaultDataEntity[KamereonVehicleLocationData], TrackerEntity
44 ):
45  """Mixin for device tracker specific attributes."""
46 
47  entity_description: RenaultTrackerEntityDescription
48 
49  @property
50  def latitude(self) -> float | None:
51  """Return latitude value of the device."""
52  return self.coordinatorcoordinator.data.gpsLatitude if self.coordinatorcoordinator.data else None
53 
54  @property
55  def longitude(self) -> float | None:
56  """Return longitude value of the device."""
57  return self.coordinatorcoordinator.data.gpsLongitude if self.coordinatorcoordinator.data else None
58 
59 
60 DEVICE_TRACKER_TYPES: tuple[RenaultTrackerEntityDescription, ...] = (
62  key="location",
63  coordinator="location",
64  translation_key="location",
65  ),
66 )
None async_setup_entry(HomeAssistant hass, RenaultConfigEntry config_entry, AddEntitiesCallback async_add_entities)