From 0889eba136550c255aff5d7c617bd4da3c24c6f6 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 20 Jun 2026 17:46:02 +0200 Subject: [PATCH 01/38] Change constants preparing for improved water_heater dicts --- plugwise/constants.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugwise/constants.py b/plugwise/constants.py index 55e4b8e91..1d1d8ef5c 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -257,9 +257,8 @@ "zone_thermostat", ) ActuatorType = Literal[ - "domestic_hot_water_setpoint", - "max_dhw_temperature", - "maximum_boiler_temperature", + "boiler_temperature", + "dhw_temperature", "temperature_offset", "thermostat", ] @@ -277,6 +276,7 @@ ActuatorDataType = Literal[ "control_state", + "current", "lower_bound", "regulation_control", "resolution", @@ -585,8 +585,8 @@ class GwEntityData(TypedDict, total=False): # Dict-types binary_sensors: SmileBinarySensors - max_dhw_temperature: ActuatorData - maximum_boiler_temperature: ActuatorData + boiler_temperature: ActuatorData + dhw_temperature: ActuatorData sensors: SmileSensors switches: SmileSwitches temperature_offset: ActuatorData From 9a3809ae6773ad4564e4fb4de1c9a5925cb792a4 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 20 Jun 2026 17:53:36 +0200 Subject: [PATCH 02/38] Update for dhw_temperature and debug --- plugwise/helper.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index bd7a35ca3..46616fedd 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -535,9 +535,9 @@ def _get_actuator_functionalities( Add the resulting dict(s) to the entity's data. """ for item in ACTIVE_ACTUATORS: - # Skip max_dhw_temperature, not initially valid, + # Skip dhw_temperature, not initially valid, # skip thermostat for all but zones with thermostats - if item == "max_dhw_temperature" or ( + if item == "dhw_temperature" or ( item == "thermostat" and ( entity["dev_class"] != "climate" @@ -583,10 +583,11 @@ def _get_actuator_functionalities( temp_dict[act_key] = str(pw_function.text) if temp_dict: + LOGGER.debug("HOI temp_dict: %s", temp_dict) # If domestic_hot_water_setpoint is present as actuator, # rename and remove as sensor if item == DHW_SETPOINT: - item = "max_dhw_temperature" + item = "dhw_temperature" if DHW_SETPOINT in data["sensors"]: data["sensors"].pop(DHW_SETPOINT) self._count -= 1 From 41364dfe07cdaef140d00f4ce56b583e60b50cab Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 20 Jun 2026 18:02:02 +0200 Subject: [PATCH 03/38] Revert removal of original actuator keys --- fixtures/adam_bad_thermostat/data.json | 15 ++------------- plugwise/constants.py | 2 ++ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/fixtures/adam_bad_thermostat/data.json b/fixtures/adam_bad_thermostat/data.json index 14d7d4c4d..f2f422c56 100644 --- a/fixtures/adam_bad_thermostat/data.json +++ b/fixtures/adam_bad_thermostat/data.json @@ -7,29 +7,18 @@ "heating_state": false }, "dev_class": "heater_central", - "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], "location": "856285a783f24bf4b2573c8bc510eabf", - "max_dhw_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 50.0, - "upper_bound": 100.0 - }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 38.0, - "upper_bound": 45.0 - }, "model": "Generic heater", "model_id": "1.1", "name": "OpenTherm", + "select_dhw_mode": "off", "sensors": { "dhw_temperature": 49.9, + "domestic_hot_water_setpoint": 50.0, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, diff --git a/plugwise/constants.py b/plugwise/constants.py index 1d1d8ef5c..368ce7429 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -259,6 +259,8 @@ ActuatorType = Literal[ "boiler_temperature", "dhw_temperature", + "domestic_hot_water_setpoint", + "maximum_boiler_temperature", "temperature_offset", "thermostat", ] From 430579468dd83ad2d2fb621d4ae6886441f22ca9 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 20 Jun 2026 18:09:40 +0200 Subject: [PATCH 04/38] Add current (temperature) to dhw_temperature dict --- plugwise/helper.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index 46616fedd..2bbe0a544 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -535,9 +535,9 @@ def _get_actuator_functionalities( Add the resulting dict(s) to the entity's data. """ for item in ACTIVE_ACTUATORS: - # Skip dhw_temperature, not initially valid, + # Skip boiler_ and dhw_temperature, not initially valid, # skip thermostat for all but zones with thermostats - if item == "dhw_temperature" or ( + if item in ("boiler_temperature", "dhw_temperature") or ( item == "thermostat" and ( entity["dev_class"] != "climate" @@ -591,6 +591,9 @@ def _get_actuator_functionalities( if DHW_SETPOINT in data["sensors"]: data["sensors"].pop(DHW_SETPOINT) self._count -= 1 + if "dhw_temperature" in data["sensors"]: + temp_dict["current"] = data["sensors"]["dhw_temperature"] + data["sensors"].pop("dhw_temperature") act_item = cast(ActuatorType, item) data[act_item] = temp_dict From 4fb00e7d1e343a43dc5a8b877fa3877f4f8f912e Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 20 Jun 2026 18:13:26 +0200 Subject: [PATCH 05/38] Add current to maximum_boiler_temperature dict --- plugwise/helper.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugwise/helper.py b/plugwise/helper.py index 2bbe0a544..7004f933f 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -595,6 +595,11 @@ def _get_actuator_functionalities( temp_dict["current"] = data["sensors"]["dhw_temperature"] data["sensors"].pop("dhw_temperature") + if item == "maximum_boiler_temperature": + if "water_temperature" in data["sensors"]: + temp_dict["current"] = data["sensors"]["water_temperature"] + data["sensors"].pop("water_temperature") + act_item = cast(ActuatorType, item) data[act_item] = temp_dict From f7fe75001d109cefb529ece7e9ce021dfc995d71 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 20 Jun 2026 18:20:36 +0200 Subject: [PATCH 06/38] Shorter maximum_boiler_temperature dict name --- plugwise/helper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugwise/helper.py b/plugwise/helper.py index 7004f933f..33659e422 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -596,6 +596,7 @@ def _get_actuator_functionalities( data["sensors"].pop("dhw_temperature") if item == "maximum_boiler_temperature": + item = "boiler_temperature" if "water_temperature" in data["sensors"]: temp_dict["current"] = data["sensors"]["water_temperature"] data["sensors"].pop("water_temperature") From aecfcfb32869846f5c8f1b8352498b960399ee46 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:07:30 +0200 Subject: [PATCH 07/38] Handle common dhw_ and water_temperature --- plugwise/helper.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugwise/helper.py b/plugwise/helper.py index 33659e422..7e72cd4dc 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -594,6 +594,8 @@ def _get_actuator_functionalities( if "dhw_temperature" in data["sensors"]: temp_dict["current"] = data["sensors"]["dhw_temperature"] data["sensors"].pop("dhw_temperature") + elif "water_temperature" in data["sensors"]: + temp_dict["current"] = data["sensors"]["water_temperature"] if item == "maximum_boiler_temperature": item = "boiler_temperature" From 34a0c173e0608d9f37337c710bc4ee2c387fb533 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:11:45 +0200 Subject: [PATCH 08/38] Remove test-debug-line --- plugwise/helper.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index 7e72cd4dc..88d967066 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -583,7 +583,6 @@ def _get_actuator_functionalities( temp_dict[act_key] = str(pw_function.text) if temp_dict: - LOGGER.debug("HOI temp_dict: %s", temp_dict) # If domestic_hot_water_setpoint is present as actuator, # rename and remove as sensor if item == DHW_SETPOINT: From 8e2f6c94ef5f75e12e46292898757faf1765afde Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:13:00 +0200 Subject: [PATCH 09/38] Update test-jsons to the updated format --- tests/data/adam/adam_bad_thermostat.json | 24 +- tests/data/adam/adam_heatpump_cooling.json | 210 ++++++++++++++---- tests/data/adam/adam_plus_anna_new.json | 18 +- .../adam_plus_anna_new_regulation_off.json | 100 ++++++--- 4 files changed, 260 insertions(+), 92 deletions(-) diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index 71b54b9a0..3b6ab9422 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -6,35 +6,35 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 20.9, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 38.0, + "upper_bound": 45.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], - "location": "856285a783f24bf4b2573c8bc510eabf", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 49.9, "lower_bound": 0.0, "resolution": 1.0, "setpoint": 50.0, "upper_bound": 100.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 38.0, - "upper_bound": 45.0 - }, + "location": "856285a783f24bf4b2573c8bc510eabf", "model": "Generic heater", "model_id": "1.1", "name": "OpenTherm", - "dhw_mode": "off", + "select_dhw_mode": "off", "sensors": { - "dhw_temperature": 49.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, - "return_temperature": 33.0, - "water_temperature": 20.9 + "return_temperature": 33.0 }, "vendor": "WeHeat" }, diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index e2401f79a..35612a0f7 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -12,7 +12,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Slaapkamer SJ", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -27,11 +33,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["d3a276aeb3114a509bab1e4bf8c40348"], + "primary": [ + "d3a276aeb3114a509bab1e4bf8c40348" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "0ca13e8176204ca7bf6f09de59f81c83": { "available": true, @@ -42,36 +54,36 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 24.5, + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, "dev_class": "heater_central", - "location": "eedadcb297564f1483faa509179aebed", "dhw_modes": [ "comfort", "off" ], - "max_dhw_temperature": { + "dhw_temperature": { + "current": 63.5, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 65.0 }, - "maximum_boiler_temperature": { - "lower_bound": 7.0, - "resolution": 0.01, - "setpoint": 35.0, - "upper_bound": 50.0 - }, + "location": "eedadcb297564f1483faa509179aebed", "model": "Generic heater/cooler", "model_id": "17.1", "name": "OpenTherm", - "dhw_mode": "comfort", + "select_dhw_mode": "comfort", "sensors": { - "dhw_temperature": 63.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.5, "return_temperature": 24.9, - "water_pressure": 2.0, - "water_temperature": 24.5 + "water_pressure": 2.0 }, "vendor": "Remeha B.V." }, @@ -134,7 +146,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Slaapkamer DB", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -149,11 +167,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["47e2c550a33846b680725aa3fb229473"], + "primary": [ + "47e2c550a33846b680725aa3fb229473" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "2e0fc4db2a6d4cbeb7cf786143543961": { "available": true, @@ -250,7 +274,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Badkamer 2", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "Werkdag schema", "select_zone_profile": "passive", "sensors": { @@ -264,11 +294,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["f04c985c11ad4848b8fcd710343f9dcf"], + "primary": [ + "f04c985c11ad4848b8fcd710343f9dcf" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "5ead63c65e5f44e7870ba2bd680ceb9e": { "available": true, @@ -296,7 +332,11 @@ }, "dev_class": "gateway", "firmware": "3.2.8", - "gateway_modes": ["away", "full", "vacation"], + "gateway_modes": [ + "away", + "full", + "vacation" + ], "hardware": "AME Smile 2.0 board", "location": "eedadcb297564f1483faa509179aebed", "mac_address": "012345670001", @@ -394,7 +434,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Badkamer 1", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "Werkdag schema", "select_zone_profile": "passive", "sensors": { @@ -409,11 +455,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["eac5db95d97241f6b17790897847ccf5"], + "primary": [ + "eac5db95d97241f6b17790897847ccf5" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "93ac3f7bf25342f58cbb77c4a99ac0b3": { "active_preset": "away", @@ -428,7 +480,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Slaapkamer RB", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -442,11 +500,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["c4ed311d54e341f58b4cdd201d1fde7e"], + "primary": [ + "c4ed311d54e341f58b4cdd201d1fde7e" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "96714ad90fc948bcbcb5021c4b9f5ae9": { "available": true, @@ -481,7 +545,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Slaapkamer SQ", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -496,11 +566,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["beb32da072274e698146db8b022f3c36"], + "primary": [ + "beb32da072274e698146db8b022f3c36" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "a03b6e8e76dd4646af1a77c31dd9370c": { "available": true, @@ -535,7 +611,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Keuken", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "Werkdag schema", "select_zone_profile": "active", "sensors": { @@ -550,11 +632,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["ea8372c0e3ad4622ad45a041d02425f5"], + "primary": [ + "ea8372c0e3ad4622ad45a041d02425f5" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "b52908550469425b812c87f766fe5303": { "active_preset": "away", @@ -569,7 +657,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Bijkeuken", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "off", "select_zone_profile": "active", "sensors": { @@ -584,11 +678,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["1053c8bbf8be43c6921742b146a625f1"], + "primary": [ + "1053c8bbf8be43c6921742b146a625f1" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "bbcffa48019f4b09b8368bbaf9559e68": { "available": true, @@ -701,7 +801,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Slaapkamer JM", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -716,11 +822,17 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["7fda9f84f01342f8afe9ebbbbff30c0f"], + "primary": [ + "7fda9f84f01342f8afe9ebbbbff30c0f" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "ea8372c0e3ad4622ad45a041d02425f5": { "available": true, @@ -805,7 +917,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Woonkamer", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "Werkdag schema", "select_zone_profile": "active", "sensors": { @@ -820,10 +938,16 @@ "upper_bound": 35.0 }, "thermostats": { - "primary": ["ca79d23ae0094120b877558734cff85c"], + "primary": [ + "ca79d23ae0094120b877558734cff85c" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] } } diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index d794d51cd..5a199f12a 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -6,24 +6,24 @@ "flame_state": true, "heating_state": true }, - "dev_class": "heater_central", - "location": "bc93488efab249e5bc54fd7e175a6f91", - "dhw_modes": [ - "comfort", - "off" - ], - "maximum_boiler_temperature": { + "boiler_temperature": { + "current": 43.0, "lower_bound": 25.0, "resolution": 0.01, "setpoint": 50.0, "upper_bound": 95.0 }, + "dev_class": "heater_central", + "dhw_modes": [ + "comfort", + "off" + ], + "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 22.5, - "water_temperature": 43.0 + "intended_boiler_temperature": 22.5 } }, "10016900610d4c7481df78c89606ef22": { diff --git a/tests/data/adam/adam_plus_anna_new_regulation_off.json b/tests/data/adam/adam_plus_anna_new_regulation_off.json index 4f3130c05..b9a5f2303 100644 --- a/tests/data/adam/adam_plus_anna_new_regulation_off.json +++ b/tests/data/adam/adam_plus_anna_new_regulation_off.json @@ -6,24 +6,24 @@ "flame_state": false, "heating_state": false }, - "dev_class": "heater_central", - "location": "bc93488efab249e5bc54fd7e175a6f91", - "dhw_modes": [ - "comfort", - "off" - ], - "maximum_boiler_temperature": { + "boiler_temperature": { + "current": 30.0, "lower_bound": 25.0, "resolution": 0.01, "setpoint": 50.0, "upper_bound": 95.0 }, + "dev_class": "heater_central", + "dhw_modes": [ + "comfort", + "off" + ], + "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 0.0, - "water_temperature": 30.0 + "intended_boiler_temperature": 0.0 } }, "10016900610d4c7481df78c89606ef22": { @@ -157,13 +157,32 @@ }, "vendor": "Plugwise" }, + "c9293d1d68ee48fc8843c6f0dee2b6be": { + "dev_class": "pumping", + "members": [ + "854f8a9b0e7e425db97f1f110e1ce4b3", + "ad4838d7d35c4d6ea796ee12ae5aedf8" + ], + "model": "Group", + "name": "Vloerverwarming", + "sensors": { + "electricity_consumed": 43.8, + "electricity_produced": 0.0, + "temperature": 18.4 + }, + "vendor": "Plugwise" + }, "da224107914542988a88561b4452b0f6": { "binary_sensors": { "plugwise_notification": false }, "dev_class": "gateway", "firmware": "3.7.8", - "gateway_modes": ["away", "full", "vacation"], + "gateway_modes": [ + "away", + "full", + "vacation" + ], "hardware": "AME Smile 2.0 board", "location": "bc93488efab249e5bc54fd7e175a6f91", "mac_address": "012345679891", @@ -171,7 +190,12 @@ "model_id": "smile_open_therm", "name": "Adam", "notifications": {}, - "regulation_modes": ["bleeding_hot", "bleeding_cold", "off", "heating"], + "regulation_modes": [ + "bleeding_hot", + "bleeding_cold", + "off", + "heating" + ], "select_gateway_mode": "full", "select_regulation_mode": "off", "sensors": { @@ -180,16 +204,6 @@ "vendor": "Plugwise", "zigbee_mac_address": "000D6F000D5A168D" }, - "c9293d1d68ee48fc8843c6f0dee2b6be": { - "dev_class": "pumping", - "members": [ - "854f8a9b0e7e425db97f1f110e1ce4b3", - "ad4838d7d35c4d6ea796ee12ae5aedf8" - ], - "model": "Group", - "name": "Vloerverwarming", - "vendor": "Plugwise" - }, "e2f4322d57924fa090fbbc48b3a140dc": { "available": true, "binary_sensors": { @@ -224,6 +238,10 @@ ], "model": "Group", "name": "Test", + "sensors": { + "electricity_consumed": 14.8, + "electricity_produced": 0.0 + }, "switches": { "relay": true }, @@ -243,7 +261,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Living room", - "preset_modes": ["no_frost", "asleep", "vacation", "home", "away"], + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], "select_schedule": "off", "select_zone_profile": "active", "sensors": { @@ -258,11 +282,17 @@ "upper_bound": 35.0 }, "thermostats": { - "primary": ["ad4838d7d35c4d6ea796ee12ae5aedf8"], + "primary": [ + "ad4838d7d35c4d6ea796ee12ae5aedf8" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "f871b8c4d63549319221e294e4f88074": { "active_preset": "home", @@ -278,7 +308,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Bathroom", - "preset_modes": ["no_frost", "asleep", "vacation", "home", "away"], + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "home", + "away" + ], "select_schedule": "off", "select_zone_profile": "passive", "sensors": { @@ -293,10 +329,18 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["e2f4322d57924fa090fbbc48b3a140dc"], - "secondary": ["1772a4ea304041adb83f357b751341ff"] + "primary": [ + "e2f4322d57924fa090fbbc48b3a140dc" + ], + "secondary": [ + "1772a4ea304041adb83f357b751341ff" + ] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] } } From d49a68d8c8b5967223c7ab388df0664249f306a2 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:18:37 +0200 Subject: [PATCH 10/38] Update parameter name in data.py too --- plugwise/data.py | 2 +- tests/data/adam/adam_bad_thermostat.json | 2 +- tests/data/adam/adam_heatpump_cooling.json | 2 +- tests/data/adam/adam_jip.json | 124 ++++++++++++++---- .../adam_onoff_cooling_fake_firmware.json | 48 ++++--- tests/data/adam/adam_plus_anna.json | 35 +++-- 6 files changed, 153 insertions(+), 60 deletions(-) diff --git a/plugwise/data.py b/plugwise/data.py index 3dfc293d0..6c4df088d 100644 --- a/plugwise/data.py +++ b/plugwise/data.py @@ -80,7 +80,7 @@ def _update_gw_entities(self) -> None: # Replace select_dhw_mode with dhw_mode when applicable if ( - "max_dhw_temperature" in entity + "dhw_temperature" in entity and (mode := entity.get("select_dhw_mode")) is not None ): entity.pop("select_dhw_mode") diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index 3b6ab9422..d4a158aeb 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -14,6 +14,7 @@ "upper_bound": 45.0 }, "dev_class": "heater_central", + "dhw_mode": "off", "dhw_modes": [ "comfort", "off" @@ -29,7 +30,6 @@ "model": "Generic heater", "model_id": "1.1", "name": "OpenTherm", - "select_dhw_mode": "off", "sensors": { "intended_boiler_temperature": 0.0, "modulation_level": 0.0, diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index 35612a0f7..a31c1f9a8 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -62,6 +62,7 @@ "upper_bound": 50.0 }, "dev_class": "heater_central", + "dhw_mode": "comfort", "dhw_modes": [ "comfort", "off" @@ -77,7 +78,6 @@ "model": "Generic heater/cooler", "model_id": "17.1", "name": "OpenTherm", - "select_dhw_mode": "comfort", "sensors": { "intended_boiler_temperature": 0.0, "modulation_level": 0.0, diff --git a/tests/data/adam/adam_jip.json b/tests/data/adam/adam_jip.json index 7ae98246a..391d28bbd 100644 --- a/tests/data/adam/adam_jip.json +++ b/tests/data/adam/adam_jip.json @@ -7,7 +7,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Slaapkamer", - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], "select_schedule": null, "select_zone_profile": "active", "sensors": { @@ -20,11 +26,19 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["1346fbd8498d4dbcab7e18d51b771f3d"], - "secondary": ["356b65335e274d769c338223e7af9c33"] + "primary": [ + "1346fbd8498d4dbcab7e18d51b771f3d" + ], + "secondary": [ + "356b65335e274d769c338223e7af9c33" + ] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "13228dab8ce04617af318a2888b3c548": { "active_preset": "home", @@ -34,7 +48,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Woonkamer", - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], "select_schedule": null, "select_zone_profile": "active", "sensors": { @@ -47,11 +67,19 @@ "upper_bound": 30.0 }, "thermostats": { - "primary": ["f61f1a2535f54f52ad006a3d18e459ca"], - "secondary": ["833de10f269c4deab58fb9df69901b4e"] + "primary": [ + "f61f1a2535f54f52ad006a3d18e459ca" + ], + "secondary": [ + "833de10f269c4deab58fb9df69901b4e" + ] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "1346fbd8498d4dbcab7e18d51b771f3d": { "available": true, @@ -226,7 +254,11 @@ }, "dev_class": "gateway", "firmware": "3.2.8", - "gateway_modes": ["away", "full", "vacation"], + "gateway_modes": [ + "away", + "full", + "vacation" + ], "hardware": "AME Smile 2.0 board", "location": "9e4433a9d69f40b3aefd15e74395eaec", "mac_address": "012345670001", @@ -234,7 +266,12 @@ "model_id": "smile_open_therm", "name": "Adam", "notifications": {}, - "regulation_modes": ["heating", "off", "bleeding_cold", "bleeding_hot"], + "regulation_modes": [ + "heating", + "off", + "bleeding_cold", + "bleeding_hot" + ], "select_gateway_mode": "full", "select_regulation_mode": "heating", "sensors": { @@ -251,7 +288,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Kinderkamer", - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], "select_schedule": null, "select_zone_profile": "active", "sensors": { @@ -264,11 +307,19 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["6f3e9d7084214c21b9dfa46f6eeb8700"], - "secondary": ["d4496250d0e942cfa7aea3476e9070d5"] + "primary": [ + "6f3e9d7084214c21b9dfa46f6eeb8700" + ], + "secondary": [ + "d4496250d0e942cfa7aea3476e9070d5" + ] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "d4496250d0e942cfa7aea3476e9070d5": { "available": true, @@ -302,7 +353,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Logeerkamer", - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], "select_schedule": null, "select_zone_profile": "active", "sensors": { @@ -315,11 +372,19 @@ "upper_bound": 99.9 }, "thermostats": { - "primary": ["a6abc6a129ee499c88a4d420cc413b47"], - "secondary": ["1da4d325838e4ad8aac12177214505c9"] + "primary": [ + "a6abc6a129ee499c88a4d420cc413b47" + ], + "secondary": [ + "1da4d325838e4ad8aac12177214505c9" + ] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] }, "e4684553153b44afbef2200885f379dc": { "available": true, @@ -328,34 +393,35 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 37.3, + "lower_bound": 20.0, + "resolution": 0.01, + "setpoint": 90.0, + "upper_bound": 90.0 + }, "dev_class": "heater_central", - "location": "9e4433a9d69f40b3aefd15e74395eaec", + "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "max_dhw_temperature": { + "dhw_temperature": { + "current": 37.3, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 20.0, - "resolution": 0.01, - "setpoint": 90.0, - "upper_bound": 90.0 - }, + "location": "9e4433a9d69f40b3aefd15e74395eaec", "model": "Generic heater", "model_id": "10.20", "name": "OpenTherm", - "dhw_mode": "off", "sensors": { "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "return_temperature": 37.1, - "water_pressure": 1.4, - "water_temperature": 37.3 + "water_pressure": 1.4 }, "vendor": "Remeha B.V." }, diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index c31a7710c..f69d3abd6 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -7,35 +7,35 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 24.5, + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, "dev_class": "heater_central", - "location": "eedadcb297564f1483faa509179aebed", + "dhw_mode": "comfort", "dhw_modes": [ "comfort", "off" ], - "max_dhw_temperature": { + "dhw_temperature": { + "current": 63.5, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 65.0 }, - "maximum_boiler_temperature": { - "lower_bound": 7.0, - "resolution": 0.01, - "setpoint": 35.0, - "upper_bound": 50.0 - }, + "location": "eedadcb297564f1483faa509179aebed", "model": "Unknown", "name": "OnOff", - "dhw_mode": "comfort", "sensors": { - "dhw_temperature": 63.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.5, "return_temperature": 24.9, - "water_pressure": 2.0, - "water_temperature": 24.5 + "water_pressure": 2.0 } }, "7d97fc3117784cfdafe347bcedcbbbcb": { @@ -44,7 +44,11 @@ }, "dev_class": "gateway", "firmware": "3.2.8", - "gateway_modes": ["away", "full", "vacation"], + "gateway_modes": [ + "away", + "full", + "vacation" + ], "hardware": "AME Smile 2.0 board", "location": "eedadcb297564f1483faa509179aebed", "mac_address": "012345670001", @@ -92,7 +96,13 @@ "dev_class": "climate", "model": "ThermoZone", "name": "Woonkamer", - "preset_modes": ["no_frost", "vacation", "away", "home", "asleep"], + "preset_modes": [ + "no_frost", + "vacation", + "away", + "home", + "asleep" + ], "select_schedule": "Werkdag schema", "select_zone_profile": "active", "sensors": { @@ -107,10 +117,16 @@ "upper_bound": 35.0 }, "thermostats": { - "primary": ["ca79d23ae0094120b877558734cff85c"], + "primary": [ + "ca79d23ae0094120b877558734cff85c" + ], "secondary": [] }, "vendor": "Plugwise", - "zone_profiles": ["active", "off", "passive"] + "zone_profiles": [ + "active", + "off", + "passive" + ] } } diff --git a/tests/data/adam/adam_plus_anna.json b/tests/data/adam/adam_plus_anna.json index d86a53176..ea3f22917 100644 --- a/tests/data/adam/adam_plus_anna.json +++ b/tests/data/adam/adam_plus_anna.json @@ -1,13 +1,22 @@ { "009490cc2f674ce6b576863fbb64f867": { "active_preset": "home", - "available_schedules": ["Weekschema", "off"], + "available_schedules": [ + "Weekschema", + "off" + ], "climate_mode": "auto", "control_state": "idle", "dev_class": "climate", "model": "ThermoZone", "name": "Living room", - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], "select_schedule": "Weekschema", "sensors": { "electricity_consumed": 74.2, @@ -21,7 +30,9 @@ "upper_bound": 35.0 }, "thermostats": { - "primary": ["ee62cad889f94e8ca3d09021f03a660b"], + "primary": [ + "ee62cad889f94e8ca3d09021f03a660b" + ], "secondary": [] }, "vendor": "Plugwise" @@ -33,24 +44,24 @@ "flame_state": false, "heating_state": false }, - "dev_class": "heater_central", - "location": "07d618f0bb80412687f065b8698ce3e7", - "dhw_modes": [ - "comfort", - "off" - ], - "maximum_boiler_temperature": { + "boiler_temperature": { + "current": 48.0, "lower_bound": 0.0, "resolution": 1.0, "setpoint": 80.0, "upper_bound": 100.0 }, + "dev_class": "heater_central", + "dhw_modes": [ + "comfort", + "off" + ], + "location": "07d618f0bb80412687f065b8698ce3e7", "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 0.0, - "water_temperature": 48.0 + "intended_boiler_temperature": 0.0 } }, "aa6b0002df0a46e1b1eb94beb61eddfe": { From b66a78a89b08b93ebc30eb9fcc918299b42f6da0 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:30:55 +0200 Subject: [PATCH 11/38] Correct items_count --- plugwise/helper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugwise/helper.py b/plugwise/helper.py index 88d967066..a9a2a0b82 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -595,6 +595,7 @@ def _get_actuator_functionalities( data["sensors"].pop("dhw_temperature") elif "water_temperature" in data["sensors"]: temp_dict["current"] = data["sensors"]["water_temperature"] + self._count += 1 if item == "maximum_boiler_temperature": item = "boiler_temperature" From 0c004ead9eaf60e5e78cb8695112f029df0caadd Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:36:28 +0200 Subject: [PATCH 12/38] Update entity_items assert --- tests/test_adam.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_adam.py b/tests/test_adam.py index 1ef525961..fd7a471f8 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -441,7 +441,7 @@ async def test_adam_plus_jip(self): test_items = await self.device_test(api, "2021-06-20 00:00:01", testdata) assert api.gateway_id == "b5c2386c6f6342669e50fe49dd05b188" - assert self.entity_items == 270 + assert self.entity_items == 271 assert test_items == self.entity_items # Negative test From 606ee415b17a748297ba2904027a24c44cdaea2b Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:37:51 +0200 Subject: [PATCH 13/38] Update test-json --- tests/data/anna/anna_v4.json | 42 ++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/tests/data/anna/anna_v4.json b/tests/data/anna/anna_v4.json index 09f295bad..fbf163590 100644 --- a/tests/data/anna/anna_v4.json +++ b/tests/data/anna/anna_v4.json @@ -1,7 +1,11 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], + "available_schedules": [ + "Standaard", + "Thuiswerken", + "off" + ], "climate_mode": "heat", "control_state": "heating", "dev_class": "thermostat", @@ -10,7 +14,13 @@ "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "preset_modes": [ + "vacation", + "no_frost", + "away", + "asleep", + "home" + ], "select_schedule": "off", "sensors": { "illuminance": 60.0, @@ -56,31 +66,35 @@ "flame_state": false, "heating_state": true }, + "boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", - "dhw_modes": ["comfort", "off"], - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "max_dhw_temperature": { + "dhw_mode": "off", + "dhw_modes": [ + "comfort", + "off" + ], + "dhw_temperature": { + "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 70.0, - "upper_bound": 100.0 - }, + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", - "dhw_mode": "off", "sensors": { "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2, - "water_temperature": 45.0 + "water_pressure": 2.2 }, "vendor": "Bosch Thermotechniek B.V." } From a157d7fb18429765ad83171fc259bd6ac7171033 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:38:58 +0200 Subject: [PATCH 14/38] Update entity_items assert --- tests/test_anna.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_anna.py b/tests/test_anna.py index 464d2e277..dad9cecd0 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -29,7 +29,7 @@ async def test_connect_anna_v4(self): await self.device_test(api, "2020-04-05 00:00:01", testdata) assert api.gateway_id == "0466eae8520144c78afb29628384edeb" - assert self.entity_items == 61 + assert self.entity_items == 62 assert not self.notifications assert not self.cooling_present From 9742a417005657527abadc103fccadce62173a4a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:42:43 +0200 Subject: [PATCH 15/38] Update test-jsons --- tests/data/anna/anna_v4_UPDATED_DATA.json | 11 +++--- tests/data/anna/anna_v4_dhw.json | 42 +++++++++++++++-------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/tests/data/anna/anna_v4_UPDATED_DATA.json b/tests/data/anna/anna_v4_UPDATED_DATA.json index e36a6e5b1..e90e5f6a2 100644 --- a/tests/data/anna/anna_v4_UPDATED_DATA.json +++ b/tests/data/anna/anna_v4_UPDATED_DATA.json @@ -1,13 +1,16 @@ { "cd0e6156b1f04d5f952349ffbe397481": { - "dhw_modes": ["comfort", "off"], - "maximum_boiler_temperature": { + "boiler_temperature": { + "current": 51.0, "setpoint": 69.0, "lower_bound": 0.0, "upper_bound": 100.0, "resolution": 1.0 }, - "max_dhw_temperature": { + "dhw_mode": "comfort", + "dhw_modes": ["comfort", "off"], + "dhw_temperature": { + "current": 51.0, "setpoint": 59.0, "lower_bound": 30.0, "upper_bound": 60.0, @@ -18,9 +21,7 @@ "heating_state": false, "flame_state": false }, - "dhw_mode": "comfort", "sensors": { - "water_temperature": 51.0, "intended_boiler_temperature": 0.0, "modulation_level": 0, "return_temperature": 41.0, diff --git a/tests/data/anna/anna_v4_dhw.json b/tests/data/anna/anna_v4_dhw.json index dc8ba3858..6ec073250 100644 --- a/tests/data/anna/anna_v4_dhw.json +++ b/tests/data/anna/anna_v4_dhw.json @@ -1,7 +1,11 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], + "available_schedules": [ + "Standaard", + "Thuiswerken", + "off" + ], "climate_mode": "heat", "control_state": "idle", "dev_class": "thermostat", @@ -10,7 +14,13 @@ "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "preset_modes": [ + "vacation", + "no_frost", + "away", + "asleep", + "home" + ], "select_schedule": "off", "sensors": { "illuminance": 60.0, @@ -56,31 +66,35 @@ "flame_state": true, "heating_state": false }, + "boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", - "dhw_modes": ["comfort", "off"], - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "max_dhw_temperature": { + "dhw_mode": "off", + "dhw_modes": [ + "comfort", + "off" + ], + "dhw_temperature": { + "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 70.0, - "upper_bound": 100.0 - }, + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", - "dhw_mode": "off", "sensors": { "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2, - "water_temperature": 45.0 + "water_pressure": 2.2 }, "vendor": "Bosch Thermotechniek B.V." } From 3c408bdd3b2001726c0f7ec373bbdf5140e39214 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:44:26 +0200 Subject: [PATCH 16/38] Update entity_items assert --- tests/test_anna.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_anna.py b/tests/test_anna.py index dad9cecd0..855bc353e 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -101,7 +101,7 @@ async def test_connect_anna_v4_dhw(self): ) await self.device_test(api, "2020-04-05 00:00:01", testdata) - assert self.entity_items == 61 + assert self.entity_items == 62 assert not self.notifications result = await self.tinker_thermostat( From 705547e0730ae7c90b673a3030d6552649b43637 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:45:31 +0200 Subject: [PATCH 17/38] Update test-json --- tests/data/anna/anna_v4_no_tag.json | 42 +++++++++++++++++++---------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/tests/data/anna/anna_v4_no_tag.json b/tests/data/anna/anna_v4_no_tag.json index d9a500cfc..e862f44c0 100644 --- a/tests/data/anna/anna_v4_no_tag.json +++ b/tests/data/anna/anna_v4_no_tag.json @@ -1,7 +1,11 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], + "available_schedules": [ + "Standaard", + "Thuiswerken", + "off" + ], "climate_mode": "auto", "control_state": "heating", "dev_class": "thermostat", @@ -10,7 +14,13 @@ "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "preset_modes": [ + "vacation", + "no_frost", + "away", + "asleep", + "home" + ], "select_schedule": "Thuiswerken", "sensors": { "illuminance": 60.0, @@ -56,31 +66,35 @@ "flame_state": false, "heating_state": true }, + "boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", - "dhw_modes": ["comfort", "off"], - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "max_dhw_temperature": { + "dhw_mode": "off", + "dhw_modes": [ + "comfort", + "off" + ], + "dhw_temperature": { + "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 70.0, - "upper_bound": 100.0 - }, + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", - "dhw_mode": "off", "sensors": { "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2, - "water_temperature": 45.0 + "water_pressure": 2.2 }, "vendor": "Bosch Thermotechniek B.V." } From 2f5beaf5abb5f47a8cdf9e55eb4415b444de5c6f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:46:36 +0200 Subject: [PATCH 18/38] Update entity_items assert --- tests/test_anna.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_anna.py b/tests/test_anna.py index 855bc353e..4e47fe965 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -130,7 +130,7 @@ async def test_connect_anna_v4_no_tag(self): ) await self.device_test(api, "2020-04-05 00:00:01", testdata) - assert self.entity_items == 61 + assert self.entity_items == 62 result = await self.tinker_thermostat( api, From 04097f007fadd721b3d0cccedc9ad6a54a5de6eb Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 09:47:44 +0200 Subject: [PATCH 19/38] update test-jsons --- tests/data/anna/anna_elga_2_cooling.json | 29 ++++++++---- .../anna_elga_2_cooling_UPDATED_DATA.json | 18 ++++---- tests/data/anna/anna_elga_2_schedule_off.json | 29 ++++++++---- tests/data/anna/anna_elga_no_cooling.json | 37 +++++++++------ tests/data/anna/anna_heatpump_cooling.json | 29 ++++++++---- .../anna_heatpump_cooling_fake_firmware.json | 29 ++++++++---- tests/data/anna/anna_heatpump_heating.json | 37 +++++++++------ .../anna_heatpump_heating_UPDATED_DATA.json | 17 ++++--- .../data/anna/anna_loria_cooling_active.json | 46 +++++++++++++------ tests/data/anna/anna_loria_driessens.json | 40 ++++++++++------ tests/data/anna/anna_loria_heating_idle.json | 46 +++++++++++++------ 11 files changed, 227 insertions(+), 130 deletions(-) diff --git a/tests/data/anna/anna_elga_2_cooling.json b/tests/data/anna/anna_elga_2_cooling.json index 1910f9e8c..593f4e7e4 100644 --- a/tests/data/anna/anna_elga_2_cooling.json +++ b/tests/data/anna/anna_elga_2_cooling.json @@ -10,18 +10,19 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "d34dfe6ab90b410c98068e75de3eb631", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", @@ -31,14 +32,16 @@ "modulation_level": 0.0, "outdoor_air_temperature": 30.0, "return_temperature": 23.4, - "water_pressure": 0.5, - "water_temperature": 22.8 + "water_pressure": 0.5 }, "vendor": "Techneco" }, "ebd90df1ab334565b5895f37590ccff4": { "active_preset": "home", - "available_schedules": ["Thermostat schedule", "off"], + "available_schedules": [ + "Thermostat schedule", + "off" + ], "climate_mode": "auto", "control_state": "cooling", "dev_class": "thermostat", @@ -47,7 +50,13 @@ "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "preset_modes": [ + "away", + "no_frost", + "vacation", + "home", + "asleep" + ], "select_schedule": "Thermostat schedule", "sensors": { "cooling_activation_outdoor_temperature": 26.0, diff --git a/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json b/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json index 446c24759..3c5177e11 100644 --- a/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json +++ b/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json @@ -10,29 +10,29 @@ "heating_state": true, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "d34dfe6ab90b410c98068e75de3eb631", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, + "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", "sensors": { - "domestic_hot_water_setpoint": 60.0, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 3.0, "return_temperature": 23.4, - "water_pressure": 0.5, - "water_temperature": 22.8 + "water_pressure": 0.5 }, "vendor": "Techneco" }, diff --git a/tests/data/anna/anna_elga_2_schedule_off.json b/tests/data/anna/anna_elga_2_schedule_off.json index 0fa003651..a85239634 100644 --- a/tests/data/anna/anna_elga_2_schedule_off.json +++ b/tests/data/anna/anna_elga_2_schedule_off.json @@ -10,18 +10,19 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "d34dfe6ab90b410c98068e75de3eb631", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", @@ -31,14 +32,16 @@ "modulation_level": 0.0, "outdoor_air_temperature": 13.0, "return_temperature": 23.4, - "water_pressure": 0.5, - "water_temperature": 22.8 + "water_pressure": 0.5 }, "vendor": "Techneco" }, "ebd90df1ab334565b5895f37590ccff4": { "active_preset": "home", - "available_schedules": ["Thermostat schedule", "off"], + "available_schedules": [ + "Thermostat schedule", + "off" + ], "climate_mode": "heat_cool", "control_state": "idle", "dev_class": "thermostat", @@ -47,7 +50,13 @@ "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "preset_modes": [ + "away", + "no_frost", + "vacation", + "home", + "asleep" + ], "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 26.0, diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index 4bb9b040c..bcabda7d8 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -26,41 +26,44 @@ "heating_state": true, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", + "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "a57efe5f145f498c9be62a9b63626fbf", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, + "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater", "name": "OpenTherm", - "dhw_mode": "off", "sensors": { - "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, "return_temperature": 25.1, - "water_pressure": 1.57, - "water_temperature": 29.1 + "water_pressure": 1.57 }, "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", - "available_schedules": ["standaard", "off"], + "available_schedules": [ + "standaard", + "off" + ], "climate_mode": "auto", "control_state": "heating", "dev_class": "thermostat", @@ -69,7 +72,13 @@ "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "preset_modes": [ + "no_frost", + "home", + "away", + "asleep", + "vacation" + ], "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, diff --git a/tests/data/anna/anna_heatpump_cooling.json b/tests/data/anna/anna_heatpump_cooling.json index abdea92dc..4d8d36859 100644 --- a/tests/data/anna/anna_heatpump_cooling.json +++ b/tests/data/anna/anna_heatpump_cooling.json @@ -28,18 +28,19 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 24.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "a57efe5f145f498c9be62a9b63626fbf", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "off", @@ -50,14 +51,16 @@ "modulation_level": 40, "outdoor_air_temperature": 22.0, "return_temperature": 23.8, - "water_pressure": 1.61, - "water_temperature": 24.7 + "water_pressure": 1.61 }, "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", - "available_schedules": ["standaard", "off"], + "available_schedules": [ + "standaard", + "off" + ], "climate_mode": "heat_cool", "control_state": "cooling", "dev_class": "thermostat", @@ -66,7 +69,13 @@ "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "preset_modes": [ + "no_frost", + "home", + "away", + "asleep", + "vacation" + ], "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 21.0, diff --git a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json index 77eaab4e1..91b3875b2 100644 --- a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json +++ b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json @@ -28,18 +28,19 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 24.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "a57efe5f145f498c9be62a9b63626fbf", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "off", @@ -50,14 +51,16 @@ "modulation_level": 100, "outdoor_air_temperature": 22.0, "return_temperature": 23.8, - "water_pressure": 1.61, - "water_temperature": 24.7 + "water_pressure": 1.61 }, "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", - "available_schedules": ["standaard", "off"], + "available_schedules": [ + "standaard", + "off" + ], "climate_mode": "heat_cool", "control_state": "cooling", "dev_class": "thermostat", @@ -66,7 +69,13 @@ "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "preset_modes": [ + "no_frost", + "home", + "away", + "asleep", + "vacation" + ], "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 21.0, diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index d38345a3a..69ea20098 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -28,41 +28,44 @@ "heating_state": true, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", + "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "a57efe5f145f498c9be62a9b63626fbf", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, + "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", - "dhw_mode": "off", "sensors": { - "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, "return_temperature": 25.1, - "water_pressure": 1.57, - "water_temperature": 29.1 + "water_pressure": 1.57 }, "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { "active_preset": "home", - "available_schedules": ["standaard", "off"], + "available_schedules": [ + "standaard", + "off" + ], "climate_mode": "auto", "control_state": "heating", "dev_class": "thermostat", @@ -71,7 +74,13 @@ "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "preset_modes": [ + "no_frost", + "home", + "away", + "asleep", + "vacation" + ], "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, diff --git a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json index bb8c9aac8..fbf4401d7 100644 --- a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json +++ b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json @@ -1,5 +1,12 @@ { "1cbf783bb11e4a7c8a6843dee3a86927": { + "boiler_temperature": { + "current": 29.1, + "setpoint": 60.0, + "lower_bound": 0.0, + "upper_bound": 100.0, + "resolution": 1.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", @@ -9,12 +16,7 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "vendor": "Techneco", - "maximum_boiler_temperature": { - "setpoint": 60.0, - "lower_bound": 0.0, - "upper_bound": 100.0, - "resolution": 1.0 - }, + "available": true, "binary_sensors": { "dhw_state": false, @@ -27,9 +29,6 @@ }, "select_dhw_mode": "off", "sensors": { - "water_temperature": 29.1, - "domestic_hot_water_setpoint": 60.0, - "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "return_temperature": 25.1, diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index 1dcb2e851..13c3b2432 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -1,7 +1,11 @@ { "582dfbdace4d4aeb832923ce7d1ddda0": { "active_preset": "home", - "available_schedules": ["Winter", "Test ", "off"], + "available_schedules": [ + "Winter", + "Test ", + "off" + ], "climate_mode": "auto", "control_state": "cooling", "dev_class": "thermostat", @@ -10,7 +14,13 @@ "location": "15da035090b847e7a21f93e08c015ebc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], + "preset_modes": [ + "away", + "vacation", + "no_frost", + "home", + "asleep" + ], "select_schedule": "Winter", "sensors": { "illuminance": 45.0, @@ -60,32 +70,38 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 25.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, "dev_class": "heater_central", - "dhw_modes": ["off", "auto", "boost", "eco", "comfort"], - "location": "674b657c138a41a291d315d7471deb06", - "max_dhw_temperature": { + "dhw_mode": "auto", + "dhw_modes": [ + "off", + "auto", + "boost", + "eco", + "comfort" + ], + "dhw_temperature": { + "current": 52.9, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 40.0, - "upper_bound": 45.0 - }, + "location": "674b657c138a41a291d315d7471deb06", "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", - "dhw_mode": "auto", "sensors": { - "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 100, "outdoor_air_temperature": 17.2, - "return_temperature": 26.3, - "water_temperature": 25.3 + "return_temperature": 26.3 }, "switches": { "cooling_ena_switch": true diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index 3d665c289..96e480c17 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -34,7 +34,13 @@ "location": "fa70e08550c94de3a34feb27ecf31421", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "asleep", "vacation", "away", "home"], + "preset_modes": [ + "no_frost", + "asleep", + "vacation", + "away", + "home" + ], "select_schedule": "Verwarmen@9-23u", "sensors": { "illuminance": 5.5, @@ -66,32 +72,38 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 23.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 45.0, + "upper_bound": 45.0 + }, "dev_class": "heater_central", - "dhw_modes": ["comfort", "eco", "off", "boost", "auto"], - "location": "82c15f65c9bf44c592d69e16139355e3", - "max_dhw_temperature": { + "dhw_mode": "auto", + "dhw_modes": [ + "comfort", + "eco", + "off", + "boost", + "auto" + ], + "dhw_temperature": { + "current": 49.5, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 45.0, - "upper_bound": 45.0 - }, + "location": "82c15f65c9bf44c592d69e16139355e3", "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", - "dhw_mode": "auto", "sensors": { - "dhw_temperature": 49.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 7.5, - "return_temperature": 23.0, - "water_temperature": 23.3 + "return_temperature": 23.0 }, "switches": { "cooling_ena_switch": false diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index 628515d57..00fe5ba07 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -1,7 +1,11 @@ { "582dfbdace4d4aeb832923ce7d1ddda0": { "active_preset": "home", - "available_schedules": ["Winter", "Test ", "off"], + "available_schedules": [ + "Winter", + "Test ", + "off" + ], "climate_mode": "auto", "control_state": "idle", "dev_class": "thermostat", @@ -10,7 +14,13 @@ "location": "15da035090b847e7a21f93e08c015ebc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], + "preset_modes": [ + "away", + "vacation", + "no_frost", + "home", + "asleep" + ], "select_schedule": "Winter", "sensors": { "illuminance": 45.0, @@ -60,32 +70,38 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 25.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, "dev_class": "heater_central", - "dhw_modes": ["off", "auto", "boost", "eco", "comfort"], - "location": "674b657c138a41a291d315d7471deb06", - "max_dhw_temperature": { + "dhw_mode": "auto", + "dhw_modes": [ + "off", + "auto", + "boost", + "eco", + "comfort" + ], + "dhw_temperature": { + "current": 52.9, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 40.0, - "upper_bound": 45.0 - }, + "location": "674b657c138a41a291d315d7471deb06", "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", - "dhw_mode": "auto", "sensors": { - "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 17.2, - "return_temperature": 26.3, - "water_temperature": 25.3 + "return_temperature": 26.3 }, "switches": { "cooling_ena_switch": false From b907509806527ac2aa1473feabbe09b40ea3f54f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 10:16:09 +0200 Subject: [PATCH 20/38] Update classes for typing --- plugwise/constants.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugwise/constants.py b/plugwise/constants.py index 368ce7429..a5cfac2da 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -520,6 +520,7 @@ class ActuatorData(TypedDict, total=False): """Actuator data for thermostat types.""" control_state: str + current: float lower_bound: float regulation_control: str resolution: float @@ -589,6 +590,7 @@ class GwEntityData(TypedDict, total=False): binary_sensors: SmileBinarySensors boiler_temperature: ActuatorData dhw_temperature: ActuatorData + maximum_boiler_temperature: ActuatorData sensors: SmileSensors switches: SmileSwitches temperature_offset: ActuatorData From 3f6d2608abeedaf1a50c842cc5d479a3a4736f8d Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 13:15:15 +0200 Subject: [PATCH 21/38] Save updated fixtures --- fixtures/adam_bad_thermostat/data.json | 21 +++++++++++++----- fixtures/adam_heatpump_cooling/data.json | 22 +++++++++---------- fixtures/adam_jip/data.json | 21 +++++++++--------- .../data.json | 22 +++++++++---------- fixtures/adam_plus_anna/data.json | 16 +++++++------- fixtures/adam_plus_anna_new/data.json | 16 +++++++------- .../data.json | 16 +++++++------- fixtures/anna_elga_2_cooling/data.json | 16 +++++++------- fixtures/anna_elga_2_schedule_off/data.json | 16 +++++++------- fixtures/anna_elga_no_cooling/data.json | 22 +++++++++---------- fixtures/anna_heatpump_cooling/data.json | 16 +++++++------- .../data.json | 16 +++++++------- fixtures/anna_heatpump_heating/data.json | 22 +++++++++---------- fixtures/anna_loria_cooling_active/data.json | 22 +++++++++---------- fixtures/anna_loria_driessens/data.json | 22 +++++++++---------- fixtures/anna_loria_heating_idle/data.json | 22 +++++++++---------- fixtures/anna_v4/data.json | 21 +++++++++--------- fixtures/anna_v4_dhw/data.json | 21 +++++++++--------- fixtures/anna_v4_no_tag/data.json | 21 +++++++++--------- fixtures/m_adam_cooling/data.json | 13 ++++++----- fixtures/m_adam_heating/data.json | 13 ++++++----- .../m_adam_heating_off_schedule/data.json | 13 ++++++----- fixtures/m_adam_jip/data.json | 21 +++++++++--------- fixtures/m_anna_heatpump_cooling/data.json | 18 ++++++++------- fixtures/m_anna_heatpump_idle/data.json | 18 ++++++++------- 25 files changed, 245 insertions(+), 222 deletions(-) diff --git a/fixtures/adam_bad_thermostat/data.json b/fixtures/adam_bad_thermostat/data.json index f2f422c56..d4a158aeb 100644 --- a/fixtures/adam_bad_thermostat/data.json +++ b/fixtures/adam_bad_thermostat/data.json @@ -6,24 +6,35 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 20.9, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 38.0, + "upper_bound": 45.0 + }, "dev_class": "heater_central", + "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], + "dhw_temperature": { + "current": 49.9, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 50.0, + "upper_bound": 100.0 + }, "location": "856285a783f24bf4b2573c8bc510eabf", "model": "Generic heater", "model_id": "1.1", "name": "OpenTherm", - "select_dhw_mode": "off", "sensors": { - "dhw_temperature": 49.9, - "domestic_hot_water_setpoint": 50.0, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, - "return_temperature": 33.0, - "water_temperature": 20.9 + "return_temperature": 33.0 }, "vendor": "WeHeat" }, diff --git a/fixtures/adam_heatpump_cooling/data.json b/fixtures/adam_heatpump_cooling/data.json index 0102ce080..a31c1f9a8 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -54,36 +54,36 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 24.5, + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, "dev_class": "heater_central", "dhw_mode": "comfort", "dhw_modes": [ "comfort", "off" ], - "location": "eedadcb297564f1483faa509179aebed", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 63.5, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 65.0 }, - "maximum_boiler_temperature": { - "lower_bound": 7.0, - "resolution": 0.01, - "setpoint": 35.0, - "upper_bound": 50.0 - }, + "location": "eedadcb297564f1483faa509179aebed", "model": "Generic heater/cooler", "model_id": "17.1", "name": "OpenTherm", "sensors": { - "dhw_temperature": 63.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.5, "return_temperature": 24.9, - "water_pressure": 2.0, - "water_temperature": 24.5 + "water_pressure": 2.0 }, "vendor": "Remeha B.V." }, diff --git a/fixtures/adam_jip/data.json b/fixtures/adam_jip/data.json index bbf89908e..391d28bbd 100644 --- a/fixtures/adam_jip/data.json +++ b/fixtures/adam_jip/data.json @@ -393,25 +393,27 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 37.3, + "lower_bound": 20.0, + "resolution": 0.01, + "setpoint": 90.0, + "upper_bound": 90.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "9e4433a9d69f40b3aefd15e74395eaec", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 37.3, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 20.0, - "resolution": 0.01, - "setpoint": 90.0, - "upper_bound": 90.0 - }, + "location": "9e4433a9d69f40b3aefd15e74395eaec", "model": "Generic heater", "model_id": "10.20", "name": "OpenTherm", @@ -419,8 +421,7 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "return_temperature": 37.1, - "water_pressure": 1.4, - "water_temperature": 37.3 + "water_pressure": 1.4 }, "vendor": "Remeha B.V." }, diff --git a/fixtures/adam_onoff_cooling_fake_firmware/data.json b/fixtures/adam_onoff_cooling_fake_firmware/data.json index c35ef647f..f69d3abd6 100644 --- a/fixtures/adam_onoff_cooling_fake_firmware/data.json +++ b/fixtures/adam_onoff_cooling_fake_firmware/data.json @@ -7,35 +7,35 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 24.5, + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, "dev_class": "heater_central", "dhw_mode": "comfort", "dhw_modes": [ "comfort", "off" ], - "location": "eedadcb297564f1483faa509179aebed", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 63.5, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 65.0 }, - "maximum_boiler_temperature": { - "lower_bound": 7.0, - "resolution": 0.01, - "setpoint": 35.0, - "upper_bound": 50.0 - }, + "location": "eedadcb297564f1483faa509179aebed", "model": "Unknown", "name": "OnOff", "sensors": { - "dhw_temperature": 63.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.5, "return_temperature": 24.9, - "water_pressure": 2.0, - "water_temperature": 24.5 + "water_pressure": 2.0 } }, "7d97fc3117784cfdafe347bcedcbbbcb": { diff --git a/fixtures/adam_plus_anna/data.json b/fixtures/adam_plus_anna/data.json index 22986758b..ea3f22917 100644 --- a/fixtures/adam_plus_anna/data.json +++ b/fixtures/adam_plus_anna/data.json @@ -44,24 +44,24 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 48.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 80.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "07d618f0bb80412687f065b8698ce3e7", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 80.0, - "upper_bound": 100.0 - }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 0.0, - "water_temperature": 48.0 + "intended_boiler_temperature": 0.0 } }, "aa6b0002df0a46e1b1eb94beb61eddfe": { diff --git a/fixtures/adam_plus_anna_new/data.json b/fixtures/adam_plus_anna_new/data.json index 56c7ffbb0..5a199f12a 100644 --- a/fixtures/adam_plus_anna_new/data.json +++ b/fixtures/adam_plus_anna_new/data.json @@ -6,24 +6,24 @@ "flame_state": true, "heating_state": true }, + "boiler_temperature": { + "current": 43.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "bc93488efab249e5bc54fd7e175a6f91", - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 - }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 22.5, - "water_temperature": 43.0 + "intended_boiler_temperature": 22.5 } }, "10016900610d4c7481df78c89606ef22": { diff --git a/fixtures/adam_plus_anna_new_regulation_off/data.json b/fixtures/adam_plus_anna_new_regulation_off/data.json index dab5f22f7..b9a5f2303 100644 --- a/fixtures/adam_plus_anna_new_regulation_off/data.json +++ b/fixtures/adam_plus_anna_new_regulation_off/data.json @@ -6,24 +6,24 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 30.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "bc93488efab249e5bc54fd7e175a6f91", - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 - }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 0.0, - "water_temperature": 30.0 + "intended_boiler_temperature": 0.0 } }, "10016900610d4c7481df78c89606ef22": { diff --git a/fixtures/anna_elga_2_cooling/data.json b/fixtures/anna_elga_2_cooling/data.json index 235d0bce5..593f4e7e4 100644 --- a/fixtures/anna_elga_2_cooling/data.json +++ b/fixtures/anna_elga_2_cooling/data.json @@ -10,18 +10,19 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "d34dfe6ab90b410c98068e75de3eb631", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", @@ -31,8 +32,7 @@ "modulation_level": 0.0, "outdoor_air_temperature": 30.0, "return_temperature": 23.4, - "water_pressure": 0.5, - "water_temperature": 22.8 + "water_pressure": 0.5 }, "vendor": "Techneco" }, diff --git a/fixtures/anna_elga_2_schedule_off/data.json b/fixtures/anna_elga_2_schedule_off/data.json index 1da73a1fa..a85239634 100644 --- a/fixtures/anna_elga_2_schedule_off/data.json +++ b/fixtures/anna_elga_2_schedule_off/data.json @@ -10,18 +10,19 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "d34dfe6ab90b410c98068e75de3eb631", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", @@ -31,8 +32,7 @@ "modulation_level": 0.0, "outdoor_air_temperature": 13.0, "return_temperature": 23.4, - "water_pressure": 0.5, - "water_temperature": 22.8 + "water_pressure": 0.5 }, "vendor": "Techneco" }, diff --git a/fixtures/anna_elga_no_cooling/data.json b/fixtures/anna_elga_no_cooling/data.json index 4a19bb86e..bcabda7d8 100644 --- a/fixtures/anna_elga_no_cooling/data.json +++ b/fixtures/anna_elga_no_cooling/data.json @@ -26,35 +26,35 @@ "heating_state": true, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "a57efe5f145f498c9be62a9b63626fbf", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, + "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater", "name": "OpenTherm", "sensors": { - "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, "return_temperature": 25.1, - "water_pressure": 1.57, - "water_temperature": 29.1 + "water_pressure": 1.57 }, "vendor": "Techneco" }, diff --git a/fixtures/anna_heatpump_cooling/data.json b/fixtures/anna_heatpump_cooling/data.json index 7c03b25d2..4d8d36859 100644 --- a/fixtures/anna_heatpump_cooling/data.json +++ b/fixtures/anna_heatpump_cooling/data.json @@ -28,18 +28,19 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 24.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "a57efe5f145f498c9be62a9b63626fbf", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "off", @@ -50,8 +51,7 @@ "modulation_level": 40, "outdoor_air_temperature": 22.0, "return_temperature": 23.8, - "water_pressure": 1.61, - "water_temperature": 24.7 + "water_pressure": 1.61 }, "vendor": "Techneco" }, diff --git a/fixtures/anna_heatpump_cooling_fake_firmware/data.json b/fixtures/anna_heatpump_cooling_fake_firmware/data.json index e2865ce40..91b3875b2 100644 --- a/fixtures/anna_heatpump_cooling_fake_firmware/data.json +++ b/fixtures/anna_heatpump_cooling_fake_firmware/data.json @@ -28,18 +28,19 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 24.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "a57efe5f145f498c9be62a9b63626fbf", - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "off", @@ -50,8 +51,7 @@ "modulation_level": 100, "outdoor_air_temperature": 22.0, "return_temperature": 23.8, - "water_pressure": 1.61, - "water_temperature": 24.7 + "water_pressure": 1.61 }, "vendor": "Techneco" }, diff --git a/fixtures/anna_heatpump_heating/data.json b/fixtures/anna_heatpump_heating/data.json index 54a045273..69ea20098 100644 --- a/fixtures/anna_heatpump_heating/data.json +++ b/fixtures/anna_heatpump_heating/data.json @@ -28,35 +28,35 @@ "heating_state": true, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "a57efe5f145f498c9be62a9b63626fbf", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, + "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { - "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, "return_temperature": 25.1, - "water_pressure": 1.57, - "water_temperature": 29.1 + "water_pressure": 1.57 }, "vendor": "Techneco" }, diff --git a/fixtures/anna_loria_cooling_active/data.json b/fixtures/anna_loria_cooling_active/data.json index f46113d09..13c3b2432 100644 --- a/fixtures/anna_loria_cooling_active/data.json +++ b/fixtures/anna_loria_cooling_active/data.json @@ -70,6 +70,13 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 25.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, "dev_class": "heater_central", "dhw_mode": "auto", "dhw_modes": [ @@ -79,29 +86,22 @@ "eco", "comfort" ], - "location": "674b657c138a41a291d315d7471deb06", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 52.9, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 40.0, - "upper_bound": 45.0 - }, + "location": "674b657c138a41a291d315d7471deb06", "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", "sensors": { - "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 100, "outdoor_air_temperature": 17.2, - "return_temperature": 26.3, - "water_temperature": 25.3 + "return_temperature": 26.3 }, "switches": { "cooling_ena_switch": true diff --git a/fixtures/anna_loria_driessens/data.json b/fixtures/anna_loria_driessens/data.json index 31d518a8f..96e480c17 100644 --- a/fixtures/anna_loria_driessens/data.json +++ b/fixtures/anna_loria_driessens/data.json @@ -72,6 +72,13 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 23.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 45.0, + "upper_bound": 45.0 + }, "dev_class": "heater_central", "dhw_mode": "auto", "dhw_modes": [ @@ -81,29 +88,22 @@ "boost", "auto" ], - "location": "82c15f65c9bf44c592d69e16139355e3", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 49.5, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 45.0, - "upper_bound": 45.0 - }, + "location": "82c15f65c9bf44c592d69e16139355e3", "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", "sensors": { - "dhw_temperature": 49.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 7.5, - "return_temperature": 23.0, - "water_temperature": 23.3 + "return_temperature": 23.0 }, "switches": { "cooling_ena_switch": false diff --git a/fixtures/anna_loria_heating_idle/data.json b/fixtures/anna_loria_heating_idle/data.json index c13abbbcf..00fe5ba07 100644 --- a/fixtures/anna_loria_heating_idle/data.json +++ b/fixtures/anna_loria_heating_idle/data.json @@ -70,6 +70,13 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 25.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, "dev_class": "heater_central", "dhw_mode": "auto", "dhw_modes": [ @@ -79,29 +86,22 @@ "eco", "comfort" ], - "location": "674b657c138a41a291d315d7471deb06", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 52.9, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 40.0, - "upper_bound": 45.0 - }, + "location": "674b657c138a41a291d315d7471deb06", "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", "sensors": { - "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 17.2, - "return_temperature": 26.3, - "water_temperature": 25.3 + "return_temperature": 26.3 }, "switches": { "cooling_ena_switch": false diff --git a/fixtures/anna_v4/data.json b/fixtures/anna_v4/data.json index 563560b49..fbf163590 100644 --- a/fixtures/anna_v4/data.json +++ b/fixtures/anna_v4/data.json @@ -66,25 +66,27 @@ "flame_state": false, "heating_state": true }, + "boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 70.0, - "upper_bound": 100.0 - }, + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -92,8 +94,7 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2, - "water_temperature": 45.0 + "water_pressure": 2.2 }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/fixtures/anna_v4_dhw/data.json b/fixtures/anna_v4_dhw/data.json index 9c1f13360..6ec073250 100644 --- a/fixtures/anna_v4_dhw/data.json +++ b/fixtures/anna_v4_dhw/data.json @@ -66,25 +66,27 @@ "flame_state": true, "heating_state": false }, + "boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 70.0, - "upper_bound": 100.0 - }, + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -92,8 +94,7 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2, - "water_temperature": 45.0 + "water_pressure": 2.2 }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/fixtures/anna_v4_no_tag/data.json b/fixtures/anna_v4_no_tag/data.json index 8fe2f6606..e862f44c0 100644 --- a/fixtures/anna_v4_no_tag/data.json +++ b/fixtures/anna_v4_no_tag/data.json @@ -66,25 +66,27 @@ "flame_state": false, "heating_state": true }, + "boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 70.0, - "upper_bound": 100.0 - }, + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -92,8 +94,7 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2, - "water_temperature": 45.0 + "water_pressure": 2.2 }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/fixtures/m_adam_cooling/data.json b/fixtures/m_adam_cooling/data.json index c5b321660..082ab0344 100644 --- a/fixtures/m_adam_cooling/data.json +++ b/fixtures/m_adam_cooling/data.json @@ -7,18 +7,19 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 43.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "off" ], "location": "bc93488efab249e5bc54fd7e175a6f91", - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 - }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index f29aa84c7..9aae52f76 100644 --- a/fixtures/m_adam_heating/data.json +++ b/fixtures/m_adam_heating/data.json @@ -6,6 +6,13 @@ "flame_state": false, "heating_state": true }, + "boiler_temperature": { + "current": 43.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", @@ -18,12 +25,6 @@ "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 - }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index aaabc1495..44c46afd7 100644 --- a/fixtures/m_adam_heating_off_schedule/data.json +++ b/fixtures/m_adam_heating_off_schedule/data.json @@ -6,6 +6,13 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 43.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "dev_class": "heater_central", "dhw_modes": [ "comfort", @@ -18,12 +25,6 @@ "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 - }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", diff --git a/fixtures/m_adam_jip/data.json b/fixtures/m_adam_jip/data.json index ff33d77c2..fd2ccd4dc 100644 --- a/fixtures/m_adam_jip/data.json +++ b/fixtures/m_adam_jip/data.json @@ -392,25 +392,27 @@ "flame_state": false, "heating_state": false }, + "boiler_temperature": { + "current": 37.3, + "lower_bound": 20.0, + "resolution": 0.01, + "setpoint": 90.0, + "upper_bound": 90.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "9e4433a9d69f40b3aefd15e74395eaec", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 37.3, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 20.0, - "resolution": 0.01, - "setpoint": 90.0, - "upper_bound": 90.0 - }, + "location": "9e4433a9d69f40b3aefd15e74395eaec", "model": "Generic heater", "model_id": "10.20", "name": "OpenTherm", @@ -418,8 +420,7 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "return_temperature": 37.1, - "water_pressure": 1.4, - "water_temperature": 37.3 + "water_pressure": 1.4 }, "vendor": "Remeha B.V." }, diff --git a/fixtures/m_anna_heatpump_cooling/data.json b/fixtures/m_anna_heatpump_cooling/data.json index fb4085270..254356df9 100644 --- a/fixtures/m_anna_heatpump_cooling/data.json +++ b/fixtures/m_anna_heatpump_cooling/data.json @@ -28,25 +28,27 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "a57efe5f145f498c9be62a9b63626fbf", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, + "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index e50349146..f403c6cb1 100644 --- a/fixtures/m_anna_heatpump_idle/data.json +++ b/fixtures/m_anna_heatpump_idle/data.json @@ -28,25 +28,27 @@ "heating_state": false, "secondary_boiler_state": false }, + "boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "dev_class": "heater_central", "dhw_mode": "off", "dhw_modes": [ "comfort", "off" ], - "location": "a57efe5f145f498c9be62a9b63626fbf", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "maximum_boiler_temperature": { - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, + "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { From 4cf9064b6ab54ac3c02326c0c00535202691932a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 13:21:22 +0200 Subject: [PATCH 22/38] Legacy has no dhw_temperature dict --- plugwise/legacy/helper.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/plugwise/legacy/helper.py b/plugwise/legacy/helper.py index 4f3c806c3..b0c4668e5 100644 --- a/plugwise/legacy/helper.py +++ b/plugwise/legacy/helper.py @@ -346,13 +346,6 @@ def _get_actuator_functionalities( ) -> None: """Helper-function for _get_measurement_data().""" for item in ACTIVE_ACTUATORS: - # Skip max_dhw_temperature, not initially valid, - # skip thermostat for thermo_sensors - if item == "max_dhw_temperature" or ( - item == "thermostat" and entity["dev_class"] == "thermo_sensor" - ): - continue - temp_dict: ActuatorData = {} functionality = "thermostat_functionality" From cac0f50b8743412c5412aa1bf84d71dd91dd4f4c Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 13:40:55 +0200 Subject: [PATCH 23/38] Reduce complexity --- plugwise/helper.py | 49 +++++++++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index a9a2a0b82..e60410588 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -583,29 +583,38 @@ def _get_actuator_functionalities( temp_dict[act_key] = str(pw_function.text) if temp_dict: - # If domestic_hot_water_setpoint is present as actuator, - # rename and remove as sensor - if item == DHW_SETPOINT: - item = "dhw_temperature" - if DHW_SETPOINT in data["sensors"]: - data["sensors"].pop(DHW_SETPOINT) - self._count -= 1 - if "dhw_temperature" in data["sensors"]: - temp_dict["current"] = data["sensors"]["dhw_temperature"] - data["sensors"].pop("dhw_temperature") - elif "water_temperature" in data["sensors"]: - temp_dict["current"] = data["sensors"]["water_temperature"] - self._count += 1 - - if item == "maximum_boiler_temperature": - item = "boiler_temperature" - if "water_temperature" in data["sensors"]: - temp_dict["current"] = data["sensors"]["water_temperature"] - data["sensors"].pop("water_temperature") - + item, temp_dict = self._create_special_dicts(item, data, temp_dict) act_item = cast(ActuatorType, item) data[act_item] = temp_dict + def _create_special_dicts( + self, item: str, data: GwEntityData, temp_dict: ActuatorData + ) -> tuple[str, ActuatorData]: + """Create dhw_temperature and boiler_temperature dicts. + + The initial item-names are updated and a current key is added. + Also, the copied sensor data is removed. + """ + if item == DHW_SETPOINT: + item = "dhw_temperature" + if DHW_SETPOINT in data["sensors"]: + data["sensors"].pop(DHW_SETPOINT) + self._count -= 1 + if "dhw_temperature" in data["sensors"]: + temp_dict["current"] = data["sensors"]["dhw_temperature"] + data["sensors"].pop("dhw_temperature") + elif "water_temperature" in data["sensors"]: + temp_dict["current"] = data["sensors"]["water_temperature"] + self._count += 1 + + if item == "maximum_boiler_temperature": + item = "boiler_temperature" + if "water_temperature" in data["sensors"]: + temp_dict["current"] = data["sensors"]["water_temperature"] + data["sensors"].pop("water_temperature") + + return item, temp_dict + def _get_actuator_mode( self, appliance: etree.Element, entity_id: str, key: str ) -> str | None: From 8e0c6c21e09ba902241c05687b7f6e629127b83c Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 17:56:12 +0200 Subject: [PATCH 24/38] Update manual_fixtures.py --- scripts/manual_fixtures.py | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/scripts/manual_fixtures.py b/scripts/manual_fixtures.py index 77ad53935..5149001c9 100755 --- a/scripts/manual_fixtures.py +++ b/scripts/manual_fixtures.py @@ -127,9 +127,7 @@ def json_writer(manual_name: str, output: dict) -> None: m_adam_cooling["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"]["flame_state"] = ( False ) -m_adam_cooling["056ee145a816487eaa69243c3280f8bf"]["sensors"]["water_temperature"] = ( - 19.0 -) +m_adam_cooling["056ee145a816487eaa69243c3280f8bf"]["boiler_temperature"]["current"] = 19.0 m_adam_cooling["056ee145a816487eaa69243c3280f8bf"]["sensors"][ "intended_boiler_temperature" ] = 17.5 @@ -184,13 +182,12 @@ def json_writer(manual_name: str, output: dict) -> None: m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"]["flame_state"] = ( False ) -m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["sensors"]["water_temperature"] = ( - 37.0 -) +m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["boiler_temperature"]["current"] = 37.0 m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["sensors"][ "intended_boiler_temperature" ] = 38.1 -m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["max_dhw_temperature"] = { +m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["dhw_temperature"] = { + "current": 37.0, "setpoint": 60.0, "lower_bound": 40.0, "upper_bound": 60.0, @@ -247,12 +244,8 @@ def json_writer(manual_name: str, output: dict) -> None: "cooling_state" ] = True -m_anna_heatpump_cooling["1cbf783bb11e4a7c8a6843dee3a86927"]["sensors"][ - "water_temperature" -] = 22.7 -m_anna_heatpump_cooling["1cbf783bb11e4a7c8a6843dee3a86927"]["sensors"][ - "dhw_temperature" -] = 41.5 +m_anna_heatpump_cooling["1cbf783bb11e4a7c8a6843dee3a86927"]["boiler_temperature"]["current"] = 22.7 +m_anna_heatpump_cooling["1cbf783bb11e4a7c8a6843dee3a86927"]["dhw_temperature"]["current"] = 41.5 m_anna_heatpump_cooling["1cbf783bb11e4a7c8a6843dee3a86927"]["sensors"][ "intended_boiler_temperature" ] = 0.0 @@ -304,12 +297,8 @@ def json_writer(manual_name: str, output: dict) -> None: "cooling_state" ] = False -m_anna_heatpump_idle["1cbf783bb11e4a7c8a6843dee3a86927"]["sensors"][ - "water_temperature" -] = 19.1 -m_anna_heatpump_idle["1cbf783bb11e4a7c8a6843dee3a86927"]["sensors"][ - "dhw_temperature" -] = 46.3 +m_anna_heatpump_idle["1cbf783bb11e4a7c8a6843dee3a86927"]["boiler_temperature"]["current"] = 19.1 +m_anna_heatpump_idle["1cbf783bb11e4a7c8a6843dee3a86927"]["dhw_temperature"]["current"] = 46.3 m_anna_heatpump_idle["1cbf783bb11e4a7c8a6843dee3a86927"]["sensors"][ "intended_boiler_temperature" ] = 18.0 From abb089b401d93fe9b864c5e1582b315ab44feafb Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 18:08:22 +0200 Subject: [PATCH 25/38] Save correctly update manual fixtures --- fixtures/m_adam_cooling/data.json | 5 ++--- fixtures/m_adam_heating/data.json | 10 +++++----- fixtures/m_adam_heating_off_schedule/data.json | 10 +++++----- fixtures/m_anna_heatpump_cooling/data.json | 8 +++----- fixtures/m_anna_heatpump_idle/data.json | 6 ++---- 5 files changed, 17 insertions(+), 22 deletions(-) diff --git a/fixtures/m_adam_cooling/data.json b/fixtures/m_adam_cooling/data.json index 082ab0344..c388b60a6 100644 --- a/fixtures/m_adam_cooling/data.json +++ b/fixtures/m_adam_cooling/data.json @@ -8,7 +8,7 @@ "heating_state": false }, "boiler_temperature": { - "current": 43.0, + "current": 19.0, "lower_bound": 25.0, "resolution": 0.01, "setpoint": 50.0, @@ -24,8 +24,7 @@ "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 17.5, - "water_temperature": 19.0 + "intended_boiler_temperature": 17.5 } }, "14df5c4dc8cb4ba69f9d1ac0eaf7c5c6": { diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index 9aae52f76..a45d345d8 100644 --- a/fixtures/m_adam_heating/data.json +++ b/fixtures/m_adam_heating/data.json @@ -7,7 +7,7 @@ "heating_state": true }, "boiler_temperature": { - "current": 43.0, + "current": 37.0, "lower_bound": 25.0, "resolution": 0.01, "setpoint": 50.0, @@ -18,19 +18,19 @@ "comfort", "off" ], - "location": "bc93488efab249e5bc54fd7e175a6f91", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 37.0, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, + "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 38.1, - "water_temperature": 37.0 + "intended_boiler_temperature": 38.1 } }, "14df5c4dc8cb4ba69f9d1ac0eaf7c5c6": { diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index 44c46afd7..a3c7095c4 100644 --- a/fixtures/m_adam_heating_off_schedule/data.json +++ b/fixtures/m_adam_heating_off_schedule/data.json @@ -7,7 +7,7 @@ "heating_state": false }, "boiler_temperature": { - "current": 43.0, + "current": 37.0, "lower_bound": 25.0, "resolution": 0.01, "setpoint": 50.0, @@ -18,19 +18,19 @@ "comfort", "off" ], - "location": "bc93488efab249e5bc54fd7e175a6f91", - "max_dhw_temperature": { + "dhw_temperature": { + "current": 37.0, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, + "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "off", "sensors": { - "intended_boiler_temperature": 0.0, - "water_temperature": 37.0 + "intended_boiler_temperature": 0.0 } }, "14df5c4dc8cb4ba69f9d1ac0eaf7c5c6": { diff --git a/fixtures/m_anna_heatpump_cooling/data.json b/fixtures/m_anna_heatpump_cooling/data.json index 254356df9..44729c758 100644 --- a/fixtures/m_anna_heatpump_cooling/data.json +++ b/fixtures/m_anna_heatpump_cooling/data.json @@ -29,7 +29,7 @@ "secondary_boiler_state": false }, "boiler_temperature": { - "current": 29.1, + "current": 22.7, "lower_bound": 0.0, "resolution": 1.0, "setpoint": 60.0, @@ -42,7 +42,7 @@ "off" ], "dhw_temperature": { - "current": 46.3, + "current": 41.5, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, @@ -52,13 +52,11 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { - "dhw_temperature": 41.5, "intended_boiler_temperature": 0.0, "modulation_level": 40, "outdoor_air_temperature": 28.0, "return_temperature": 23.8, - "water_pressure": 1.57, - "water_temperature": 22.7 + "water_pressure": 1.57 }, "vendor": "Techneco" }, diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index f403c6cb1..a3656fac6 100644 --- a/fixtures/m_anna_heatpump_idle/data.json +++ b/fixtures/m_anna_heatpump_idle/data.json @@ -29,7 +29,7 @@ "secondary_boiler_state": false }, "boiler_temperature": { - "current": 29.1, + "current": 19.1, "lower_bound": 0.0, "resolution": 1.0, "setpoint": 60.0, @@ -52,13 +52,11 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { - "dhw_temperature": 46.3, "intended_boiler_temperature": 18.0, "modulation_level": 0, "outdoor_air_temperature": 28.2, "return_temperature": 22.0, - "water_pressure": 1.57, - "water_temperature": 19.1 + "water_pressure": 1.57 }, "vendor": "Techneco" }, From cbd088b7375072be397f4f5886cfa1bbcfd2b94e Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 19:46:07 +0200 Subject: [PATCH 26/38] Change dhw_mode off to eco, dhw heating is never off unless specificly stated --- plugwise/helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index e60410588..0bf4fdba5 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -509,7 +509,7 @@ def _get_toggle_state( case "cooling_enabled": data["switches"][name] = state.text == "on" case "domestic_hot_water_comfort_mode": - self._dhw_allowed_modes = ["comfort", "off"] + self._dhw_allowed_modes = ["comfort", "eco"] def _get_plugwise_notifications(self) -> None: """Collect the Plugwise notifications.""" From 3caf673aa1668f2401047c76d27ba8ee93981881 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 19:55:12 +0200 Subject: [PATCH 27/38] Save updated test-jsons --- tests/data/adam/adam_bad_thermostat.json | 2 +- tests/data/adam/adam_heatpump_cooling.json | 2 +- tests/data/adam/adam_jip.json | 2 +- tests/data/adam/adam_onoff_cooling_fake_firmware.json | 2 +- tests/data/adam/adam_plus_anna.json | 2 +- tests/data/adam/adam_plus_anna_new.json | 2 +- tests/data/adam/adam_plus_anna_new_regulation_off.json | 2 +- tests/data/anna/anna_elga_2.json | 2 +- tests/data/anna/anna_elga_2_cooling.json | 2 +- tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json | 2 +- tests/data/anna/anna_elga_2_schedule_off.json | 2 +- tests/data/anna/anna_elga_no_cooling.json | 2 +- tests/data/anna/anna_heatpump_cooling.json | 2 +- tests/data/anna/anna_heatpump_cooling_fake_firmware.json | 2 +- tests/data/anna/anna_heatpump_heating.json | 4 ++-- tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json | 4 ++-- tests/data/anna/anna_p1.json | 2 +- tests/data/anna/anna_v4.json | 2 +- tests/data/anna/anna_v4_UPDATED_DATA.json | 2 +- tests/data/anna/anna_v4_dhw.json | 2 +- tests/data/anna/anna_v4_no_tag.json | 2 +- 21 files changed, 23 insertions(+), 23 deletions(-) diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index d4a158aeb..bf59552c5 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -17,7 +17,7 @@ "dhw_mode": "off", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 49.9, diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index a31c1f9a8..19322a002 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -65,7 +65,7 @@ "dhw_mode": "comfort", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 63.5, diff --git a/tests/data/adam/adam_jip.json b/tests/data/adam/adam_jip.json index 391d28bbd..19d5f18d2 100644 --- a/tests/data/adam/adam_jip.json +++ b/tests/data/adam/adam_jip.json @@ -404,7 +404,7 @@ "dhw_mode": "off", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 37.3, diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index f69d3abd6..cc40f41f5 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -18,7 +18,7 @@ "dhw_mode": "comfort", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 63.5, diff --git a/tests/data/adam/adam_plus_anna.json b/tests/data/adam/adam_plus_anna.json index ea3f22917..f0865c1be 100644 --- a/tests/data/adam/adam_plus_anna.json +++ b/tests/data/adam/adam_plus_anna.json @@ -54,7 +54,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "07d618f0bb80412687f065b8698ce3e7", "model": "Generic heater", diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index 5a199f12a..4ab9896b5 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -16,7 +16,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", diff --git a/tests/data/adam/adam_plus_anna_new_regulation_off.json b/tests/data/adam/adam_plus_anna_new_regulation_off.json index b9a5f2303..9f625849c 100644 --- a/tests/data/adam/adam_plus_anna_new_regulation_off.json +++ b/tests/data/adam/adam_plus_anna_new_regulation_off.json @@ -16,7 +16,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", diff --git a/tests/data/anna/anna_elga_2.json b/tests/data/anna/anna_elga_2.json index d2efd669e..9937e511f 100644 --- a/tests/data/anna/anna_elga_2.json +++ b/tests/data/anna/anna_elga_2.json @@ -13,7 +13,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", "model": "Generic heater/cooler", diff --git a/tests/data/anna/anna_elga_2_cooling.json b/tests/data/anna/anna_elga_2_cooling.json index 593f4e7e4..e1d3b007d 100644 --- a/tests/data/anna/anna_elga_2_cooling.json +++ b/tests/data/anna/anna_elga_2_cooling.json @@ -20,7 +20,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", "model": "Generic heater/cooler", diff --git a/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json b/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json index 3c5177e11..70ab678d7 100644 --- a/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json +++ b/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json @@ -20,7 +20,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", diff --git a/tests/data/anna/anna_elga_2_schedule_off.json b/tests/data/anna/anna_elga_2_schedule_off.json index a85239634..02e11d02e 100644 --- a/tests/data/anna/anna_elga_2_schedule_off.json +++ b/tests/data/anna/anna_elga_2_schedule_off.json @@ -20,7 +20,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", "model": "Generic heater/cooler", diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index bcabda7d8..f07554fd2 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -37,7 +37,7 @@ "dhw_mode": "off", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 46.3, diff --git a/tests/data/anna/anna_heatpump_cooling.json b/tests/data/anna/anna_heatpump_cooling.json index 4d8d36859..305a25c58 100644 --- a/tests/data/anna/anna_heatpump_cooling.json +++ b/tests/data/anna/anna_heatpump_cooling.json @@ -38,7 +38,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", diff --git a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json index 91b3875b2..a1414db4a 100644 --- a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json +++ b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json @@ -38,7 +38,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index 69ea20098..53b710551 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -36,10 +36,10 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 46.3, diff --git a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json index fbf4401d7..4e64c7d99 100644 --- a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json +++ b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json @@ -8,9 +8,10 @@ "resolution": 1.0 }, "dev_class": "heater_central", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", @@ -27,7 +28,6 @@ "secondary_boiler_state": false, "flame_state": false }, - "select_dhw_mode": "off", "sensors": { "intended_boiler_temperature": 35.0, "modulation_level": 52, diff --git a/tests/data/anna/anna_p1.json b/tests/data/anna/anna_p1.json index 4afa66135..a2206b942 100644 --- a/tests/data/anna/anna_p1.json +++ b/tests/data/anna/anna_p1.json @@ -39,7 +39,7 @@ "heating_state": false }, "dev_class": "heater_central", - "dhw_modes": ["comfort", "off"], + "dhw_modes": ["comfort", "eco"], "location": "da7be222ab3b420c927f3e49fade0304", "model": "Generic heater", "model_id": "HR24", diff --git a/tests/data/anna/anna_v4.json b/tests/data/anna/anna_v4.json index fbf163590..550c2d60a 100644 --- a/tests/data/anna/anna_v4.json +++ b/tests/data/anna/anna_v4.json @@ -77,7 +77,7 @@ "dhw_mode": "off", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 45.0, diff --git a/tests/data/anna/anna_v4_UPDATED_DATA.json b/tests/data/anna/anna_v4_UPDATED_DATA.json index e90e5f6a2..4cd8fdda5 100644 --- a/tests/data/anna/anna_v4_UPDATED_DATA.json +++ b/tests/data/anna/anna_v4_UPDATED_DATA.json @@ -8,7 +8,7 @@ "resolution": 1.0 }, "dhw_mode": "comfort", - "dhw_modes": ["comfort", "off"], + "dhw_modes": ["comfort", "eco"], "dhw_temperature": { "current": 51.0, "setpoint": 59.0, diff --git a/tests/data/anna/anna_v4_dhw.json b/tests/data/anna/anna_v4_dhw.json index 6ec073250..b583c382f 100644 --- a/tests/data/anna/anna_v4_dhw.json +++ b/tests/data/anna/anna_v4_dhw.json @@ -77,7 +77,7 @@ "dhw_mode": "off", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 45.0, diff --git a/tests/data/anna/anna_v4_no_tag.json b/tests/data/anna/anna_v4_no_tag.json index e862f44c0..55fa447d3 100644 --- a/tests/data/anna/anna_v4_no_tag.json +++ b/tests/data/anna/anna_v4_no_tag.json @@ -77,7 +77,7 @@ "dhw_mode": "off", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 45.0, From ae33f62ead3c7efc950f7f7ef1928047874bec56 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 21 Jun 2026 20:02:07 +0200 Subject: [PATCH 28/38] Update test-jsons --- plugwise/helper.py | 2 +- tests/data/adam/adam_bad_thermostat.json | 2 +- tests/data/adam/adam_jip.json | 2 +- tests/data/adam/adam_plus_anna.json | 2 +- tests/data/adam/adam_plus_anna_new.json | 2 +- tests/data/adam/adam_plus_anna_new_regulation_off.json | 2 +- tests/data/anna/anna_elga_2.json | 2 +- tests/data/anna/anna_elga_no_cooling.json | 2 +- tests/data/anna/anna_heatpump_cooling.json | 2 +- tests/data/anna/anna_heatpump_cooling_fake_firmware.json | 2 +- tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json | 1 - tests/data/anna/anna_v4.json | 2 +- tests/data/anna/anna_v4_dhw.json | 2 +- tests/data/anna/anna_v4_no_tag.json | 2 +- 14 files changed, 13 insertions(+), 14 deletions(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index 0bf4fdba5..e9b168458 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -489,7 +489,7 @@ def _select_dhw_mode(self, text: str, data: GwEntityData, measurement: str) -> N if self._dhw_allowed_modes and "select_dhw_mode" not in data: data["select_dhw_mode"] = text if measurement == "domestic_hot_water_comfort_mode": - data["select_dhw_mode"] = "comfort" if text == "on" else "off" + data["select_dhw_mode"] = "comfort" if text == "on" else "eco" def _get_toggle_state( self, diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index bf59552c5..4b762d7e5 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -14,7 +14,7 @@ "upper_bound": 45.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" diff --git a/tests/data/adam/adam_jip.json b/tests/data/adam/adam_jip.json index 19d5f18d2..8145751c2 100644 --- a/tests/data/adam/adam_jip.json +++ b/tests/data/adam/adam_jip.json @@ -401,7 +401,7 @@ "upper_bound": 90.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" diff --git a/tests/data/adam/adam_plus_anna.json b/tests/data/adam/adam_plus_anna.json index f0865c1be..82e620915 100644 --- a/tests/data/adam/adam_plus_anna.json +++ b/tests/data/adam/adam_plus_anna.json @@ -59,7 +59,7 @@ "location": "07d618f0bb80412687f065b8698ce3e7", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 0.0 } diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index 4ab9896b5..1f0aa4196 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -21,7 +21,7 @@ "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 22.5 } diff --git a/tests/data/adam/adam_plus_anna_new_regulation_off.json b/tests/data/adam/adam_plus_anna_new_regulation_off.json index 9f625849c..5ec7da839 100644 --- a/tests/data/adam/adam_plus_anna_new_regulation_off.json +++ b/tests/data/adam/adam_plus_anna_new_regulation_off.json @@ -21,7 +21,7 @@ "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 0.0 } diff --git a/tests/data/anna/anna_elga_2.json b/tests/data/anna/anna_elga_2.json index 9937e511f..71edd600e 100644 --- a/tests/data/anna/anna_elga_2.json +++ b/tests/data/anna/anna_elga_2.json @@ -18,7 +18,7 @@ "location": "d34dfe6ab90b410c98068e75de3eb631", "model": "Generic heater/cooler", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "domestic_hot_water_setpoint": 60.0, "intended_boiler_temperature": 58.3, diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index f07554fd2..dfb5d15c1 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -34,7 +34,7 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" diff --git a/tests/data/anna/anna_heatpump_cooling.json b/tests/data/anna/anna_heatpump_cooling.json index 305a25c58..6c3cf8b7d 100644 --- a/tests/data/anna/anna_heatpump_cooling.json +++ b/tests/data/anna/anna_heatpump_cooling.json @@ -43,7 +43,7 @@ "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "dhw_temperature": 41.5, "domestic_hot_water_setpoint": 60.0, diff --git a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json index a1414db4a..2289796f1 100644 --- a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json +++ b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json @@ -43,7 +43,7 @@ "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "dhw_temperature": 41.5, "domestic_hot_water_setpoint": 60.0, diff --git a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json index 4e64c7d99..d210ff01b 100644 --- a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json +++ b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json @@ -17,7 +17,6 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "vendor": "Techneco", - "available": true, "binary_sensors": { "dhw_state": false, diff --git a/tests/data/anna/anna_v4.json b/tests/data/anna/anna_v4.json index 550c2d60a..cecb3e0a8 100644 --- a/tests/data/anna/anna_v4.json +++ b/tests/data/anna/anna_v4.json @@ -74,7 +74,7 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" diff --git a/tests/data/anna/anna_v4_dhw.json b/tests/data/anna/anna_v4_dhw.json index b583c382f..01c6bb25d 100644 --- a/tests/data/anna/anna_v4_dhw.json +++ b/tests/data/anna/anna_v4_dhw.json @@ -74,7 +74,7 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" diff --git a/tests/data/anna/anna_v4_no_tag.json b/tests/data/anna/anna_v4_no_tag.json index 55fa447d3..c9ea37dca 100644 --- a/tests/data/anna/anna_v4_no_tag.json +++ b/tests/data/anna/anna_v4_no_tag.json @@ -74,7 +74,7 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" From b98675171c076ee729672aaa59810e91487751ca Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 08:03:37 +0200 Subject: [PATCH 29/38] Fix left rework details --- plugwise/smile.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugwise/smile.py b/plugwise/smile.py index 40fdbc627..c876d585c 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -170,12 +170,12 @@ async def set_number( key: str, temperature: float, ) -> None: - """Set the maximum boiler- or DHW-setpoint on the Central Heating boiler or the temperature-offset on a Thermostat.""" + """Set the boiler- or DHW-setpoint on the Central Heating boiler or the temperature-offset on a Thermostat.""" match key: case "temperature_offset": await self.set_offset(dev_id, temperature) return - case "max_dhw_temperature": + case "dhw_temperature": key = "domestic_hot_water_setpoint" temp = str(temperature) From b32fa78d08805256721040765fa2ce5e83e26fa9 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 08:30:39 +0200 Subject: [PATCH 30/38] Correct/revert test-json updates --- .../anna_heatpump_heating_UPDATED_DATA.json | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json index d210ff01b..94995038b 100644 --- a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json +++ b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json @@ -1,5 +1,15 @@ { "1cbf783bb11e4a7c8a6843dee3a86927": { + "available": true, + "binary_sensors": { + "dhw_state": false, + "heating_state": true, + "compressor_state": true, + "cooling_state": false, + "cooling_enabled": false, + "secondary_boiler_state": false, + "flame_state": false + }, "boiler_temperature": { "current": 29.1, "setpoint": 60.0, @@ -8,7 +18,6 @@ "resolution": 1.0 }, "dev_class": "heater_central", - "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" @@ -16,17 +25,7 @@ "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", - "vendor": "Techneco", - "available": true, - "binary_sensors": { - "dhw_state": false, - "heating_state": true, - "compressor_state": true, - "cooling_state": false, - "cooling_enabled": false, - "secondary_boiler_state": false, - "flame_state": false - }, + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 35.0, "modulation_level": 52, @@ -34,6 +33,7 @@ "water_pressure": 1.57, "outdoor_air_temperature": 3.0 - } + }, + "vendor": "Techneco" } } From de07422a5798fd0b387fb2baca74b68a78169e0b Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 18:06:44 +0200 Subject: [PATCH 31/38] Save updated fixtures --- fixtures/adam_bad_thermostat/data.json | 4 ++-- fixtures/adam_heatpump_cooling/data.json | 2 +- fixtures/adam_jip/data.json | 4 ++-- fixtures/adam_onoff_cooling_fake_firmware/data.json | 2 +- fixtures/adam_plus_anna/data.json | 4 ++-- fixtures/adam_plus_anna_new/data.json | 4 ++-- fixtures/adam_plus_anna_new_regulation_off/data.json | 4 ++-- fixtures/anna_elga_2/data.json | 4 ++-- fixtures/anna_elga_2_cooling/data.json | 2 +- fixtures/anna_elga_2_schedule_off/data.json | 2 +- fixtures/anna_elga_no_cooling/data.json | 4 ++-- fixtures/anna_heatpump_cooling/data.json | 4 ++-- fixtures/anna_heatpump_cooling_fake_firmware/data.json | 4 ++-- fixtures/anna_heatpump_heating/data.json | 4 ++-- fixtures/anna_p1/data.json | 2 +- fixtures/anna_v4/data.json | 4 ++-- fixtures/anna_v4_dhw/data.json | 4 ++-- fixtures/anna_v4_no_tag/data.json | 4 ++-- fixtures/m_adam_cooling/data.json | 4 ++-- fixtures/m_adam_heating/data.json | 4 ++-- fixtures/m_adam_heating_off_schedule/data.json | 4 ++-- fixtures/m_adam_jip/data.json | 4 ++-- fixtures/m_anna_heatpump_cooling/data.json | 4 ++-- fixtures/m_anna_heatpump_idle/data.json | 4 ++-- 24 files changed, 43 insertions(+), 43 deletions(-) diff --git a/fixtures/adam_bad_thermostat/data.json b/fixtures/adam_bad_thermostat/data.json index d4a158aeb..4b762d7e5 100644 --- a/fixtures/adam_bad_thermostat/data.json +++ b/fixtures/adam_bad_thermostat/data.json @@ -14,10 +14,10 @@ "upper_bound": 45.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 49.9, diff --git a/fixtures/adam_heatpump_cooling/data.json b/fixtures/adam_heatpump_cooling/data.json index a31c1f9a8..19322a002 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -65,7 +65,7 @@ "dhw_mode": "comfort", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 63.5, diff --git a/fixtures/adam_jip/data.json b/fixtures/adam_jip/data.json index 391d28bbd..8145751c2 100644 --- a/fixtures/adam_jip/data.json +++ b/fixtures/adam_jip/data.json @@ -401,10 +401,10 @@ "upper_bound": 90.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 37.3, diff --git a/fixtures/adam_onoff_cooling_fake_firmware/data.json b/fixtures/adam_onoff_cooling_fake_firmware/data.json index f69d3abd6..cc40f41f5 100644 --- a/fixtures/adam_onoff_cooling_fake_firmware/data.json +++ b/fixtures/adam_onoff_cooling_fake_firmware/data.json @@ -18,7 +18,7 @@ "dhw_mode": "comfort", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 63.5, diff --git a/fixtures/adam_plus_anna/data.json b/fixtures/adam_plus_anna/data.json index ea3f22917..82e620915 100644 --- a/fixtures/adam_plus_anna/data.json +++ b/fixtures/adam_plus_anna/data.json @@ -54,12 +54,12 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "07d618f0bb80412687f065b8698ce3e7", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 0.0 } diff --git a/fixtures/adam_plus_anna_new/data.json b/fixtures/adam_plus_anna_new/data.json index 5a199f12a..1f0aa4196 100644 --- a/fixtures/adam_plus_anna_new/data.json +++ b/fixtures/adam_plus_anna_new/data.json @@ -16,12 +16,12 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 22.5 } diff --git a/fixtures/adam_plus_anna_new_regulation_off/data.json b/fixtures/adam_plus_anna_new_regulation_off/data.json index b9a5f2303..5ec7da839 100644 --- a/fixtures/adam_plus_anna_new_regulation_off/data.json +++ b/fixtures/adam_plus_anna_new_regulation_off/data.json @@ -16,12 +16,12 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 0.0 } diff --git a/fixtures/anna_elga_2/data.json b/fixtures/anna_elga_2/data.json index 0d25467b4..97e69f202 100644 --- a/fixtures/anna_elga_2/data.json +++ b/fixtures/anna_elga_2/data.json @@ -13,12 +13,12 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", "model": "Generic heater/cooler", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "domestic_hot_water_setpoint": 60.0, "intended_boiler_temperature": 58.3, diff --git a/fixtures/anna_elga_2_cooling/data.json b/fixtures/anna_elga_2_cooling/data.json index 593f4e7e4..e1d3b007d 100644 --- a/fixtures/anna_elga_2_cooling/data.json +++ b/fixtures/anna_elga_2_cooling/data.json @@ -20,7 +20,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", "model": "Generic heater/cooler", diff --git a/fixtures/anna_elga_2_schedule_off/data.json b/fixtures/anna_elga_2_schedule_off/data.json index a85239634..02e11d02e 100644 --- a/fixtures/anna_elga_2_schedule_off/data.json +++ b/fixtures/anna_elga_2_schedule_off/data.json @@ -20,7 +20,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", "model": "Generic heater/cooler", diff --git a/fixtures/anna_elga_no_cooling/data.json b/fixtures/anna_elga_no_cooling/data.json index bcabda7d8..dfb5d15c1 100644 --- a/fixtures/anna_elga_no_cooling/data.json +++ b/fixtures/anna_elga_no_cooling/data.json @@ -34,10 +34,10 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 46.3, diff --git a/fixtures/anna_heatpump_cooling/data.json b/fixtures/anna_heatpump_cooling/data.json index 4d8d36859..6c3cf8b7d 100644 --- a/fixtures/anna_heatpump_cooling/data.json +++ b/fixtures/anna_heatpump_cooling/data.json @@ -38,12 +38,12 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "dhw_temperature": 41.5, "domestic_hot_water_setpoint": 60.0, diff --git a/fixtures/anna_heatpump_cooling_fake_firmware/data.json b/fixtures/anna_heatpump_cooling_fake_firmware/data.json index 91b3875b2..2289796f1 100644 --- a/fixtures/anna_heatpump_cooling_fake_firmware/data.json +++ b/fixtures/anna_heatpump_cooling_fake_firmware/data.json @@ -38,12 +38,12 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", "model": "Generic heater/cooler", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "dhw_temperature": 41.5, "domestic_hot_water_setpoint": 60.0, diff --git a/fixtures/anna_heatpump_heating/data.json b/fixtures/anna_heatpump_heating/data.json index 69ea20098..53b710551 100644 --- a/fixtures/anna_heatpump_heating/data.json +++ b/fixtures/anna_heatpump_heating/data.json @@ -36,10 +36,10 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 46.3, diff --git a/fixtures/anna_p1/data.json b/fixtures/anna_p1/data.json index 6ee72b54c..4a7f5aa03 100644 --- a/fixtures/anna_p1/data.json +++ b/fixtures/anna_p1/data.json @@ -50,7 +50,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "da7be222ab3b420c927f3e49fade0304", "model": "Generic heater", diff --git a/fixtures/anna_v4/data.json b/fixtures/anna_v4/data.json index fbf163590..cecb3e0a8 100644 --- a/fixtures/anna_v4/data.json +++ b/fixtures/anna_v4/data.json @@ -74,10 +74,10 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 45.0, diff --git a/fixtures/anna_v4_dhw/data.json b/fixtures/anna_v4_dhw/data.json index 6ec073250..01c6bb25d 100644 --- a/fixtures/anna_v4_dhw/data.json +++ b/fixtures/anna_v4_dhw/data.json @@ -74,10 +74,10 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 45.0, diff --git a/fixtures/anna_v4_no_tag/data.json b/fixtures/anna_v4_no_tag/data.json index e862f44c0..c9ea37dca 100644 --- a/fixtures/anna_v4_no_tag/data.json +++ b/fixtures/anna_v4_no_tag/data.json @@ -74,10 +74,10 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 45.0, diff --git a/fixtures/m_adam_cooling/data.json b/fixtures/m_adam_cooling/data.json index c388b60a6..6aaec3e90 100644 --- a/fixtures/m_adam_cooling/data.json +++ b/fixtures/m_adam_cooling/data.json @@ -17,12 +17,12 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 17.5 } diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index a45d345d8..ad2fb4df1 100644 --- a/fixtures/m_adam_heating/data.json +++ b/fixtures/m_adam_heating/data.json @@ -16,7 +16,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 37.0, @@ -28,7 +28,7 @@ "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 38.1 } diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index a3c7095c4..9b2b1b245 100644 --- a/fixtures/m_adam_heating_off_schedule/data.json +++ b/fixtures/m_adam_heating_off_schedule/data.json @@ -16,7 +16,7 @@ "dev_class": "heater_central", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 37.0, @@ -28,7 +28,7 @@ "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "off", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 0.0 } diff --git a/fixtures/m_adam_jip/data.json b/fixtures/m_adam_jip/data.json index fd2ccd4dc..28867a99d 100644 --- a/fixtures/m_adam_jip/data.json +++ b/fixtures/m_adam_jip/data.json @@ -400,10 +400,10 @@ "upper_bound": 90.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 37.3, diff --git a/fixtures/m_anna_heatpump_cooling/data.json b/fixtures/m_anna_heatpump_cooling/data.json index 44729c758..018610533 100644 --- a/fixtures/m_anna_heatpump_cooling/data.json +++ b/fixtures/m_anna_heatpump_cooling/data.json @@ -36,10 +36,10 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 41.5, diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index a3656fac6..2578a20a0 100644 --- a/fixtures/m_anna_heatpump_idle/data.json +++ b/fixtures/m_anna_heatpump_idle/data.json @@ -36,10 +36,10 @@ "upper_bound": 100.0 }, "dev_class": "heater_central", - "dhw_mode": "off", + "dhw_mode": "eco", "dhw_modes": [ "comfort", - "off" + "eco" ], "dhw_temperature": { "current": 46.3, From be61e5d5a7501226261e328e89ab744d1c1db176 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 18:09:34 +0200 Subject: [PATCH 32/38] Rename test-function to tinker_actuator_temp() --- tests/test_init.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/test_init.py b/tests/test_init.py index db3790005..b7947ba4a 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -910,9 +910,9 @@ async def tinker_regulation_mode(api, unhappy=False): return tinker_reg_mode_passed @staticmethod - async def tinker_max_boiler_temp(api, unhappy=False): - """Change max boiler temp setpoint to test functionality.""" - tinker_max_boiler_temp_passed = False + async def tinker_actuator_temp(api, unhappy=False): + """Change actuator temperature setpoint to test functionality.""" + tinker_actuator_passed = False new_temp = 60.0 _LOGGER.info("- Adjusting temperature to %s", new_temp) for test in [ @@ -923,11 +923,11 @@ async def tinker_max_boiler_temp(api, unhappy=False): _LOGGER.info(" + for %s", test) try: await api.set_number("dummy", test, new_temp) - _LOGGER.info(" + tinker_max_boiler_temp worked as intended") - tinker_max_boiler_temp_passed = True + _LOGGER.info(" + tinker_actuator_temp worked as intended") + tinker_actuator_passed = True except pw_exceptions.PlugwiseError: - _LOGGER.info(" + tinker_max_boiler_temp failed as intended") - tinker_max_boiler_temp_passed = False + _LOGGER.info(" + tinker_actuator_temp failed as intended") + tinker_actuator_passed = False except ( pw_exceptions.ConnectionFailedError ): # leave for-loop at connect-error @@ -938,7 +938,7 @@ async def tinker_max_boiler_temp(api, unhappy=False): _LOGGER.info(" - succeeded unexpectedly for some reason") return False - return tinker_max_boiler_temp_passed + return tinker_actuator_passed @staticmethod async def tinker_temp_offset(api, dev_id, unhappy=False): From 9364f4577e3bfde02076d8adf65a2eaae8d3c5d7 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 18:10:57 +0200 Subject: [PATCH 33/38] Rename function name in test cases --- tests/test_adam.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_adam.py b/tests/test_adam.py index fd7a471f8..fe812941c 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -149,7 +149,7 @@ async def test_connect_adam_plus_anna_new(self): tinkered = await self.tinker_regulation_mode(api) assert not tinkered - tinkered = await self.tinker_max_boiler_temp(api) + tinkered = await self.tinker_actuator_temp(api) assert not tinkered assert not await self.tinker_zone_profile( @@ -191,7 +191,7 @@ async def test_connect_adam_plus_anna_new(self): server, api, client = await self.connect_wrapper(raise_timeout=True) await self.device_test(api, "2023-12-17 00:00:01", testdata, skip_testing=True) - tinkered = await self.tinker_max_boiler_temp(api, unhappy=True) + tinkered = await self.tinker_actuator_temp(api, unhappy=True) assert tinkered tinkered = await self.tinker_gateway_mode(api, unhappy=True) @@ -282,7 +282,7 @@ async def test_connect_adam_zone_per_device(self): ) assert result - tinkered = await self.tinker_max_boiler_temp(api, unhappy=True) + tinkered = await self.tinker_actuator_temp(api, unhappy=True) assert not tinkered try: From 07acdce6852778a8ed2634d2c8849f9fb8cfd7c4 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 18:17:01 +0200 Subject: [PATCH 34/38] Tinker_actuator_temp(): update test strings --- tests/test_init.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_init.py b/tests/test_init.py index b7947ba4a..04ca7f426 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -916,8 +916,8 @@ async def tinker_actuator_temp(api, unhappy=False): new_temp = 60.0 _LOGGER.info("- Adjusting temperature to %s", new_temp) for test in [ - "maximum_boiler_temperature", - "max_dhw_temperature", + "boiler_temperature", + "dhw_temperature", "bogus_temperature", ]: _LOGGER.info(" + for %s", test) From 30554aae5c77ce1251955197f9cc97d71e494f2d Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 18:19:56 +0200 Subject: [PATCH 35/38] Update set_number(), add case for boiler_temperature --- plugwise/smile.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugwise/smile.py b/plugwise/smile.py index c876d585c..0d394d2d0 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -175,6 +175,8 @@ async def set_number( case "temperature_offset": await self.set_offset(dev_id, temperature) return + case "boiler_temperature": + key = "maximum_boiler_temperature" case "dhw_temperature": key = "domestic_hot_water_setpoint" From b1938e4d03933f02306b1ac6695baf7bc5fa73b9 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 18:30:12 +0200 Subject: [PATCH 36/38] Add tinker_actuator_temp test for adam_jip --- tests/test_adam.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/test_adam.py b/tests/test_adam.py index fe812941c..f34b15773 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -466,5 +466,8 @@ async def test_adam_plus_jip(self): ) assert not tinkered + tinkered = await self.tinker_actuator_temp(api) + assert not tinkered + await api.close_connection() await self.disconnect(server, client) From ec02fefbb403fde05abe3f5e94dc0f4c50028162 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 18:35:09 +0200 Subject: [PATCH 37/38] Update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83dfd45b9..565549f92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Ongoing + +- Improve on v1.12.0 update by outputting dedicated boiler_ and dhw_temperature dicts with current-key added. Rename dhw_mode off to eco for standard cv-heaters. + ## v1.12.0 - Replace the DHW-comfort-mode switch by a DHW mode selector to match the new HA select or water_heater platform updates, via PR [#883](https://github.com/plugwise/python-plugwise/pull/883) From 3f556f13cfc575ea615690bb4ed0848ea2e6e0a2 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 22 Jun 2026 19:22:50 +0200 Subject: [PATCH 38/38] Clean up legacy-helper.py as suggested --- plugwise/legacy/helper.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plugwise/legacy/helper.py b/plugwise/legacy/helper.py index b0c4668e5..43734fc74 100644 --- a/plugwise/legacy/helper.py +++ b/plugwise/legacy/helper.py @@ -273,7 +273,7 @@ def _get_measurement_data(self, entity_id: str, entity: GwEntityData) -> None: self._get_lock_state(appliance, data, self._stretch_v2) if appliance.find("type").text in ACTUATOR_CLASSES: - self._get_actuator_functionalities(appliance, entity, data) + self._get_actuator_functionalities(appliance, data) # Anna: the Smile outdoor_temperature is present in the Home location # For some Anna's LOCATIONS is empty, falling back to domain_objects! @@ -341,9 +341,7 @@ def _appliance_measurements( self._count = count_data_items(self._count, data) - def _get_actuator_functionalities( - self, xml: etree.Element, entity: GwEntityData, data: GwEntityData - ) -> None: + def _get_actuator_functionalities(self, xml: etree.Element, data: GwEntityData) -> None: """Helper-function for _get_measurement_data().""" for item in ACTIVE_ACTUATORS: temp_dict: ActuatorData = {}