1 """Sensor data of the Renson ventilation unit."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
7 from renson_endura_delta.field_enum
import (
10 BREEZE_TEMPERATURE_FIELD,
12 BYPASS_TEMPERATURE_FIELD,
17 CURRENT_AIRFLOW_EXTRACT_FIELD,
18 CURRENT_AIRFLOW_INGOING_FIELD,
25 NIGHT_POLLUTION_FIELD,
29 from renson_endura_delta.renson
import RensonVentilation
34 SensorEntityDescription,
39 CONCENTRATION_PARTS_PER_MILLION,
48 from .
import RensonData
49 from .const
import DOMAIN
50 from .coordinator
import RensonCoordinator
51 from .entity
import RensonEntity
54 @dataclass(frozen=True, kw_only=True)
56 """Description of a Renson sensor."""
62 SENSORS: tuple[RensonSensorEntityDescription, ...] = (
64 key=
"CO2_QUALITY_FIELD",
65 translation_key=
"co2_quality_category",
66 field=CO2_QUALITY_FIELD,
68 device_class=SensorDeviceClass.ENUM,
69 options=[
"good",
"bad",
"poor"],
72 key=
"AIR_QUALITY_FIELD",
73 translation_key=
"air_quality_category",
74 field=AIR_QUALITY_FIELD,
76 device_class=SensorDeviceClass.ENUM,
77 options=[
"good",
"bad",
"poor"],
83 state_class=SensorStateClass.MEASUREMENT,
84 device_class=SensorDeviceClass.CO2,
85 native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
89 translation_key=
"air_quality",
90 field=AIR_QUALITY_FIELD,
91 state_class=SensorStateClass.MEASUREMENT,
93 native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
96 key=
"CURRENT_LEVEL_FIELD",
97 translation_key=
"ventilation_level",
98 field=CURRENT_LEVEL_FIELD,
100 device_class=SensorDeviceClass.ENUM,
101 options=[
"off",
"level1",
"level2",
"level3",
"level4",
"breeze",
"holiday"],
104 key=
"CURRENT_AIRFLOW_EXTRACT_FIELD",
105 translation_key=
"total_airflow_out",
106 field=CURRENT_AIRFLOW_EXTRACT_FIELD,
108 state_class=SensorStateClass.MEASUREMENT,
109 native_unit_of_measurement=UnitOfVolumeFlowRate.CUBIC_METERS_PER_HOUR,
112 key=
"CURRENT_AIRFLOW_INGOING_FIELD",
113 translation_key=
"total_airflow_in",
114 field=CURRENT_AIRFLOW_INGOING_FIELD,
116 state_class=SensorStateClass.MEASUREMENT,
117 native_unit_of_measurement=UnitOfVolumeFlowRate.CUBIC_METERS_PER_HOUR,
120 key=
"OUTDOOR_TEMP_FIELD",
121 translation_key=
"outdoor_air_temperature",
122 field=OUTDOOR_TEMP_FIELD,
124 device_class=SensorDeviceClass.TEMPERATURE,
125 state_class=SensorStateClass.MEASUREMENT,
126 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
129 key=
"INDOOR_TEMP_FIELD",
130 translation_key=
"extract_air_temperature",
131 field=INDOOR_TEMP_FIELD,
133 device_class=SensorDeviceClass.TEMPERATURE,
134 state_class=SensorStateClass.MEASUREMENT,
135 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
138 key=
"FILTER_REMAIN_FIELD",
139 translation_key=
"filter_change",
140 field=FILTER_REMAIN_FIELD,
142 device_class=SensorDeviceClass.DURATION,
143 state_class=SensorStateClass.MEASUREMENT,
144 native_unit_of_measurement=UnitOfTime.DAYS,
147 key=
"HUMIDITY_FIELD",
148 field=HUMIDITY_FIELD,
150 device_class=SensorDeviceClass.HUMIDITY,
151 state_class=SensorStateClass.MEASUREMENT,
152 native_unit_of_measurement=PERCENTAGE,
155 key=
"MANUAL_LEVEL_FIELD",
156 translation_key=
"manual_level",
157 field=MANUAL_LEVEL_FIELD,
159 device_class=SensorDeviceClass.ENUM,
160 options=[
"off",
"level1",
"level2",
"level3",
"level4",
"breeze",
"holiday"],
163 key=
"BREEZE_TEMPERATURE_FIELD",
164 translation_key=
"breeze_temperature",
165 field=BREEZE_TEMPERATURE_FIELD,
167 device_class=SensorDeviceClass.TEMPERATURE,
168 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
171 key=
"BREEZE_LEVEL_FIELD",
172 translation_key=
"breeze_level",
173 field=BREEZE_LEVEL_FIELD,
175 device_class=SensorDeviceClass.ENUM,
176 options=[
"off",
"level1",
"level2",
"level3",
"level4",
"breeze"],
179 key=
"DAY_POLLUTION_FIELD",
180 translation_key=
"day_pollution_level",
181 field=DAY_POLLUTION_FIELD,
183 entity_registry_enabled_default=
False,
184 device_class=SensorDeviceClass.ENUM,
185 options=[
"level1",
"level2",
"level3",
"level4"],
188 key=
"NIGHT_POLLUTION_FIELD",
189 translation_key=
"co2_quality_category",
190 field=NIGHT_POLLUTION_FIELD,
192 entity_registry_enabled_default=
False,
193 device_class=SensorDeviceClass.ENUM,
194 options=[
"level1",
"level2",
"level3",
"level4"],
197 key=
"CO2_THRESHOLD_FIELD",
198 translation_key=
"co2_threshold",
199 field=CO2_THRESHOLD_FIELD,
201 native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
202 entity_registry_enabled_default=
False,
205 key=
"CO2_HYSTERESIS_FIELD",
206 translation_key=
"co2_hysteresis",
207 field=CO2_HYSTERESIS_FIELD,
209 native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
210 entity_registry_enabled_default=
False,
213 key=
"BYPASS_TEMPERATURE_FIELD",
214 translation_key=
"bypass_activation_temperature",
215 field=BYPASS_TEMPERATURE_FIELD,
217 device_class=SensorDeviceClass.TEMPERATURE,
218 state_class=SensorStateClass.MEASUREMENT,
219 native_unit_of_measurement=UnitOfTemperature.CELSIUS,
222 key=
"BYPASS_LEVEL_FIELD",
223 translation_key=
"bypass_level",
224 field=BYPASS_LEVEL_FIELD,
226 device_class=SensorDeviceClass.POWER_FACTOR,
227 state_class=SensorStateClass.MEASUREMENT,
228 native_unit_of_measurement=PERCENTAGE,
234 """Get a sensor data from the Renson API and store it in the state of the class."""
236 _attr_has_entity_name =
True
240 description: RensonSensorEntityDescription,
241 api: RensonVentilation,
242 coordinator: RensonCoordinator,
244 """Initialize class."""
245 super().
__init__(description.key, api, coordinator)
255 """Handle updated data from the coordinator."""
256 all_data = self.coordinator.data
258 value = self.
apiapiapi.get_field_value(all_data, self.
fieldfield.name)
262 elif self.
entity_descriptionentity_description.device_class == SensorDeviceClass.ENUM:
274 config_entry: ConfigEntry,
275 async_add_entities: AddEntitiesCallback,
277 """Set up the Renson sensor platform."""
279 data: RensonData = hass.data[DOMAIN][config_entry.entry_id]
282 RensonSensor(description, data.api, data.coordinator)
for description
in SENSORS
None __init__(self, RensonSensorEntityDescription description, RensonVentilation api, RensonCoordinator coordinator)
None _handle_coordinator_update(self)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)