1
0
mirror of https://github.com/home-assistant/core.git synced 2026-04-02 16:36:08 +01:00
Files
core/homeassistant/components/compit/sensor.py
2026-02-24 21:49:47 +01:00

1030 lines
41 KiB
Python

"""Sensor platform for Compit integration."""
from dataclasses import dataclass
from compit_inext_api.consts import CompitParameter
from homeassistant.components.sensor import (
EntityCategory,
SensorDeviceClass,
SensorEntity,
SensorEntityDescription,
SensorStateClass,
)
from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_MILLION,
PERCENTAGE,
UnitOfElectricCurrent,
UnitOfEnergy,
UnitOfPower,
UnitOfTemperature,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import DOMAIN, MANUFACTURER_NAME
from .coordinator import CompitConfigEntry, CompitDataUpdateCoordinator
PARALLEL_UPDATES = 0
NO_SENSOR = "no_sensor"
DESCRIPTIONS: dict[CompitParameter, SensorEntityDescription] = {
CompitParameter.ACTUAL_BUFFER_TEMP: SensorEntityDescription(
key=CompitParameter.ACTUAL_BUFFER_TEMP.value,
translation_key="actual_buffer_temp",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.ACTUAL_DHW_TEMP: SensorEntityDescription(
key=CompitParameter.ACTUAL_DHW_TEMP.value,
translation_key="actual_dhw_temp",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.ACTUAL_HC1_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.ACTUAL_HC1_TEMPERATURE.value,
translation_key="actual_hc_temperature_zone",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"zone": "1"},
),
CompitParameter.ACTUAL_HC2_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.ACTUAL_HC2_TEMPERATURE.value,
translation_key="actual_hc_temperature_zone",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"zone": "2"},
),
CompitParameter.ACTUAL_HC3_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.ACTUAL_HC3_TEMPERATURE.value,
translation_key="actual_hc_temperature_zone",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"zone": "3"},
),
CompitParameter.ACTUAL_HC4_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.ACTUAL_HC4_TEMPERATURE.value,
translation_key="actual_hc_temperature_zone",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"zone": "4"},
),
CompitParameter.ACTUAL_UPPER_SOURCE_TEMP: SensorEntityDescription(
key=CompitParameter.ACTUAL_UPPER_SOURCE_TEMP.value,
translation_key="actual_upper_source_temp",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.ALARM_CODE: SensorEntityDescription(
key=CompitParameter.ALARM_CODE.value,
translation_key="alarm_code",
device_class=SensorDeviceClass.ENUM,
entity_category=EntityCategory.DIAGNOSTIC,
options=[
"no_alarm",
"damaged_outdoor_temp",
"damaged_return_temp",
"no_battery",
"discharged_battery",
"low_battery_level",
"battery_fault",
"no_pump",
"pump_fault",
"internal_af",
"no_power",
],
),
CompitParameter.BATTERY_LEVEL: SensorEntityDescription(
key=CompitParameter.BATTERY_LEVEL.value,
device_class=SensorDeviceClass.BATTERY,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=PERCENTAGE,
),
CompitParameter.BOILER_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.BOILER_TEMPERATURE.value,
translation_key="boiler_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.BUFFER_RETURN_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.BUFFER_RETURN_TEMPERATURE.value,
translation_key="buffer_return_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.BUFFER_SET_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.BUFFER_SET_TEMPERATURE.value,
translation_key="buffer_set_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.CALCULATED_BUFFER_TEMP: SensorEntityDescription(
key=CompitParameter.CALCULATED_BUFFER_TEMP.value,
translation_key="calculated_buffer_temp",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.CALCULATED_DHW_TEMP: SensorEntityDescription(
key=CompitParameter.CALCULATED_DHW_TEMP.value,
translation_key="calculated_dhw_temp",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.CALCULATED_HEATING_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.CALCULATED_HEATING_TEMPERATURE.value,
translation_key="calculated_heating_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.CALCULATED_TARGET_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.CALCULATED_TARGET_TEMPERATURE.value,
translation_key="calculated_target_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.CALCULATED_UPPER_SOURCE_TEMP: SensorEntityDescription(
key=CompitParameter.CALCULATED_UPPER_SOURCE_TEMP.value,
translation_key="calculated_upper_source_temp",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.CHARGING_POWER: SensorEntityDescription(
key=CompitParameter.CHARGING_POWER.value,
translation_key="charging_power",
device_class=SensorDeviceClass.CURRENT,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfElectricCurrent.MILLIAMPERE,
),
CompitParameter.CIRCUIT_TARGET_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.CIRCUIT_TARGET_TEMPERATURE.value,
translation_key="circuit_target_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.CO2_LEVEL: SensorEntityDescription(
key=CompitParameter.CO2_LEVEL.value,
device_class=SensorDeviceClass.CO2,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
),
CompitParameter.CO2_PERCENT: SensorEntityDescription(
key=CompitParameter.CO2_PERCENT.value,
translation_key="co2_percent",
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=PERCENTAGE,
),
CompitParameter.COLLECTOR_POWER: SensorEntityDescription(
key=CompitParameter.COLLECTOR_POWER.value,
translation_key="collector_power",
device_class=SensorDeviceClass.POWER,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfPower.KILO_WATT,
),
CompitParameter.COLLECTOR_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.COLLECTOR_TEMPERATURE.value,
translation_key="collector_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.DHW_MEASURED_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.DHW_MEASURED_TEMPERATURE.value,
translation_key="dhw_measured_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.DHW_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.DHW_TEMPERATURE.value,
translation_key="dhw_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.ENERGY_CONSUMPTION: SensorEntityDescription(
key=CompitParameter.ENERGY_CONSUMPTION.value,
translation_key="energy_consumption",
device_class=SensorDeviceClass.POWER,
native_unit_of_measurement=UnitOfPower.MEGA_WATT,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
),
CompitParameter.ENERGY_SGREADY_YESTERDAY: SensorEntityDescription(
key=CompitParameter.ENERGY_SGREADY_YESTERDAY.value,
translation_key="energy_smart_grid_yesterday",
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
),
CompitParameter.ENERGY_TODAY: SensorEntityDescription(
key=CompitParameter.ENERGY_TODAY.value,
translation_key="energy_today",
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
),
CompitParameter.ENERGY_TOTAL: SensorEntityDescription(
key=CompitParameter.ENERGY_TOTAL.value,
translation_key="energy_total",
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL_INCREASING,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
),
CompitParameter.ENERGY_YESTERDAY: SensorEntityDescription(
key=CompitParameter.ENERGY_YESTERDAY.value,
translation_key="energy_yesterday",
device_class=SensorDeviceClass.ENERGY,
state_class=SensorStateClass.TOTAL,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
),
CompitParameter.FUEL_LEVEL: SensorEntityDescription(
key=CompitParameter.FUEL_LEVEL.value,
translation_key="fuel_level",
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=PERCENTAGE,
),
CompitParameter.HEATING1_TARGET_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.HEATING1_TARGET_TEMPERATURE.value,
translation_key="heating_target_temperature_zone",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"zone": "1"},
),
CompitParameter.HEATING2_TARGET_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.HEATING2_TARGET_TEMPERATURE.value,
translation_key="heating_target_temperature_zone",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"zone": "2"},
),
CompitParameter.HEATING3_TARGET_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.HEATING3_TARGET_TEMPERATURE.value,
translation_key="heating_target_temperature_zone",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"zone": "3"},
),
CompitParameter.HEATING4_TARGET_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.HEATING4_TARGET_TEMPERATURE.value,
translation_key="heating_target_temperature_zone",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"zone": "4"},
),
CompitParameter.HUMIDITY: SensorEntityDescription(
key=CompitParameter.HUMIDITY.value,
device_class=SensorDeviceClass.HUMIDITY,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=PERCENTAGE,
),
CompitParameter.LOWER_SOURCE_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.LOWER_SOURCE_TEMPERATURE.value,
translation_key="lower_source_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.MIXER_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.MIXER_TEMPERATURE.value,
translation_key="mixer_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.MIXER1_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.MIXER1_TEMPERATURE.value,
translation_key="mixer_temperature_zone",
translation_placeholders={"zone": "1"},
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.MIXER2_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.MIXER2_TEMPERATURE.value,
translation_key="mixer_temperature_zone",
translation_placeholders={"zone": "2"},
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.OUTDOOR_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.OUTDOOR_TEMPERATURE.value,
translation_key="outdoor_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.PK1_FUNCTION: SensorEntityDescription(
key=CompitParameter.PK1_FUNCTION.value,
translation_key="pk1_function",
device_class=SensorDeviceClass.ENUM,
entity_category=EntityCategory.DIAGNOSTIC,
options=[
"off",
"on",
"nano_nr_1",
"nano_nr_2",
"nano_nr_3",
"nano_nr_4",
"nano_nr_5",
"winter",
"summer",
"cooling",
"holiday",
],
),
CompitParameter.PM1_LEVEL_MEASURED: SensorEntityDescription(
key=CompitParameter.PM1_LEVEL_MEASURED.value,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
device_class=SensorDeviceClass.PM1,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
),
CompitParameter.PM4_LEVEL_MEASURED: SensorEntityDescription(
key=CompitParameter.PM4_LEVEL_MEASURED.value,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
device_class=SensorDeviceClass.PM4,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
),
CompitParameter.PM10_LEVEL: SensorEntityDescription(
key=CompitParameter.PM10_LEVEL.value,
translation_key="pm10_level",
device_class=SensorDeviceClass.ENUM,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=False,
options=[NO_SENSOR, "normal", "warning", "exceeded"],
),
CompitParameter.PM10_MEASURED: SensorEntityDescription(
key=CompitParameter.PM10_MEASURED.value,
device_class=SensorDeviceClass.PM10,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
),
CompitParameter.PM25_LEVEL: SensorEntityDescription(
key=CompitParameter.PM25_LEVEL.value,
translation_key="pm25_level",
device_class=SensorDeviceClass.ENUM,
entity_category=EntityCategory.DIAGNOSTIC,
entity_registry_enabled_default=False,
options=[NO_SENSOR, "normal", "warning", "exceeded"],
),
CompitParameter.PM25_MEASURED: SensorEntityDescription(
key=CompitParameter.PM25_MEASURED.value,
device_class=SensorDeviceClass.PM25,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
),
CompitParameter.PROTECTION_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.PROTECTION_TEMPERATURE.value,
translation_key="protection_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.RETURN_CIRCUIT_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.RETURN_CIRCUIT_TEMPERATURE.value,
translation_key="return_circuit_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.TANK_BOTTOM_T2_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.TANK_BOTTOM_T2_TEMPERATURE.value,
translation_key="tank_temperature_t2",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.TANK_T4_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.TANK_T4_TEMPERATURE.value,
translation_key="tank_temperature_t4",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
translation_placeholders={"sensor": "T4"},
),
CompitParameter.TANK_TOP_T3_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.TANK_TOP_T3_TEMPERATURE.value,
translation_key="tank_temperature_t3",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.TARGET_HEATING_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.TARGET_HEATING_TEMPERATURE.value,
translation_key="target_heating_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.UPPER_SOURCE_TEMPERATURE: SensorEntityDescription(
key=CompitParameter.UPPER_SOURCE_TEMPERATURE.value,
translation_key="upper_source_temperature",
device_class=SensorDeviceClass.TEMPERATURE,
state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC,
native_unit_of_measurement=UnitOfTemperature.CELSIUS,
),
CompitParameter.VENTILATION_ALARM: SensorEntityDescription(
key=CompitParameter.VENTILATION_ALARM.value,
translation_key="ventilation_alarm",
device_class=SensorDeviceClass.ENUM,
entity_category=EntityCategory.DIAGNOSTIC,
options=[
"no_alarm",
"damaged_supply_sensor",
"damaged_exhaust_sensor",
"damaged_supply_and_exhaust_sensors",
"bot_alarm",
"damaged_preheater_sensor",
"ahu_alarm",
],
),
CompitParameter.VENTILATION_GEAR: SensorEntityDescription(
key=CompitParameter.VENTILATION_GEAR.value,
translation_key="ventilation_gear",
entity_category=EntityCategory.DIAGNOSTIC,
),
}
@dataclass(frozen=True, kw_only=True)
class CompitDeviceDescription:
"""Class to describe a Compit device."""
name: str
"""Name of the device."""
parameters: dict[CompitParameter, SensorEntityDescription]
"""Parameters of the device."""
DEVICE_DEFINITIONS: dict[int, CompitDeviceDescription] = {
3: CompitDeviceDescription(
name="R 810",
parameters={
CompitParameter.CALCULATED_HEATING_TEMPERATURE: DESCRIPTIONS[
CompitParameter.CALCULATED_HEATING_TEMPERATURE
],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
CompitParameter.RETURN_CIRCUIT_TEMPERATURE: DESCRIPTIONS[
CompitParameter.RETURN_CIRCUIT_TEMPERATURE
],
CompitParameter.TARGET_HEATING_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TARGET_HEATING_TEMPERATURE
],
},
),
5: CompitDeviceDescription(
name="R350 T3",
parameters={
CompitParameter.CALCULATED_TARGET_TEMPERATURE: DESCRIPTIONS[
CompitParameter.CALCULATED_TARGET_TEMPERATURE
],
CompitParameter.CIRCUIT_TARGET_TEMPERATURE: DESCRIPTIONS[
CompitParameter.CIRCUIT_TARGET_TEMPERATURE
],
CompitParameter.MIXER_TEMPERATURE: DESCRIPTIONS[
CompitParameter.MIXER_TEMPERATURE
],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
12: CompitDeviceDescription(
name="Nano Color",
parameters={
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
CompitParameter.PM10_LEVEL: DESCRIPTIONS[CompitParameter.PM10_LEVEL],
CompitParameter.PM25_LEVEL: DESCRIPTIONS[CompitParameter.PM25_LEVEL],
CompitParameter.VENTILATION_ALARM: DESCRIPTIONS[
CompitParameter.VENTILATION_ALARM
],
},
),
14: CompitDeviceDescription(
name="BWC310",
parameters={
CompitParameter.CALCULATED_HEATING_TEMPERATURE: DESCRIPTIONS[
CompitParameter.CALCULATED_HEATING_TEMPERATURE
],
CompitParameter.TARGET_HEATING_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TARGET_HEATING_TEMPERATURE
],
},
),
27: CompitDeviceDescription(
name="CO2 SHC",
parameters={
CompitParameter.HUMIDITY: DESCRIPTIONS[CompitParameter.HUMIDITY],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
34: CompitDeviceDescription(
name="r470",
parameters={
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
36: CompitDeviceDescription(
name="BioMax742",
parameters={
CompitParameter.BOILER_TEMPERATURE: DESCRIPTIONS[
CompitParameter.BOILER_TEMPERATURE
],
CompitParameter.FUEL_LEVEL: DESCRIPTIONS[CompitParameter.FUEL_LEVEL],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
44: CompitDeviceDescription(
name="SolarComp 951",
parameters={
CompitParameter.COLLECTOR_POWER: DESCRIPTIONS[
CompitParameter.COLLECTOR_POWER
],
CompitParameter.COLLECTOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.COLLECTOR_TEMPERATURE
],
CompitParameter.TANK_BOTTOM_T2_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TANK_BOTTOM_T2_TEMPERATURE
],
CompitParameter.TANK_T4_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TANK_T4_TEMPERATURE
],
CompitParameter.TANK_TOP_T3_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TANK_TOP_T3_TEMPERATURE
],
},
),
45: CompitDeviceDescription(
name="SolarComp971",
parameters={
CompitParameter.COLLECTOR_POWER: DESCRIPTIONS[
CompitParameter.COLLECTOR_POWER
],
CompitParameter.COLLECTOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.COLLECTOR_TEMPERATURE
],
CompitParameter.ENERGY_TODAY: DESCRIPTIONS[CompitParameter.ENERGY_TODAY],
CompitParameter.TANK_BOTTOM_T2_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TANK_BOTTOM_T2_TEMPERATURE
],
CompitParameter.TANK_TOP_T3_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TANK_TOP_T3_TEMPERATURE
],
},
),
53: CompitDeviceDescription(
name="R350.CWU",
parameters={
CompitParameter.CALCULATED_TARGET_TEMPERATURE: DESCRIPTIONS[
CompitParameter.CALCULATED_TARGET_TEMPERATURE
],
CompitParameter.DHW_MEASURED_TEMPERATURE: DESCRIPTIONS[
CompitParameter.DHW_MEASURED_TEMPERATURE
],
CompitParameter.ENERGY_SGREADY_YESTERDAY: DESCRIPTIONS[
CompitParameter.ENERGY_SGREADY_YESTERDAY
],
CompitParameter.ENERGY_TOTAL: DESCRIPTIONS[CompitParameter.ENERGY_TOTAL],
CompitParameter.ENERGY_YESTERDAY: DESCRIPTIONS[
CompitParameter.ENERGY_YESTERDAY
],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
58: CompitDeviceDescription(
name="SolarComp 971SD1",
parameters={
CompitParameter.ENERGY_CONSUMPTION: DESCRIPTIONS[
CompitParameter.ENERGY_CONSUMPTION
],
},
),
75: CompitDeviceDescription(
name="BioMax772",
parameters={
CompitParameter.BOILER_TEMPERATURE: DESCRIPTIONS[
CompitParameter.BOILER_TEMPERATURE
],
CompitParameter.FUEL_LEVEL: DESCRIPTIONS[CompitParameter.FUEL_LEVEL],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
78: CompitDeviceDescription(
name="SPM - Nano Color 2",
parameters={
CompitParameter.CO2_LEVEL: DESCRIPTIONS[CompitParameter.CO2_LEVEL],
CompitParameter.CO2_PERCENT: DESCRIPTIONS[CompitParameter.CO2_PERCENT],
CompitParameter.HUMIDITY: DESCRIPTIONS[CompitParameter.HUMIDITY],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
CompitParameter.PM1_LEVEL_MEASURED: DESCRIPTIONS[
CompitParameter.PM1_LEVEL_MEASURED
],
CompitParameter.PM4_LEVEL_MEASURED: DESCRIPTIONS[
CompitParameter.PM4_LEVEL_MEASURED
],
CompitParameter.PM10_MEASURED: DESCRIPTIONS[CompitParameter.PM10_MEASURED],
CompitParameter.PM25_MEASURED: DESCRIPTIONS[CompitParameter.PM25_MEASURED],
},
),
91: CompitDeviceDescription(
name="R770RS / R771RS ",
parameters={
CompitParameter.BOILER_TEMPERATURE: DESCRIPTIONS[
CompitParameter.BOILER_TEMPERATURE
],
CompitParameter.FUEL_LEVEL: DESCRIPTIONS[CompitParameter.FUEL_LEVEL],
CompitParameter.MIXER1_TEMPERATURE: DESCRIPTIONS[
CompitParameter.MIXER1_TEMPERATURE
],
CompitParameter.MIXER2_TEMPERATURE: DESCRIPTIONS[
CompitParameter.MIXER2_TEMPERATURE
],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
92: CompitDeviceDescription(
name="r490",
parameters={
CompitParameter.LOWER_SOURCE_TEMPERATURE: DESCRIPTIONS[
CompitParameter.LOWER_SOURCE_TEMPERATURE
],
CompitParameter.UPPER_SOURCE_TEMPERATURE: DESCRIPTIONS[
CompitParameter.UPPER_SOURCE_TEMPERATURE
],
},
),
99: CompitDeviceDescription(
name="SolarComp971C",
parameters={
CompitParameter.COLLECTOR_POWER: DESCRIPTIONS[
CompitParameter.COLLECTOR_POWER
],
CompitParameter.COLLECTOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.COLLECTOR_TEMPERATURE
],
CompitParameter.ENERGY_TODAY: DESCRIPTIONS[CompitParameter.ENERGY_TODAY],
CompitParameter.TANK_BOTTOM_T2_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TANK_BOTTOM_T2_TEMPERATURE
],
CompitParameter.TANK_TOP_T3_TEMPERATURE: DESCRIPTIONS[
CompitParameter.TANK_TOP_T3_TEMPERATURE
],
},
),
201: CompitDeviceDescription(
name="BioMax775",
parameters={
CompitParameter.BOILER_TEMPERATURE: DESCRIPTIONS[
CompitParameter.BOILER_TEMPERATURE
],
CompitParameter.FUEL_LEVEL: DESCRIPTIONS[CompitParameter.FUEL_LEVEL],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
210: CompitDeviceDescription(
name="EL750",
parameters={
CompitParameter.BOILER_TEMPERATURE: DESCRIPTIONS[
CompitParameter.BOILER_TEMPERATURE
],
CompitParameter.BUFFER_RETURN_TEMPERATURE: DESCRIPTIONS[
CompitParameter.BUFFER_RETURN_TEMPERATURE
],
CompitParameter.DHW_TEMPERATURE: DESCRIPTIONS[
CompitParameter.DHW_TEMPERATURE
],
},
),
212: CompitDeviceDescription(
name="BioMax742",
parameters={
CompitParameter.BOILER_TEMPERATURE: DESCRIPTIONS[
CompitParameter.BOILER_TEMPERATURE
],
CompitParameter.FUEL_LEVEL: DESCRIPTIONS[CompitParameter.FUEL_LEVEL],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
215: CompitDeviceDescription(
name="R480",
parameters={
CompitParameter.ACTUAL_BUFFER_TEMP: DESCRIPTIONS[
CompitParameter.ACTUAL_BUFFER_TEMP
],
CompitParameter.ACTUAL_DHW_TEMP: DESCRIPTIONS[
CompitParameter.ACTUAL_DHW_TEMP
],
CompitParameter.DHW_MEASURED_TEMPERATURE: DESCRIPTIONS[
CompitParameter.DHW_MEASURED_TEMPERATURE
],
},
),
221: CompitDeviceDescription(
name="R350.M",
parameters={
CompitParameter.MIXER_TEMPERATURE: DESCRIPTIONS[
CompitParameter.MIXER_TEMPERATURE
],
CompitParameter.PROTECTION_TEMPERATURE: DESCRIPTIONS[
CompitParameter.PROTECTION_TEMPERATURE
],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
222: CompitDeviceDescription(
name="R377B",
parameters={
CompitParameter.BUFFER_SET_TEMPERATURE: DESCRIPTIONS[
CompitParameter.BUFFER_SET_TEMPERATURE
],
},
),
223: CompitDeviceDescription(
name="Nano Color 2",
parameters={
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
CompitParameter.PM10_LEVEL: DESCRIPTIONS[CompitParameter.PM10_LEVEL],
CompitParameter.PM25_LEVEL: DESCRIPTIONS[CompitParameter.PM25_LEVEL],
CompitParameter.VENTILATION_ALARM: DESCRIPTIONS[
CompitParameter.VENTILATION_ALARM
],
CompitParameter.VENTILATION_GEAR: DESCRIPTIONS[
CompitParameter.VENTILATION_GEAR
],
},
),
224: CompitDeviceDescription(
name="R 900",
parameters={
CompitParameter.ACTUAL_BUFFER_TEMP: DESCRIPTIONS[
CompitParameter.ACTUAL_BUFFER_TEMP
],
CompitParameter.ACTUAL_HC1_TEMPERATURE: DESCRIPTIONS[
CompitParameter.ACTUAL_HC1_TEMPERATURE
],
CompitParameter.ACTUAL_HC2_TEMPERATURE: DESCRIPTIONS[
CompitParameter.ACTUAL_HC2_TEMPERATURE
],
CompitParameter.ACTUAL_HC3_TEMPERATURE: DESCRIPTIONS[
CompitParameter.ACTUAL_HC3_TEMPERATURE
],
CompitParameter.ACTUAL_HC4_TEMPERATURE: DESCRIPTIONS[
CompitParameter.ACTUAL_HC4_TEMPERATURE
],
CompitParameter.ACTUAL_DHW_TEMP: DESCRIPTIONS[
CompitParameter.ACTUAL_DHW_TEMP
],
CompitParameter.ACTUAL_UPPER_SOURCE_TEMP: DESCRIPTIONS[
CompitParameter.ACTUAL_UPPER_SOURCE_TEMP
],
CompitParameter.CALCULATED_BUFFER_TEMP: DESCRIPTIONS[
CompitParameter.CALCULATED_BUFFER_TEMP
],
CompitParameter.CALCULATED_DHW_TEMP: DESCRIPTIONS[
CompitParameter.CALCULATED_DHW_TEMP
],
CompitParameter.CALCULATED_UPPER_SOURCE_TEMP: DESCRIPTIONS[
CompitParameter.CALCULATED_UPPER_SOURCE_TEMP
],
CompitParameter.HEATING1_TARGET_TEMPERATURE: DESCRIPTIONS[
CompitParameter.HEATING1_TARGET_TEMPERATURE
],
CompitParameter.HEATING2_TARGET_TEMPERATURE: DESCRIPTIONS[
CompitParameter.HEATING2_TARGET_TEMPERATURE
],
CompitParameter.HEATING3_TARGET_TEMPERATURE: DESCRIPTIONS[
CompitParameter.HEATING3_TARGET_TEMPERATURE
],
CompitParameter.HEATING4_TARGET_TEMPERATURE: DESCRIPTIONS[
CompitParameter.HEATING4_TARGET_TEMPERATURE
],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
},
),
225: CompitDeviceDescription(
name="SPM - Nano Color",
parameters={
CompitParameter.HUMIDITY: DESCRIPTIONS[CompitParameter.HUMIDITY],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
CompitParameter.PM10_MEASURED: DESCRIPTIONS[CompitParameter.PM10_MEASURED],
CompitParameter.PM25_MEASURED: DESCRIPTIONS[CompitParameter.PM25_MEASURED],
},
),
226: CompitDeviceDescription(
name="AF-1",
parameters={
CompitParameter.ALARM_CODE: DESCRIPTIONS[CompitParameter.ALARM_CODE],
CompitParameter.BATTERY_LEVEL: DESCRIPTIONS[CompitParameter.BATTERY_LEVEL],
CompitParameter.CHARGING_POWER: DESCRIPTIONS[
CompitParameter.CHARGING_POWER
],
CompitParameter.OUTDOOR_TEMPERATURE: DESCRIPTIONS[
CompitParameter.OUTDOOR_TEMPERATURE
],
CompitParameter.RETURN_CIRCUIT_TEMPERATURE: DESCRIPTIONS[
CompitParameter.RETURN_CIRCUIT_TEMPERATURE
],
},
),
227: CompitDeviceDescription(
name="Combo",
parameters={
CompitParameter.PK1_FUNCTION: DESCRIPTIONS[CompitParameter.PK1_FUNCTION],
},
),
}
async def async_setup_entry(
hass: HomeAssistant,
entry: CompitConfigEntry,
async_add_devices: AddConfigEntryEntitiesCallback,
) -> None:
"""Set up Compit sensor entities from a config entry."""
coordinator = entry.runtime_data
sensor_entities = []
for device_id, device in coordinator.connector.all_devices.items():
device_definition = DEVICE_DEFINITIONS.get(device.definition.code)
if not device_definition:
continue
for code, entity_description in device_definition.parameters.items():
if (
entity_description.options
and NO_SENSOR in entity_description.options
and (
coordinator.connector.get_current_value(device_id, code)
== NO_SENSOR
)
):
continue
sensor_entities.append(
CompitSensor(
coordinator,
device_id,
device_definition.name,
code,
entity_description,
)
)
async_add_devices(sensor_entities)
class CompitSensor(CoordinatorEntity[CompitDataUpdateCoordinator], SensorEntity):
"""Representation of a Compit sensor entity."""
def __init__(
self,
coordinator: CompitDataUpdateCoordinator,
device_id: int,
device_name: str,
parameter_code: CompitParameter,
entity_description: SensorEntityDescription,
) -> None:
"""Initialize the sensor entity."""
super().__init__(coordinator)
self.device_id = device_id
self.entity_description = entity_description
self._attr_has_entity_name = True
self._attr_unique_id = f"{device_id}_{entity_description.key}"
self._attr_device_info = DeviceInfo(
identifiers={(DOMAIN, str(device_id))},
name=device_name,
manufacturer=MANUFACTURER_NAME,
model=device_name,
)
self.parameter_code = parameter_code
@property
def available(self) -> bool:
"""Return if entity is available."""
return (
super().available
and self.coordinator.connector.get_device(self.device_id) is not None
)
@property
def native_value(self) -> float | str | None:
"""Return the state of the sensor."""
value = self.coordinator.connector.get_current_value(
self.device_id, self.parameter_code
)
if (
isinstance(value, str)
and self.entity_description.options
and value in self.entity_description.options
):
return value
if isinstance(value, (int, float)):
return value
return None