Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """The Flexit Nordic (BACnet) integration."""
2 
3 from collections.abc import Callable
4 from dataclasses import dataclass
5 
6 from flexit_bacnet import FlexitBACnet
7 
9  SensorDeviceClass,
10  SensorEntity,
11  SensorEntityDescription,
12  SensorStateClass,
13 )
14 from homeassistant.config_entries import ConfigEntry
15 from homeassistant.const import (
16  PERCENTAGE,
17  REVOLUTIONS_PER_MINUTE,
18  UnitOfPower,
19  UnitOfTemperature,
20  UnitOfTime,
21 )
22 from homeassistant.core import HomeAssistant
23 from homeassistant.helpers.entity_platform import AddEntitiesCallback
24 from homeassistant.helpers.typing import StateType
25 
26 from . import FlexitCoordinator
27 from .const import DOMAIN
28 from .entity import FlexitEntity
29 
30 
31 @dataclass(kw_only=True, frozen=True)
33  """Describes a Flexit sensor entity."""
34 
35  value_fn: Callable[[FlexitBACnet], float]
36 
37 
38 SENSOR_TYPES: tuple[FlexitSensorEntityDescription, ...] = (
40  key="outside_air_temperature",
41  device_class=SensorDeviceClass.TEMPERATURE,
42  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
43  translation_key="outside_air_temperature",
44  value_fn=lambda data: data.outside_air_temperature,
45  ),
47  key="supply_air_temperature",
48  device_class=SensorDeviceClass.TEMPERATURE,
49  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
50  translation_key="supply_air_temperature",
51  value_fn=lambda data: data.supply_air_temperature,
52  ),
54  key="exhaust_air_temperature",
55  device_class=SensorDeviceClass.TEMPERATURE,
56  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
57  translation_key="exhaust_air_temperature",
58  value_fn=lambda data: data.exhaust_air_temperature,
59  ),
61  key="extract_air_temperature",
62  device_class=SensorDeviceClass.TEMPERATURE,
63  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
64  translation_key="extract_air_temperature",
65  value_fn=lambda data: data.extract_air_temperature,
66  ),
68  key="room_temperature",
69  device_class=SensorDeviceClass.TEMPERATURE,
70  native_unit_of_measurement=UnitOfTemperature.CELSIUS,
71  translation_key="room_temperature",
72  value_fn=lambda data: data.room_temperature,
73  ),
75  key="fireplace_ventilation_remaining_duration",
76  device_class=SensorDeviceClass.DURATION,
77  state_class=SensorStateClass.MEASUREMENT,
78  native_unit_of_measurement=UnitOfTime.MINUTES,
79  translation_key="fireplace_ventilation_remaining_duration",
80  value_fn=lambda data: data.fireplace_ventilation_remaining_duration,
81  suggested_display_precision=0,
82  ),
84  key="rapid_ventilation_remaining_duration",
85  device_class=SensorDeviceClass.DURATION,
86  state_class=SensorStateClass.MEASUREMENT,
87  native_unit_of_measurement=UnitOfTime.MINUTES,
88  translation_key="rapid_ventilation_remaining_duration",
89  value_fn=lambda data: data.rapid_ventilation_remaining_duration,
90  suggested_display_precision=0,
91  ),
93  key="supply_air_fan_control_signal",
94  state_class=SensorStateClass.MEASUREMENT,
95  translation_key="supply_air_fan_control_signal",
96  native_unit_of_measurement=PERCENTAGE,
97  value_fn=lambda data: data.supply_air_fan_control_signal,
98  ),
100  key="supply_air_fan_rpm",
101  state_class=SensorStateClass.MEASUREMENT,
102  native_unit_of_measurement=REVOLUTIONS_PER_MINUTE,
103  translation_key="supply_air_fan_rpm",
104  value_fn=lambda data: data.supply_air_fan_rpm,
105  ),
107  key="exhaust_air_fan_control_signal",
108  state_class=SensorStateClass.MEASUREMENT,
109  translation_key="exhaust_air_fan_control_signal",
110  value_fn=lambda data: data.exhaust_air_fan_control_signal,
111  native_unit_of_measurement=PERCENTAGE,
112  ),
114  key="exhaust_air_fan_rpm",
115  state_class=SensorStateClass.MEASUREMENT,
116  native_unit_of_measurement=REVOLUTIONS_PER_MINUTE,
117  translation_key="exhaust_air_fan_rpm",
118  value_fn=lambda data: data.exhaust_air_fan_rpm,
119  ),
121  key="electric_heater_power",
122  device_class=SensorDeviceClass.POWER,
123  native_unit_of_measurement=UnitOfPower.KILO_WATT,
124  translation_key="electric_heater_power",
125  value_fn=lambda data: data.electric_heater_power,
126  suggested_display_precision=3,
127  ),
129  key="air_filter_operating_time",
130  state_class=SensorStateClass.TOTAL_INCREASING,
131  suggested_display_precision=0,
132  native_unit_of_measurement=UnitOfTime.HOURS,
133  translation_key="air_filter_operating_time",
134  value_fn=lambda data: data.air_filter_operating_time,
135  ),
137  key="heat_exchanger_efficiency",
138  state_class=SensorStateClass.MEASUREMENT,
139  native_unit_of_measurement=PERCENTAGE,
140  translation_key="heat_exchanger_efficiency",
141  value_fn=lambda data: data.heat_exchanger_efficiency,
142  ),
144  key="heat_exchanger_speed",
145  state_class=SensorStateClass.MEASUREMENT,
146  native_unit_of_measurement=PERCENTAGE,
147  translation_key="heat_exchanger_speed",
148  value_fn=lambda data: data.heat_exchanger_speed,
149  ),
150 )
151 
152 
154  hass: HomeAssistant,
155  config_entry: ConfigEntry,
156  async_add_entities: AddEntitiesCallback,
157 ) -> None:
158  """Set up Flexit (bacnet) sensor from a config entry."""
159  coordinator: FlexitCoordinator = hass.data[DOMAIN][config_entry.entry_id]
160 
162  FlexitSensor(coordinator, description) for description in SENSOR_TYPES
163  )
164 
165 
167  """Representation of a Flexit (bacnet) Sensor."""
168 
169  entity_description: FlexitSensorEntityDescription
170 
171  def __init__(
172  self,
173  coordinator: FlexitCoordinator,
174  entity_description: FlexitSensorEntityDescription,
175  ) -> None:
176  """Initialize Flexit (bacnet) sensor."""
177  super().__init__(coordinator)
178 
179  self.entity_descriptionentity_description = entity_description
180  self._attr_unique_id_attr_unique_id = (
181  f"{coordinator.device.serial_number}-{entity_description.key}"
182  )
183 
184  @property
185  def native_value(self) -> StateType:
186  """Return value of sensor."""
187  return self.entity_descriptionentity_description.value_fn(self.coordinator.data)
None __init__(self, FlexitCoordinator coordinator, FlexitSensorEntityDescription entity_description)
Definition: sensor.py:175
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:157