1 """Support for iBeacon device sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
8 from ibeacon_ble
import iBeaconAdvertisement
13 SensorEntityDescription,
21 from .
import IBeaconConfigEntry
22 from .const
import SIGNAL_IBEACON_DEVICE_NEW
23 from .coordinator
import IBeaconCoordinator
24 from .entity
import IBeaconEntity
27 @dataclass(frozen=True, kw_only=True)
29 """Describes iBeacon sensor entity."""
31 value_fn: Callable[[iBeaconAdvertisement], str | int |
None]
34 SENSOR_DESCRIPTIONS = (
37 device_class=SensorDeviceClass.SIGNAL_STRENGTH,
38 native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
39 entity_registry_enabled_default=
False,
40 value_fn=
lambda ibeacon_advertisement: ibeacon_advertisement.rssi,
41 state_class=SensorStateClass.MEASUREMENT,
45 translation_key=
"power",
46 device_class=SensorDeviceClass.SIGNAL_STRENGTH,
47 native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
48 entity_registry_enabled_default=
False,
49 value_fn=
lambda ibeacon_advertisement: ibeacon_advertisement.power,
50 state_class=SensorStateClass.MEASUREMENT,
53 key=
"estimated_distance",
54 translation_key=
"estimated_distance",
55 native_unit_of_measurement=UnitOfLength.METERS,
56 value_fn=
lambda ibeacon_advertisement: ibeacon_advertisement.distance,
57 state_class=SensorStateClass.MEASUREMENT,
58 device_class=SensorDeviceClass.DISTANCE,
62 translation_key=
"vendor",
63 entity_registry_enabled_default=
False,
64 value_fn=
lambda ibeacon_advertisement: ibeacon_advertisement.vendor,
71 entry: IBeaconConfigEntry,
72 async_add_entities: AddEntitiesCallback,
74 """Set up sensors for iBeacon Tracker component."""
75 coordinator = entry.runtime_data
78 def _async_device_new(
81 ibeacon_advertisement: iBeaconAdvertisement,
83 """Signal a new device."""
90 ibeacon_advertisement,
92 for description
in SENSOR_DESCRIPTIONS
95 entry.async_on_unload(
101 """An iBeacon sensor entity."""
103 entity_description: IBeaconSensorEntityDescription
107 coordinator: IBeaconCoordinator,
108 description: IBeaconSensorEntityDescription,
110 device_unique_id: str,
111 ibeacon_advertisement: iBeaconAdvertisement,
113 """Initialize an iBeacon sensor entity."""
115 coordinator, identifier, device_unique_id, ibeacon_advertisement
123 ibeacon_advertisement: iBeaconAdvertisement,
138 """Return the state of the sensor."""
None _async_unavailable(self)
str|int|None native_value(self)
None __init__(self, IBeaconCoordinator coordinator, IBeaconSensorEntityDescription description, str identifier, str device_unique_id, iBeaconAdvertisement ibeacon_advertisement)
None _async_seen(self, iBeaconAdvertisement ibeacon_advertisement)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, IBeaconConfigEntry entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)