1 """Support for Private BLE Device sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
8 from bluetooth_data_tools
import calculate_distance_meters
14 SensorEntityDescription,
19 SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
27 from .entity
import BasePrivateDeviceEntity
30 @dataclass(frozen=True, kw_only=True)
32 """Describes sensor entity."""
35 [HomeAssistant, bluetooth.BluetoothServiceInfoBleak], str | int | float |
None
39 SENSOR_DESCRIPTIONS = (
42 device_class=SensorDeviceClass.SIGNAL_STRENGTH,
43 native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
44 entity_registry_enabled_default=
False,
45 entity_category=EntityCategory.DIAGNOSTIC,
46 value_fn=
lambda _, service_info: service_info.advertisement.rssi,
47 state_class=SensorStateClass.MEASUREMENT,
51 translation_key=
"power",
52 device_class=SensorDeviceClass.SIGNAL_STRENGTH,
53 native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
54 entity_registry_enabled_default=
False,
55 entity_category=EntityCategory.DIAGNOSTIC,
56 value_fn=
lambda _, service_info: service_info.advertisement.tx_power,
57 state_class=SensorStateClass.MEASUREMENT,
60 key=
"estimated_distance",
61 translation_key=
"estimated_distance",
62 native_unit_of_measurement=UnitOfLength.METERS,
63 value_fn=
lambda _, service_info: service_info.advertisement
64 and service_info.advertisement.tx_power
65 and calculate_distance_meters(
66 service_info.advertisement.tx_power * 10, service_info.advertisement.rssi
68 state_class=SensorStateClass.MEASUREMENT,
69 device_class=SensorDeviceClass.DISTANCE,
70 suggested_display_precision=1,
73 key=
"estimated_broadcast_interval",
74 translation_key=
"estimated_broadcast_interval",
75 native_unit_of_measurement=UnitOfTime.SECONDS,
76 entity_registry_enabled_default=
False,
77 entity_category=EntityCategory.DIAGNOSTIC,
79 lambda hass, service_info: (
80 bluetooth.async_get_learned_advertising_interval(
81 hass, service_info.address
83 or bluetooth.async_get_fallback_availability_interval(
84 hass, service_info.address
86 or bluetooth.FALLBACK_MAXIMUM_STALE_ADVERTISEMENT_SECONDS
89 suggested_display_precision=1,
95 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
97 """Set up sensors for Private BLE component."""
100 for description
in SENSOR_DESCRIPTIONS
105 """A sensor entity."""
107 entity_description: PrivateDeviceSensorEntityDescription
111 config_entry: ConfigEntry,
112 entity_description: PrivateDeviceSensorEntityDescription,
114 """Initialize an sensor entity."""
122 service_info: bluetooth.BluetoothServiceInfoBleak,
123 change: bluetooth.BluetoothChange,
132 self, service_info: bluetooth.BluetoothServiceInfoBleak
140 """Return the state of the sensor."""
None _async_track_service_info(self, bluetooth.BluetoothServiceInfoBleak service_info, bluetooth.BluetoothChange change)
str|int|float|None native_value(self)
None _async_track_unavailable(self, bluetooth.BluetoothServiceInfoBleak service_info)
None __init__(self, ConfigEntry config_entry, PrivateDeviceSensorEntityDescription entity_description)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)