From f36bd0eb518b8102630b9951117841b9b59b37e3 Mon Sep 17 00:00:00 2001 From: Webpatrick Date: Tue, 20 Oct 2026 11:05:24 +0200 Subject: [PATCH 1/2] Add readable heat demand status labels Expose heat demand status as an enum sensor with translated state labels in English and Dutch, so Home Assistant shows human-readable values instead of raw keys. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- custom_components/intergas_local/sensor.py | 2 +- custom_components/intergas_local/strings.json | 30 ++++++++++++++++++- .../intergas_local/translations/en.json | 30 ++++++++++++++++++- .../intergas_local/translations/nl.json | 30 ++++++++++++++++++- 4 files changed, 88 insertions(+), 4 deletions(-) diff --git a/custom_components/intergas_local/sensor.py b/custom_components/intergas_local/sensor.py index 6145174..cf82337 100644 --- a/custom_components/intergas_local/sensor.py +++ b/custom_components/intergas_local/sensor.py @@ -153,7 +153,7 @@ def _mode_name(data: dict[str, Any], key: str, lookup: dict[int, str]) -> str | XtendSensorSpec("7921", "xtend_roomtemperature_set_1", lambda d: _as_float(d, "7921", divisor=100), unit="°C", device_class=SensorDeviceClass.TEMPERATURE, icon="mdi:home-thermometer", translation_key="room_temperature_setpoint"), 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("7e51", "xtend_heatdemand_status", lambda d: _mode_name(d, "7e51", HEAT_DEMAND_STATUS), device_class=SensorDeviceClass.ENUM, options=list(HEAT_DEMAND_STATUS.values()), 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", 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"), diff --git a/custom_components/intergas_local/strings.json b/custom_components/intergas_local/strings.json index e6ed5ab..7e4b6bb 100644 --- a/custom_components/intergas_local/strings.json +++ b/custom_components/intergas_local/strings.json @@ -67,7 +67,35 @@ "room_temperature_setpoint": { "name": "Room temperature setpoint" }, "notification_code": { "name": "Notification code" }, "lockout_code": { "name": "Lockout code" }, - "heat_demand_status": { "name": "Heat demand status" }, + "heat_demand_status": { + "name": "Heat demand status", + "state": { + "opentherm": "OpenTherm", + "boiler_ext": "External boiler", + "frost": "Frost protection", + "ch_rf": "Central heating RF", + "sensortest": "Sensor test", + "commissioning": "Commissioning", + "crankheating": "Crank heating", + "ch": "Central heating", + "ch_wait": "Central heating (waiting)", + "defrosting": "Defrosting", + "starting_cooling": "Starting cooling", + "cooling": "Cooling", + "cooling_wait": "Cooling (waiting)", + "standby": "Standby", + "off": "Off", + "postrun_boiler": "Boiler post-run", + "service": "Service", + "postrun_cooling": "Cooling post-run", + "dhw": "Domestic hot water", + "dhw_hreco": "Domestic hot water heat recovery", + "starting_ch": "Starting central heating", + "postrun_ch": "Central heating post-run", + "boiler_int": "Internal boiler", + "heatup": "Heat up" + } + }, "water_pressure": { "name": "Water pressure" }, "system_status": { "name": "System status" }, "total_cop": { "name": "Total COP" }, diff --git a/custom_components/intergas_local/translations/en.json b/custom_components/intergas_local/translations/en.json index e6ed5ab..7e4b6bb 100644 --- a/custom_components/intergas_local/translations/en.json +++ b/custom_components/intergas_local/translations/en.json @@ -67,7 +67,35 @@ "room_temperature_setpoint": { "name": "Room temperature setpoint" }, "notification_code": { "name": "Notification code" }, "lockout_code": { "name": "Lockout code" }, - "heat_demand_status": { "name": "Heat demand status" }, + "heat_demand_status": { + "name": "Heat demand status", + "state": { + "opentherm": "OpenTherm", + "boiler_ext": "External boiler", + "frost": "Frost protection", + "ch_rf": "Central heating RF", + "sensortest": "Sensor test", + "commissioning": "Commissioning", + "crankheating": "Crank heating", + "ch": "Central heating", + "ch_wait": "Central heating (waiting)", + "defrosting": "Defrosting", + "starting_cooling": "Starting cooling", + "cooling": "Cooling", + "cooling_wait": "Cooling (waiting)", + "standby": "Standby", + "off": "Off", + "postrun_boiler": "Boiler post-run", + "service": "Service", + "postrun_cooling": "Cooling post-run", + "dhw": "Domestic hot water", + "dhw_hreco": "Domestic hot water heat recovery", + "starting_ch": "Starting central heating", + "postrun_ch": "Central heating post-run", + "boiler_int": "Internal boiler", + "heatup": "Heat up" + } + }, "water_pressure": { "name": "Water pressure" }, "system_status": { "name": "System status" }, "total_cop": { "name": "Total COP" }, diff --git a/custom_components/intergas_local/translations/nl.json b/custom_components/intergas_local/translations/nl.json index afed018..efabbd9 100644 --- a/custom_components/intergas_local/translations/nl.json +++ b/custom_components/intergas_local/translations/nl.json @@ -67,7 +67,35 @@ "room_temperature_setpoint": { "name": "Instelling kamertemperatuur" }, "notification_code": { "name": "Meldingscode" }, "lockout_code": { "name": "Blokkeercode" }, - "heat_demand_status": { "name": "Warmtevraagstatus" }, + "heat_demand_status": { + "name": "Warmtevraagstatus", + "state": { + "opentherm": "OpenTherm", + "boiler_ext": "Externe ketel", + "frost": "Vorstbeveiliging", + "ch_rf": "CV RF", + "sensortest": "Sensortest", + "commissioning": "Inbedrijfstelling", + "crankheating": "Carterverwarming", + "ch": "CV", + "ch_wait": "CV (wachten)", + "defrosting": "Ontdooien", + "starting_cooling": "Koelen starten", + "cooling": "Koelen", + "cooling_wait": "Koelen (wachten)", + "standby": "Stand-by", + "off": "Uit", + "postrun_boiler": "Nadraaien ketel", + "service": "Service", + "postrun_cooling": "Nadraaien koelen", + "dhw": "Warm water", + "dhw_hreco": "Warmwater-warmteterugwinning", + "starting_ch": "CV starten", + "postrun_ch": "Nadraaien CV", + "boiler_int": "Interne ketel", + "heatup": "Opwarmen" + } + }, "water_pressure": { "name": "Waterdruk" }, "system_status": { "name": "Systeemstatus" }, "total_cop": { "name": "Totale COP" }, From ae6edf68e83162670049477c87daef0504eee1fc Mon Sep 17 00:00:00 2001 From: Webpatrick Date: Tue, 20 Oct 2026 11:17:15 +0200 Subject: [PATCH 2/2] Bump integration version to 1.0.4 Prepare HACS release metadata for the readable heat demand status update by updating the integration version in manifest.json. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- custom_components/intergas_local/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/intergas_local/manifest.json b/custom_components/intergas_local/manifest.json index c85acc4..9d30f63 100644 --- a/custom_components/intergas_local/manifest.json +++ b/custom_components/intergas_local/manifest.json @@ -8,5 +8,5 @@ "iot_class": "local_polling", "issue_tracker": "https://github.com/webpatrick/intergas_local/issues", "requirements": [], - "version": "1.0.3" + "version": "1.0.4" }