Home Assistant Unofficial Reference 2024.12.1
device_tracker.py
Go to the documentation of this file.
1 """Support for Vodafone Station routers."""
2 
3 from __future__ import annotations
4 
5 from homeassistant.components.device_tracker import ScannerEntity
6 from homeassistant.config_entries import ConfigEntry
7 from homeassistant.core import HomeAssistant, callback
8 from homeassistant.helpers.dispatcher import async_dispatcher_connect
9 from homeassistant.helpers.entity_platform import AddEntitiesCallback
10 from homeassistant.helpers.update_coordinator import CoordinatorEntity
11 
12 from .const import _LOGGER, DOMAIN
13 from .coordinator import VodafoneStationDeviceInfo, VodafoneStationRouter
14 
15 
17  hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
18 ) -> None:
19  """Set up device tracker for Vodafone Station component."""
20 
21  _LOGGER.debug("Start device trackers setup")
22  coordinator: VodafoneStationRouter = hass.data[DOMAIN][entry.entry_id]
23 
24  tracked: set = set()
25 
26  @callback
27  def async_update_router() -> None:
28  """Update the values of the router."""
29  async_add_new_tracked_entities(coordinator, async_add_entities, tracked)
30 
31  entry.async_on_unload(
33  hass, coordinator.signal_device_new, async_update_router
34  )
35  )
36 
37  async_update_router()
38 
39 
40 @callback
42  coordinator: VodafoneStationRouter,
43  async_add_entities: AddEntitiesCallback,
44  tracked: set[str],
45 ) -> None:
46  """Add new tracker entities from the router."""
47  new_tracked = []
48 
49  _LOGGER.debug("Adding device trackers entities")
50  for mac, device_info in coordinator.data.devices.items():
51  if mac in tracked:
52  continue
53  _LOGGER.debug("New device tracker: %s", device_info.device.name)
54  new_tracked.append(VodafoneStationTracker(coordinator, device_info))
55  tracked.add(mac)
56 
57  async_add_entities(new_tracked)
58 
59 
60 class VodafoneStationTracker(CoordinatorEntity[VodafoneStationRouter], ScannerEntity):
61  """Representation of a Vodafone Station device."""
62 
63  _attr_translation_key = "device_tracker"
64  mac_address: str
65 
66  def __init__(
67  self, coordinator: VodafoneStationRouter, device_info: VodafoneStationDeviceInfo
68  ) -> None:
69  """Initialize a Vodafone Station device."""
70  super().__init__(coordinator)
71  self._coordinator_coordinator = coordinator
72  mac = device_info.device.mac
73  self._attr_mac_address_attr_mac_address = mac
74  self._attr_unique_id_attr_unique_id = mac
75  self._attr_hostname_attr_hostname = device_info.device.name or mac.replace(":", "_")
76 
77  @property
78  def _device_info(self) -> VodafoneStationDeviceInfo:
79  """Return fresh data for the device."""
80  return self.coordinator.data.devices[self.mac_address]
81 
82  @property
83  def is_connected(self) -> bool:
84  """Return true if the device is connected to the network."""
85  return self._device_info_device_info.home
86 
87  @property
88  def ip_address(self) -> str | None:
89  """Return the primary ip address of the device."""
90  return self._device_info_device_info.device.ip_address
None __init__(self, VodafoneStationRouter coordinator, VodafoneStationDeviceInfo device_info)
None async_add_new_tracked_entities(VodafoneStationRouter coordinator, AddEntitiesCallback async_add_entities, set[str] tracked)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103