1 """Support for thermopro ble sensors."""
3 from __future__
import annotations
5 from thermopro_ble
import (
7 SensorDeviceClass
as ThermoProSensorDeviceClass,
12 from homeassistant
import config_entries
14 PassiveBluetoothDataProcessor,
15 PassiveBluetoothDataUpdate,
16 PassiveBluetoothEntityKey,
17 PassiveBluetoothProcessorCoordinator,
18 PassiveBluetoothProcessorEntity,
23 SensorEntityDescription,
28 SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
36 from .const
import DOMAIN
38 SENSOR_DESCRIPTIONS = {
40 ThermoProSensorDeviceClass.TEMPERATURE,
43 key=f
"{ThermoProSensorDeviceClass.TEMPERATURE}_{Units.TEMP_CELSIUS}",
44 device_class=SensorDeviceClass.TEMPERATURE,
45 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
46 state_class=SensorStateClass.MEASUREMENT,
49 key=f
"{ThermoProSensorDeviceClass.HUMIDITY}_{Units.PERCENTAGE}",
50 device_class=SensorDeviceClass.HUMIDITY,
51 native_unit_of_measurement=PERCENTAGE,
52 state_class=SensorStateClass.MEASUREMENT,
55 ThermoProSensorDeviceClass.SIGNAL_STRENGTH,
56 Units.SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
58 key=f
"{ThermoProSensorDeviceClass.SIGNAL_STRENGTH}_{Units.SIGNAL_STRENGTH_DECIBELS_MILLIWATT}",
59 device_class=SensorDeviceClass.SIGNAL_STRENGTH,
60 native_unit_of_measurement=SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
61 state_class=SensorStateClass.MEASUREMENT,
62 entity_registry_enabled_default=
False,
65 ThermoProSensorDeviceClass.BATTERY,
68 key=f
"{ThermoProSensorDeviceClass.BATTERY}_{Units.PERCENTAGE}",
69 device_class=SensorDeviceClass.BATTERY,
70 native_unit_of_measurement=PERCENTAGE,
71 state_class=SensorStateClass.MEASUREMENT,
72 entity_category=EntityCategory.DIAGNOSTIC,
78 device_key: DeviceKey,
79 ) -> PassiveBluetoothEntityKey:
80 """Convert a device key to an entity key."""
85 sensor_update: SensorUpdate,
86 ) -> PassiveBluetoothDataUpdate:
87 """Convert a sensor update to a bluetooth data update."""
91 for device_id, device_info
in sensor_update.devices.items()
95 (description.device_class, description.native_unit_of_measurement)
97 for device_key, description
in sensor_update.entity_descriptions.items()
98 if description.device_class
and description.native_unit_of_measurement
102 for device_key, sensor_values
in sensor_update.entity_values.items()
106 for device_key, sensor_values
in sensor_update.entity_values.items()
114 async_add_entities: AddEntitiesCallback,
116 """Set up the ThermoPro BLE sensors."""
117 coordinator: PassiveBluetoothProcessorCoordinator = hass.data[DOMAIN][
121 entry.async_on_unload(
122 processor.async_add_entities_listener(
123 ThermoProBluetoothSensorEntity, async_add_entities
126 entry.async_on_unload(coordinator.async_register_processor(processor))
130 PassiveBluetoothProcessorEntity[
131 PassiveBluetoothDataProcessor[float | int |
None, SensorUpdate]
135 """Representation of a thermopro ble sensor."""
139 """Return the native value."""
140 return self.processor.entity_data.get(self.entity_key)
int|float|None native_value(self)
None async_setup_entry(HomeAssistant hass, config_entries.ConfigEntry entry, AddEntitiesCallback async_add_entities)
PassiveBluetoothEntityKey _device_key_to_bluetooth_entity_key(DeviceKey device_key)
PassiveBluetoothDataUpdate sensor_update_to_bluetooth_data_update(SensorUpdate sensor_update)
DeviceInfo sensor_device_info_to_hass_device_info(SensorDeviceInfo sensor_device_info)