Home Assistant Unofficial Reference 2024.12.1
device_tracker.py
Go to the documentation of this file.
1 """Support for tracking iBeacon devices."""
2 
3 from __future__ import annotations
4 
5 from ibeacon_ble import iBeaconAdvertisement
6 
7 from homeassistant.components.device_tracker import SourceType
9 from homeassistant.const import STATE_HOME, STATE_NOT_HOME
10 from homeassistant.core import HomeAssistant, callback
11 from homeassistant.helpers.dispatcher import async_dispatcher_connect
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 
14 from . import IBeaconConfigEntry
15 from .const import SIGNAL_IBEACON_DEVICE_NEW
16 from .coordinator import IBeaconCoordinator
17 from .entity import IBeaconEntity
18 
19 
21  hass: HomeAssistant,
22  entry: IBeaconConfigEntry,
23  async_add_entities: AddEntitiesCallback,
24 ) -> None:
25  """Set up device tracker for iBeacon Tracker component."""
26  coordinator = entry.runtime_data
27 
28  @callback
29  def _async_device_new(
30  unique_id: str,
31  identifier: str,
32  ibeacon_advertisement: iBeaconAdvertisement,
33  ) -> None:
34  """Signal a new device."""
36  [
38  coordinator,
39  identifier,
40  unique_id,
41  ibeacon_advertisement,
42  )
43  ]
44  )
45 
46  entry.async_on_unload(
47  async_dispatcher_connect(hass, SIGNAL_IBEACON_DEVICE_NEW, _async_device_new)
48  )
49 
50 
52  """An iBeacon Tracker entity."""
53 
54  _attr_name = None
55  _attr_translation_key = "device_tracker"
56 
57  def __init__(
58  self,
59  coordinator: IBeaconCoordinator,
60  identifier: str,
61  device_unique_id: str,
62  ibeacon_advertisement: iBeaconAdvertisement,
63  ) -> None:
64  """Initialize an iBeacon tracker entity."""
65  super().__init__(
66  coordinator, identifier, device_unique_id, ibeacon_advertisement
67  )
68  self._attr_unique_id_attr_unique_id = device_unique_id
69  self._active_active = True
70 
71  @property
72  def state(self) -> str:
73  """Return the state of the device."""
74  return STATE_HOME if self._active_active else STATE_NOT_HOME
75 
76  @property
77  def source_type(self) -> SourceType:
78  """Return tracker source type."""
79  return SourceType.BLUETOOTH_LE
80 
81  @callback
83  self,
84  ibeacon_advertisement: iBeaconAdvertisement,
85  ) -> None:
86  """Update state."""
87  self._active_active = True
88  self._ibeacon_advertisement_ibeacon_advertisement_ibeacon_advertisement = ibeacon_advertisement
89  self.async_write_ha_stateasync_write_ha_state()
90 
91  @callback
92  def _async_unavailable(self) -> None:
93  """Set unavailable."""
94  self._active_active = False
95  self.async_write_ha_stateasync_write_ha_state()
None _async_seen(self, iBeaconAdvertisement ibeacon_advertisement)
None __init__(self, IBeaconCoordinator coordinator, str identifier, str device_unique_id, iBeaconAdvertisement ibeacon_advertisement)
Definition: config_entry.py:1
None async_setup_entry(HomeAssistant hass, IBeaconConfigEntry entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
Definition: dispatcher.py:103