Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Big Ass Fans sensors."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from dataclasses import dataclass
7 from typing import cast
8 
9 from aiobafi6 import Device
10 
12  SensorDeviceClass,
13  SensorEntity,
14  SensorEntityDescription,
15  SensorStateClass,
16 )
17 from homeassistant.const import (
18  PERCENTAGE,
19  REVOLUTIONS_PER_MINUTE,
20  EntityCategory,
21  UnitOfTemperature,
22 )
23 from homeassistant.core import HomeAssistant, callback
24 from homeassistant.helpers.entity_platform import AddEntitiesCallback
25 
26 from . import BAFConfigEntry
27 from .entity import BAFDescriptionEntity
28 
29 
30 @dataclass(frozen=True, kw_only=True)
32  SensorEntityDescription,
33 ):
34  """Class describing BAF sensor entities."""
35 
36  value_fn: Callable[[Device], int | float | str | None]
37 
38 
39 AUTO_COMFORT_SENSORS = (
41  key="temperature",
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),
46  ),
47 )
48 
49 DEFINED_ONLY_SENSORS = (
51  key="humidity",
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),
56  ),
57 )
58 
59 FAN_SENSORS = (
61  key="current_rpm",
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),
67  ),
69  key="target_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),
75  ),
77  key="wifi_ssid",
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),
82  ),
84  key="ip_address",
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),
89  ),
90 )
91 
92 
94  hass: HomeAssistant,
95  entry: BAFConfigEntry,
96  async_add_entities: AddEntitiesCallback,
97 ) -> None:
98  """Set up BAF fan sensors."""
99  device = entry.runtime_data
100  sensors_descriptions: list[BAFSensorDescription] = [
101  description
102  for description in DEFINED_ONLY_SENSORS
103  if getattr(device, description.key)
104  ]
105  if device.has_auto_comfort:
106  sensors_descriptions.extend(AUTO_COMFORT_SENSORS)
107  if device.has_fan:
108  sensors_descriptions.extend(FAN_SENSORS)
110  BAFSensor(device, description) for description in sensors_descriptions
111  )
112 
113 
115  """BAF sensor."""
116 
117  entity_description: BAFSensorDescription
118 
119  @callback
120  def _async_update_attrs(self) -> None:
121  """Update attrs from device."""
122  self._attr_native_value_attr_native_value = self.entity_descriptionentity_description.value_fn(self._device_device)
None async_setup_entry(HomeAssistant hass, BAFConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:97