From 70c43f74bc27ef728d2e599697d3c69254dce1d9 Mon Sep 17 00:00:00 2001 From: Webpatrick Date: Fri, 4 Sep 2026 11:42:41 +0200 Subject: [PATCH] Fix sensor device and state classes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Align Home Assistant sensor metadata for power, pressure, flow, and temperature values --- custom_components/intergas_local/sensor.py | 42 +++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/custom_components/intergas_local/sensor.py b/custom_components/intergas_local/sensor.py index 0dcd370..6145174 100644 --- a/custom_components/intergas_local/sensor.py +++ b/custom_components/intergas_local/sensor.py @@ -116,37 +116,37 @@ def _mode_name(data: dict[str, Any], key: str, lookup: dict[int, str]) -> str | SENSOR_DEFINITIONS: list[XtendSensorSpec] = [ XtendSensorSpec("4133", "xtend_errorCode", lambda d: _mode_name(d, "4133", ERROR_CODES), icon="mdi:alert-circle-outline", entity_category=EntityCategory.DIAGNOSTIC, translation_key="error_code"), XtendSensorSpec("47e0", "xtend_software_version", lambda d: _as_raw_value(d, "47e0"), entity_category=EntityCategory.DIAGNOSTIC, translation_key="software_version"), - XtendSensorSpec("503e", "xtend_currentHpPowerThermal", lambda d: _as_float(d, "503e", divisor=1000), unit="kW", device_class=None, state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-lines", translation_key="current_heat_pump_power_thermal"), + XtendSensorSpec("503e", "xtend_currentHpPowerThermal", lambda d: _as_float(d, "503e", divisor=1000), unit="kW", device_class=SensorDeviceClass.POWER, state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-lines", translation_key="current_heat_pump_power_thermal"), XtendSensorSpec("5041", "xtend_currentCop", lambda d: _as_float(d, "5041", divisor=10), unit="thermal/kWh", state_class=SensorStateClass.MEASUREMENT, icon="mdi:gauge", translation_key="current_cop"), - XtendSensorSpec("5077", "xtend_currentPowerThermal", lambda d: _as_float(d, "5077", divisor=1000), unit="kW", state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-lines", translation_key="current_power_thermal"), - XtendSensorSpec("5088", "xtend_currentBoilerPowerThermal", lambda d: _as_float(d, "5088", divisor=1000), unit="kW", state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-lines", translation_key="current_boiler_power_thermal"), - XtendSensorSpec("50f2", "xtend_currentPowerElectric", lambda d: _as_int(d, "50f2"), unit="W", state_class=SensorStateClass.MEASUREMENT, icon="mdi:power-plug-outline", translation_key="current_power_electric"), + XtendSensorSpec("5077", "xtend_currentPowerThermal", lambda d: _as_float(d, "5077", divisor=1000), unit="kW", device_class=SensorDeviceClass.POWER, state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-lines", translation_key="current_power_thermal"), + XtendSensorSpec("5088", "xtend_currentBoilerPowerThermal", lambda d: _as_float(d, "5088", divisor=1000), unit="kW", device_class=SensorDeviceClass.POWER, state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-lines", translation_key="current_boiler_power_thermal"), + XtendSensorSpec("50f2", "xtend_currentPowerElectric", lambda d: _as_int(d, "50f2"), unit="W", device_class=SensorDeviceClass.POWER, state_class=SensorStateClass.MEASUREMENT, icon="mdi:power-plug-outline", translation_key="current_power_electric"), XtendSensorSpec("777d", "xtend_heatpumpMode", lambda d: _mode_name(d, "777d", HEAT_PUMP_MODES), icon="mdi:fire", translation_key="heat_pump_mode"), XtendSensorSpec("79b3", "xtend_roomtemperature_1", lambda d: _as_float(d, "79b3", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:home-thermometer-outline", translation_key="room_temperature"), XtendSensorSpec("6280", "xtend_tHpReturn", lambda d: _as_float(d, "6280", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:water-thermometer-outline", translation_key="heat_pump_return_temperature"), - XtendSensorSpec("629c", "xtend_fSystem", lambda d: _as_float(d, "629c", divisor=100), unit="l/min", state_class=SensorStateClass.MEASUREMENT, icon="mdi:waves-arrow-right", translation_key="system_flow"), + XtendSensorSpec("629c", "xtend_fSystem", lambda d: _as_float(d, "629c", divisor=100), unit="l/min", device_class=SensorDeviceClass.VOLUME_FLOW_RATE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:waves-arrow-right", translation_key="system_flow"), XtendSensorSpec("62d1", "xtend_tOutdoor", lambda d: _as_float(d, "62d1", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:sun-thermometer-outline", translation_key="outdoor_temperature"), XtendSensorSpec("62e7", "xtend_tHpSupply", lambda d: _as_float(d, "62e7", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:water-thermometer", translation_key="heat_pump_supply_temperature"), XtendSensorSpec("63b3", "xtend_electricEnergyHeating", lambda d: _as_int(d, "63b3"), unit="kWh", device_class=SensorDeviceClass.ENERGY, state_class=SensorStateClass.TOTAL_INCREASING, icon="mdi:power-plug-outline", translation_key="electric_energy_heating"), - XtendSensorSpec("63df", "xtend_thermalEnergyBoiler", lambda d: _as_int(d, "63df"), unit="kWh", state_class=SensorStateClass.TOTAL_INCREASING, icon="mdi:thermometer-lines", translation_key="thermal_energy_boiler"), - XtendSensorSpec("63f0", "xtend_thermalEnergyHeating", lambda d: _as_int(d, "63f0"), unit="kWh", state_class=SensorStateClass.TOTAL_INCREASING, icon="mdi:thermometer-lines", translation_key="thermal_energy_heating"), - XtendSensorSpec("6505", "xtend_suctionTemperature", lambda d: _as_float(d, "6505", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:coolant-temperature", translation_key="suction_temperature"), + XtendSensorSpec("63df", "xtend_thermalEnergyBoiler", lambda d: _as_int(d, "63df"), unit="kWh", device_class=SensorDeviceClass.ENERGY, state_class=SensorStateClass.TOTAL_INCREASING, icon="mdi:thermometer-lines", translation_key="thermal_energy_boiler"), + XtendSensorSpec("63f0", "xtend_thermalEnergyHeating", lambda d: _as_int(d, "63f0"), unit="kWh", device_class=SensorDeviceClass.ENERGY, state_class=SensorStateClass.TOTAL_INCREASING, icon="mdi:thermometer-lines", translation_key="thermal_energy_heating"), + XtendSensorSpec("6505", "xtend_suctionTemperature", lambda d: _as_float(d, "6505", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:coolant-temperature", translation_key="suction_temperature"), XtendSensorSpec("6578", "xtend_workingMode", lambda d: _mode_name(d, "6578", WORKING_MODES), icon="mdi:fire", translation_key="working_mode"), - XtendSensorSpec("6579", "xtend_suctionPressure", lambda d: _as_float(d, "6579", divisor=100), unit="bar", state_class=SensorStateClass.MEASUREMENT, icon="mdi:timeline-clock-outline", translation_key="suction_pressure"), - XtendSensorSpec("65a7", "xtend_actualFrequency", lambda d: _as_float(d, "65a7", divisor=100), unit="hertz", state_class=SensorStateClass.MEASUREMENT, icon="mdi:sine-wave", translation_key="compressor_frequency"), - XtendSensorSpec("65b0", "xtend_exhaustPressure", lambda d: _as_float(d, "65b0", divisor=100), unit="bar", state_class=SensorStateClass.MEASUREMENT, icon="mdi:timeline-clock-outline", translation_key="exhaust_pressure"), - XtendSensorSpec("65c1", "xtend_coilTemperature", lambda d: _as_float(d, "65c1", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:coolant-temperature", translation_key="coil_temperature"), - XtendSensorSpec("65d9", "xtend_exhaustTemperature", lambda d: _as_float(d, "65d9", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:coolant-temperature", translation_key="exhaust_temperature"), + XtendSensorSpec("6579", "xtend_suctionPressure", lambda d: _as_float(d, "6579", divisor=100), unit="bar", device_class=SensorDeviceClass.PRESSURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:timeline-clock-outline", translation_key="suction_pressure"), + XtendSensorSpec("65a7", "xtend_actualFrequency", lambda d: _as_float(d, "65a7", divisor=100), unit="hertz", device_class=SensorDeviceClass.FREQUENCY, state_class=SensorStateClass.MEASUREMENT, icon="mdi:sine-wave", translation_key="compressor_frequency"), + XtendSensorSpec("65b0", "xtend_exhaustPressure", lambda d: _as_float(d, "65b0", divisor=100), unit="bar", device_class=SensorDeviceClass.PRESSURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:timeline-clock-outline", translation_key="exhaust_pressure"), + XtendSensorSpec("65c1", "xtend_coilTemperature", lambda d: _as_float(d, "65c1", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:coolant-temperature", translation_key="coil_temperature"), + XtendSensorSpec("65d9", "xtend_exhaustTemperature", lambda d: _as_float(d, "65d9", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:coolant-temperature", translation_key="exhaust_temperature"), XtendSensorSpec("6a53", "xtend_startDefrostCounter", lambda d: _as_raw_value(d, "6a53"), icon="mdi:counter", entity_category=EntityCategory.DIAGNOSTIC, translation_key="defrost_start_count"), XtendSensorSpec("6a8e", "xtend_startHeatingCounter", lambda d: _as_int(d, "6a8e"), icon="mdi:counter", entity_category=EntityCategory.DIAGNOSTIC, translation_key="heating_start_count"), XtendSensorSpec("6ac5", "xtend_operationHeatingHours", lambda d: _as_int(d, "6ac5"), unit="h", device_class=SensorDeviceClass.DURATION, state_class=SensorStateClass.TOTAL_INCREASING, icon="mdi:clock-outline", entity_category=EntityCategory.DIAGNOSTIC, translation_key="heating_operation_hours"), - XtendSensorSpec("6c26", "xtend_temperatureCondensor_refrigrerant_gas", lambda d: _as_float(d, "6c26", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:coolant-temperature", translation_key="condenser_refrigerant_gas_temperature"), - XtendSensorSpec("6c33", "xtend_exhaustOverheat", lambda d: _as_float(d, "6c33", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:coolant-temperature", translation_key="exhaust_overheat"), - XtendSensorSpec("6c53", "xtend_temperatureSubcooling", lambda d: _as_float(d, "6c53", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:coolant-temperature", translation_key="subcooling_temperature"), + XtendSensorSpec("6c26", "xtend_temperatureCondensor_refrigrerant_gas", lambda d: _as_float(d, "6c26", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:coolant-temperature", translation_key="condenser_refrigerant_gas_temperature"), + XtendSensorSpec("6c33", "xtend_exhaustOverheat", lambda d: _as_float(d, "6c33", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:coolant-temperature", translation_key="exhaust_overheat"), + XtendSensorSpec("6c53", "xtend_temperatureSubcooling", lambda d: _as_float(d, "6c53", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:coolant-temperature", translation_key="subcooling_temperature"), XtendSensorSpec("6c66", "xtend_EEVSteps", lambda d: _as_int(d, "6c66"), unit="steps", icon="mdi:numeric", translation_key="eev_steps"), XtendSensorSpec("6c8a", "xtend_actualFan1Speed", lambda d: _as_int(d, "6c8a"), unit="rpm", icon="mdi:fan", translation_key="fan_speed"), - XtendSensorSpec("6ceb", "xtend_temperatureCondensor_refrigrerant_liquid", lambda d: _as_float(d, "6ceb", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:coolant-temperature", translation_key="condenser_refrigerant_liquid_temperature"), - XtendSensorSpec("6cfb", "xtend_suctionOverheat", lambda d: _as_float(d, "6cfb", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:coolant-temperature", translation_key="suction_overheat"), + XtendSensorSpec("6ceb", "xtend_temperatureCondensor_refrigrerant_liquid", lambda d: _as_float(d, "6ceb", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:coolant-temperature", translation_key="condenser_refrigerant_liquid_temperature"), + XtendSensorSpec("6cfb", "xtend_suctionOverheat", lambda d: _as_float(d, "6cfb", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:coolant-temperature", translation_key="suction_overheat"), XtendSensorSpec("7160", "xtend_poweron_number", lambda d: _as_int(d, "7160"), icon="mdi:counter", entity_category=EntityCategory.DIAGNOSTIC, translation_key="power_on_count"), XtendSensorSpec("71a7", "xtend_poweron_hours", lambda d: _as_int(d, "71a7"), unit="h", device_class=SensorDeviceClass.DURATION, state_class=SensorStateClass.TOTAL_INCREASING, icon="mdi:clock-outline", entity_category=EntityCategory.DIAGNOSTIC, translation_key="power_on_hours"), XtendSensorSpec("7767", "xtend_RequestedTemperature", lambda d: _as_float(d, "7767", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:thermometer-auto", translation_key="requested_temperature"), @@ -154,11 +154,11 @@ def _mode_name(data: dict[str, Any], key: str, lookup: dict[int, str]) -> str | XtendSensorSpec("7940", "xtend_notification_code", lambda d: _mode_name(d, "7940", NOTIFICATION_CODES), icon="mdi:bell-outline", entity_category=EntityCategory.DIAGNOSTIC, translation_key="notification_code"), XtendSensorSpec("7e2c", "xtend_lockout_code", lambda d: _mode_name(d, "7e2c", LOCKOUT_CODES), icon="mdi:alert-outline", entity_category=EntityCategory.DIAGNOSTIC, translation_key="lockout_code"), XtendSensorSpec("7e51", "xtend_heatdemand_status", lambda d: _mode_name(d, "7e51", HEAT_DEMAND_STATUS), icon="mdi:message-badge-outline", translation_key="heat_demand_status"), - XtendSensorSpec("7ed3", "xtend_water_pressure", lambda d: _as_float(d, "7ed3", divisor=100), unit="bar", state_class=SensorStateClass.MEASUREMENT, icon="mdi:timeline-clock-outline", translation_key="water_pressure"), + XtendSensorSpec("7ed3", "xtend_water_pressure", lambda d: _as_float(d, "7ed3", divisor=100), unit="bar", device_class=SensorDeviceClass.PRESSURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:timeline-clock-outline", translation_key="water_pressure"), XtendSensorSpec("77dd", "xtend_systemStatus", lambda d: _mode_name(d, "77dd", SYSTEM_STATUS), icon="mdi:power", entity_category=EntityCategory.DIAGNOSTIC, translation_key="system_status"), XtendSensorSpec("cop_total", "xtend_cop_total", lambda d: _calculate_cop(d), unit="thermal/kWh", state_class=SensorStateClass.MEASUREMENT, icon="mdi:gauge", translation_key="total_cop"), - XtendSensorSpec("delta_t", "xtend_deltaT", lambda d: _calculate_delta_t(d, "62e7", "6280"), unit="°C", state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-check", translation_key="delta_t"), - XtendSensorSpec("thermal_total", "xtend_thermal_total", lambda d: _calculate_thermal_total(d), unit="kWh", state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-lines", translation_key="total_thermal_energy"), + XtendSensorSpec("delta_t", "xtend_deltaT", lambda d: _calculate_delta_t(d, "62e7", "6280"), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:thermometer-check", translation_key="delta_t"), + XtendSensorSpec("thermal_total", "xtend_thermal_total", lambda d: _calculate_thermal_total(d), unit="kWh", device_class=SensorDeviceClass.ENERGY, state_class=SensorStateClass.TOTAL_INCREASING, icon="mdi:thermometer-lines", translation_key="total_thermal_energy"), XtendSensorSpec("625b", "xtreme_tBoilerSupply", lambda d: _as_float(d, "625b", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:water-thermometer", is_xtreme=True, translation_key="boiler_supply_temperature"), XtendSensorSpec("623c", "xtreme_tBoilerReturn", lambda d: _as_float(d, "623c", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, state_class=SensorStateClass.MEASUREMENT, icon="mdi:water-thermometer-outline", is_xtreme=True, translation_key="boiler_return_temperature"), XtendSensorSpec("7e7a", "xtreme_burner_status", lambda d: _mode_name(d, "7e7a", XTREME_BURNER_STATUS), icon="mdi:fire", is_xtreme=True, translation_key="burner_status"),