1 """The Flexit Nordic (BACnet) integration."""
3 from collections.abc
import Callable
4 from dataclasses
import dataclass
6 from flexit_bacnet
import FlexitBACnet
11 SensorEntityDescription,
17 REVOLUTIONS_PER_MINUTE,
26 from .
import FlexitCoordinator
27 from .const
import DOMAIN
28 from .entity
import FlexitEntity
31 @dataclass(kw_only=True, frozen=True)
33 """Describes a Flexit sensor entity."""
35 value_fn: Callable[[FlexitBACnet], float]
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
155 config_entry: ConfigEntry,
156 async_add_entities: AddEntitiesCallback,
158 """Set up Flexit (bacnet) sensor from a config entry."""
159 coordinator: FlexitCoordinator = hass.data[DOMAIN][config_entry.entry_id]
162 FlexitSensor(coordinator, description)
for description
in SENSOR_TYPES
167 """Representation of a Flexit (bacnet) Sensor."""
169 entity_description: FlexitSensorEntityDescription
173 coordinator: FlexitCoordinator,
174 entity_description: FlexitSensorEntityDescription,
176 """Initialize Flexit (bacnet) sensor."""
181 f
"{coordinator.device.serial_number}-{entity_description.key}"
186 """Return value of sensor."""
None __init__(self, FlexitCoordinator coordinator, FlexitSensorEntityDescription entity_description)
StateType native_value(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)