1 """Support for Big Ass Fans sensors."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from typing
import cast
9 from aiobafi6
import Device
14 SensorEntityDescription,
19 REVOLUTIONS_PER_MINUTE,
26 from .
import BAFConfigEntry
27 from .entity
import BAFDescriptionEntity
30 @dataclass(frozen=True, kw_only=True)
32 SensorEntityDescription,
34 """Class describing BAF sensor entities."""
36 value_fn: Callable[[Device], int | float | str |
None]
39 AUTO_COMFORT_SENSORS = (
42 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
43 device_class=SensorDeviceClass.TEMPERATURE,
44 state_class=SensorStateClass.MEASUREMENT,
45 value_fn=
lambda device: cast(float |
None, device.temperature),
49 DEFINED_ONLY_SENSORS = (
52 native_unit_of_measurement=PERCENTAGE,
53 device_class=SensorDeviceClass.HUMIDITY,
54 state_class=SensorStateClass.MEASUREMENT,
55 value_fn=
lambda device: cast(float |
None, device.humidity),
62 translation_key=
"current_rpm",
63 native_unit_of_measurement=REVOLUTIONS_PER_MINUTE,
64 entity_registry_enabled_default=
False,
65 entity_category=EntityCategory.DIAGNOSTIC,
66 value_fn=
lambda device: cast(int |
None, device.current_rpm),
70 translation_key=
"target_rpm",
71 native_unit_of_measurement=REVOLUTIONS_PER_MINUTE,
72 entity_registry_enabled_default=
False,
73 entity_category=EntityCategory.DIAGNOSTIC,
74 value_fn=
lambda device: cast(int |
None, device.target_rpm),
78 translation_key=
"wifi_ssid",
79 entity_registry_enabled_default=
False,
80 entity_category=EntityCategory.DIAGNOSTIC,
81 value_fn=
lambda device: cast(int |
None, device.wifi_ssid),
85 translation_key=
"ip_address",
86 entity_registry_enabled_default=
False,
87 entity_category=EntityCategory.DIAGNOSTIC,
88 value_fn=
lambda device: cast(str |
None, device.ip_address),
95 entry: BAFConfigEntry,
96 async_add_entities: AddEntitiesCallback,
98 """Set up BAF fan sensors."""
99 device = entry.runtime_data
100 sensors_descriptions: list[BAFSensorDescription] = [
102 for description
in DEFINED_ONLY_SENSORS
103 if getattr(device, description.key)
105 if device.has_auto_comfort:
106 sensors_descriptions.extend(AUTO_COMFORT_SENSORS)
108 sensors_descriptions.extend(FAN_SENSORS)
110 BAFSensor(device, description)
for description
in sensors_descriptions
117 entity_description: BAFSensorDescription
121 """Update attrs from device."""
None _async_update_attrs(self)
None async_setup_entry(HomeAssistant hass, BAFConfigEntry entry, AddEntitiesCallback async_add_entities)