Home Assistant Unofficial Reference 2024.12.1
device_tracker.py
Go to the documentation of this file.
1 """Device Tracker platform for Tesla Fleet integration."""
2 
3 from __future__ import annotations
4 
6 from homeassistant.config_entries import ConfigEntry
7 from homeassistant.const import STATE_HOME
8 from homeassistant.core import HomeAssistant
9 from homeassistant.helpers.entity_platform import AddEntitiesCallback
10 from homeassistant.helpers.restore_state import RestoreEntity
11 
12 from .entity import TeslaFleetVehicleEntity
13 from .models import TeslaFleetVehicleData
14 
15 
17  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
18 ) -> None:
19  """Set up the Tesla Fleet device tracker platform from a config entry."""
20 
22  klass(vehicle)
23  for klass in (
24  TeslaFleetDeviceTrackerLocationEntity,
25  TeslaFleetDeviceTrackerRouteEntity,
26  )
27  for vehicle in entry.runtime_data.vehicles
28  )
29 
30 
32  TeslaFleetVehicleEntity, TrackerEntity, RestoreEntity
33 ):
34  """Base class for Tesla Fleet device tracker entities."""
35 
36  def __init__(
37  self,
38  vehicle: TeslaFleetVehicleData,
39  ) -> None:
40  """Initialize the device tracker."""
41  super().__init__(vehicle, self.keykey)
42 
43  async def async_added_to_hass(self) -> None:
44  """Handle entity which will be added."""
45  await super().async_added_to_hass()
46  if (
47  (state := await self.async_get_last_stateasync_get_last_state()) is not None
48  and self._attr_latitude_attr_latitude is None
49  and self._attr_longitude_attr_longitude is None
50  ):
51  self._attr_latitude_attr_latitude = state.attributes.get("latitude")
52  self._attr_longitude_attr_longitude = state.attributes.get("longitude")
53 
54 
56  """Vehicle Location device tracker Class."""
57 
58  key = "location"
59 
60  def _async_update_attrs(self) -> None:
61  """Update the attributes of the entity."""
62 
63  self._attr_latitude_attr_latitude_attr_latitude = self.getget("drive_state_latitude")
64  self._attr_longitude_attr_longitude_attr_longitude = self.getget("drive_state_longitude")
65  self._attr_available_attr_available = not (
66  self.getget("drive_state_longitude", False) is None
67  or self.getget("drive_state_latitude", False) is None
68  )
69 
70 
72  """Vehicle Navigation device tracker Class."""
73 
74  key = "route"
75 
76  def _async_update_attrs(self) -> None:
77  """Update the attributes of the device tracker."""
78  self._attr_latitude_attr_latitude_attr_latitude = self.getget("drive_state_active_route_latitude")
79  self._attr_longitude_attr_longitude_attr_longitude = self.getget("drive_state_active_route_longitude")
80  self._attr_available_attr_available = not (
81  self.getget("drive_state_active_route_longitude", False) is None
82  or self.getget("drive_state_active_route_latitude", False) is None
83  )
84 
85  @property
86  def location_name(self) -> str | None:
87  """Return a location name for the current location of the device."""
88  location = self.getget("drive_state_active_route_destination")
89  if location == "Home":
90  return STATE_HOME
91  return location
Any|None get(self, str key, Any|None default=None)
Definition: entity.py:61
Definition: config_entry.py:1
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)