From b18369a55ee27b24720d90b63413faa168cd043a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 08:43:14 +0200 Subject: [PATCH 01/52] Partly revert changes in constants --- plugwise/constants.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/plugwise/constants.py b/plugwise/constants.py index a5cfac2da..7cc1d1617 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -257,10 +257,9 @@ "zone_thermostat", ) ActuatorType = Literal[ - "boiler_temperature", - "dhw_temperature", "domestic_hot_water_setpoint", "maximum_boiler_temperature", + "max_dhw_temperature", "temperature_offset", "thermostat", ] @@ -382,13 +381,13 @@ "c_heating_state", "thermostat_supports_cooling", ] - SPECIALS: Final[tuple[str, ...]] = get_args(SpecialType) SPECIAL_FORMAT: Final[tuple[str, ...]] = (ENERGY_KILO_WATT_HOUR, VOLUME_CUBIC_METERS) SwitchType = Literal[ "cooling_ena_switch", + "dhw_cm_switch", "lock", "relay", ] @@ -408,6 +407,11 @@ "cooling_ena_switch", "dhw_cm_switch", ] +TOGGLES: Final[dict[str, ToggleNameType]] = { + "cooling_enabled": "cooling_ena_switch", + "domestic_hot_water_comfort_mode": "dhw_cm_switch", +} + ZONE_THERMOSTATS: Final[tuple[str, ...]] = ( "thermostat", "thermostatic_radiator_valve", @@ -588,8 +592,7 @@ class GwEntityData(TypedDict, total=False): # Dict-types binary_sensors: SmileBinarySensors - boiler_temperature: ActuatorData - dhw_temperature: ActuatorData + max_dhw_temperatureL ActuatorData maximum_boiler_temperature: ActuatorData sensors: SmileSensors switches: SmileSwitches From a62d01ac416832a2f2b17b867988e661561424d5 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 09:04:17 +0200 Subject: [PATCH 02/52] Partly revert changes in helper.py --- plugwise/helper.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index 09c377d92..17c65b029 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -504,6 +504,8 @@ def _get_toggle_state( if xml.find("type").text == "heater_central": locator = f"./actuator_functionalities/toggle_functionality[type='{toggle}']/state" if (state := xml.find(locator)) is not None: + data["switches"][name] = state.text == "on" + self._count += 1 match toggle: case "cooling_enabled": data["switches"][name] = state.text == "on" @@ -534,9 +536,9 @@ def _get_actuator_functionalities( Add the resulting dict(s) to the entity's data. """ for item in ACTIVE_ACTUATORS: - # Skip boiler_ and dhw_temperature, not initially valid, + # Skip max_dhw_temperature, not initially valid, # skip thermostat for all but zones with thermostats - if item in ("boiler_temperature", "dhw_temperature") or ( + if item == "max_dhw_temperature" or ( item == "thermostat" and ( entity["dev_class"] != "climate" From 0d2bd995f8399be8fcb55c3d5c39bd3651bc0b2f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 09:06:48 +0200 Subject: [PATCH 03/52] Adapt/revert _create_special_dicts() function --- plugwise/common.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugwise/common.py b/plugwise/common.py index 18c9d271d..51a2fe6b9 100644 --- a/plugwise/common.py +++ b/plugwise/common.py @@ -301,7 +301,7 @@ def _create_special_dicts( Also, the copied sensor data is removed. """ if item == DHW_SETPOINT: - item = "dhw_temperature" + item = "max_dhw_temperature" if DHW_SETPOINT in data["sensors"]: data["sensors"].pop(DHW_SETPOINT) self._count -= 1 @@ -313,9 +313,7 @@ def _create_special_dicts( 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 From 1fdfc526b20e44a5dc0ee4cee10e2744e921812f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 09:10:12 +0200 Subject: [PATCH 04/52] Revert some changes in legacy helper.py --- plugwise/legacy/helper.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugwise/legacy/helper.py b/plugwise/legacy/helper.py index 9d6382edf..ab6f55ad1 100644 --- a/plugwise/legacy/helper.py +++ b/plugwise/legacy/helper.py @@ -342,10 +342,20 @@ def _appliance_measurements( self._count = count_data_items(self._count, data) def _get_actuator_functionalities( - self, xml: etree.Element, data: GwEntityData + self, + xml: etree.Element, + data: GwEntityData, + entity: GwEntityData, ) -> 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 a9df065366a2264bca54a39b9ea26bb603c9a4cc Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 09:24:25 +0200 Subject: [PATCH 05/52] Partly revert changes in smile.py --- plugwise/smile.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugwise/smile.py b/plugwise/smile.py index 0d394d2d0..4442d41a3 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -175,9 +175,7 @@ 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": + case "max_dhw_temperature": key = "domestic_hot_water_setpoint" temp = str(temperature) From 8a896eb8c868efa478769d694a7cb96e8972bf18 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 09:25:56 +0200 Subject: [PATCH 06/52] Fix typo --- plugwise/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise/constants.py b/plugwise/constants.py index 7cc1d1617..327862ae3 100644 --- a/plugwise/constants.py +++ b/plugwise/constants.py @@ -592,7 +592,7 @@ class GwEntityData(TypedDict, total=False): # Dict-types binary_sensors: SmileBinarySensors - max_dhw_temperatureL ActuatorData + max_dhw_temperature: ActuatorData maximum_boiler_temperature: ActuatorData sensors: SmileSensors switches: SmileSwitches From 4a016d8491b3b92a23c3c967fe59e377abca593f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 09:30:28 +0200 Subject: [PATCH 07/52] More reverts in helper.py --- plugwise/helper.py | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index 17c65b029..350e4ab77 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -31,6 +31,7 @@ TEMP_CELSIUS, THERMO_MATCHING, THERMOSTAT_CLASSES, + TOGGLES, UOM, ZONE_MEASUREMENTS, ActuatorData, @@ -240,7 +241,6 @@ def _appliance_info_finder(self, appl: Munch, appliance: etree.Element) -> Munch appl := self._appl_heater_central_info(appl, appliance, False) ): # False means non-legacy entity return Munch() - self._collect_dhw_modes(appliance) return appl case _ as s if s.endswith("_plug"): @@ -262,18 +262,6 @@ def _appliance_info_finder(self, appl: Munch, appliance: etree.Element) -> Munch case _: # pragma: no cover return Munch() - def _collect_dhw_modes(self, appliance: etree.Element) -> None: - """Collect the DHW modes.""" - # Collect the Loria dhw modes - self._dhw_allowed_modes = self._get_appl_actuator_modes( - appliance, "domestic_hot_water_mode_control_functionality" - ) - # Determine the dhw modes from the domestic_hot_water_comfort_mode toggle - if not self._dhw_allowed_modes: - self._get_toggle_state( - appliance, "domestic_hot_water_comfort_mode", "dhw_cm_switch", {} - ) - def _appl_gateway_info(self, appl: Munch, appliance: etree.Element) -> Munch: """Helper-function for _appliance_info_finder().""" self._gateway_id = appl.entity_id @@ -417,13 +405,12 @@ def _collect_appliance_data( appliance := self._domain_objects.find(f'./appliance[@id="{entity_id}"]') ) is not None: # Collect the cooling enabled toggle state - self._get_toggle_state( - appliance, "cooling_enabled", "cooling_ena_switch", data - ) - self._appliance_measurements(appliance, data, measurements) self._get_lock_state(appliance, data) + for toggle, name in TOGGLES.items(): + self._get_toggle_state(appliance, toggle, name, data) + if appliance.find("type").text in ACTUATOR_CLASSES: self._get_actuator_functionalities(appliance, entity, data) From 8c9abde6187fd18c59c83c08ba16ea26c3c6afa9 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 09:34:24 +0200 Subject: [PATCH 08/52] Init _dhw_allowed_modes --- plugwise/helper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugwise/helper.py b/plugwise/helper.py index 350e4ab77..952ca6bd0 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -86,6 +86,7 @@ def __init__(self) -> None: super().__init__() self._endpoint: str self._elga: bool + self._dhw_allowed_modes: list[str] | None = None self._is_thermostat: bool self._loc_data: dict[str, ThermoLoc] self._schedule_old_states: dict[str, dict[str, str]] From 7dcf4306b8ab4cea9510a5323aaf4f770b2164ff Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 09:40:14 +0200 Subject: [PATCH 09/52] Updated test-json --- tests/data/adam/adam_bad_thermostat.json | 29 ++++++++++++------------ tests/data/adam/adam_plus_anna_new.json | 17 +++++++------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index 4b762d7e5..1e86fc1b5 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -6,27 +6,22 @@ "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": "eco", - "dhw_modes": [ - "comfort", - "eco" - ], - "dhw_temperature": { + "location": "856285a783f24bf4b2573c8bc510eabf", + "max_dhw_temperature": { "current": 49.9, "lower_bound": 0.0, "resolution": 1.0, "setpoint": 50.0, "upper_bound": 100.0 }, - "location": "856285a783f24bf4b2573c8bc510eabf", + "maximum_boiler_temperature": { + "current": 20.9, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 38.0, + "upper_bound": 45.0 + }, "model": "Generic heater", "model_id": "1.1", "name": "OpenTherm", @@ -34,7 +29,11 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, - "return_temperature": 33.0 + "return_temperature": 33.0, + "water_temperature": 20.9 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "WeHeat" }, diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index 1f0aa4196..d34703ec3 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -6,24 +6,23 @@ "flame_state": true, "heating_state": true }, - "boiler_temperature": { + "dev_class": "heater_central", + "location": "bc93488efab249e5bc54fd7e175a6f91", + "maximum_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", - "eco" - ], - "location": "bc93488efab249e5bc54fd7e175a6f91", "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 22.5 + "intended_boiler_temperature": 22.5, + "water_temperature": 43.0 + }, + "switches": { + "dhw_cm_switch": false } }, "10016900610d4c7481df78c89606ef22": { From 0151395f44c08515349884481d7e08f7d5ecadc0 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 13:02:00 +0200 Subject: [PATCH 10/52] Don't remove _collect_dhw_modes() --- plugwise/helper.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/plugwise/helper.py b/plugwise/helper.py index 952ca6bd0..3ced202c7 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -242,6 +242,7 @@ def _appliance_info_finder(self, appl: Munch, appliance: etree.Element) -> Munch appl := self._appl_heater_central_info(appl, appliance, False) ): # False means non-legacy entity return Munch() + self._collect_dhw_modes(appliance) return appl case _ as s if s.endswith("_plug"): @@ -263,6 +264,18 @@ def _appliance_info_finder(self, appl: Munch, appliance: etree.Element) -> Munch case _: # pragma: no cover return Munch() + def _collect_dhw_modes(self, appliance: etree.Element) -> None: + """Collect the DHW modes.""" + # Collect the Loria dhw modes + self._dhw_allowed_modes = self._get_appl_actuator_modes( + appliance, "domestic_hot_water_mode_control_functionality" + ) + # Determine the dhw modes from the domestic_hot_water_comfort_mode toggle + if not self._dhw_allowed_modes: + self._get_toggle_state( + appliance, "domestic_hot_water_comfort_mode", "dhw_cm_switch", {} + ) + def _appl_gateway_info(self, appl: Munch, appliance: etree.Element) -> Munch: """Helper-function for _appliance_info_finder().""" self._gateway_id = appl.entity_id From 2b491429e0df5e383bca634c7437a83878b8e25c Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 13:06:20 +0200 Subject: [PATCH 11/52] Add guarding for where switches dict is not yet defined --- plugwise/helper.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugwise/helper.py b/plugwise/helper.py index 3ced202c7..f3a0febb2 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -505,6 +505,9 @@ def _get_toggle_state( if xml.find("type").text == "heater_central": locator = f"./actuator_functionalities/toggle_functionality[type='{toggle}']/state" if (state := xml.find(locator)) is not None: + if "switches" not in data: + return + data["switches"][name] = state.text == "on" self._count += 1 match toggle: From a94ce70b1556b05ef6d842598f7efbb113dc0db5 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 13:12:53 +0200 Subject: [PATCH 12/52] Correct _get_toggle_state() --- plugwise/helper.py | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/plugwise/helper.py b/plugwise/helper.py index f3a0febb2..aaadded44 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -505,16 +505,11 @@ def _get_toggle_state( if xml.find("type").text == "heater_central": locator = f"./actuator_functionalities/toggle_functionality[type='{toggle}']/state" if (state := xml.find(locator)) is not None: - if "switches" not in data: - return - - data["switches"][name] = state.text == "on" - self._count += 1 - match toggle: - case "cooling_enabled": - data["switches"][name] = state.text == "on" - case "domestic_hot_water_comfort_mode": - self._dhw_allowed_modes = ["comfort", "eco"] + if "switches" in data: + data["switches"][name] = state.text == "on" + self._count += 1 + if toggle == "domestic_hot_water_comfort_mode": + self._dhw_allowed_modes = ["comfort", "eco"] def _get_plugwise_notifications(self) -> None: """Collect the Plugwise notifications.""" From 077a1ba683a90b327382be9c235d9aefa070bb7f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 13:27:40 +0200 Subject: [PATCH 13/52] Correct key related to replacing select_dhw_mode --- plugwise/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise/data.py b/plugwise/data.py index 6c4df088d..3dfc293d0 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 ( - "dhw_temperature" in entity + "max_dhw_temperature" in entity and (mode := entity.get("select_dhw_mode")) is not None ): entity.pop("select_dhw_mode") From 9bc554781f304d891f2671d7f49157eb785f7e8f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 13:31:43 +0200 Subject: [PATCH 14/52] Update test-jsons --- tests/data/adam/adam_bad_thermostat.json | 5 +++++ tests/data/adam/adam_plus_anna_new.json | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index 1e86fc1b5..9c768485e 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -7,6 +7,11 @@ "heating_state": false }, "dev_class": "heater_central", + "dhw_mode": "eco", + "dhw_modes": [ + "comfort", + "eco" + ], "location": "856285a783f24bf4b2573c8bc510eabf", "max_dhw_temperature": { "current": 49.9, diff --git a/tests/data/adam/adam_plus_anna_new.json b/tests/data/adam/adam_plus_anna_new.json index d34703ec3..0dfd3b176 100644 --- a/tests/data/adam/adam_plus_anna_new.json +++ b/tests/data/adam/adam_plus_anna_new.json @@ -7,6 +7,10 @@ "heating_state": true }, "dev_class": "heater_central", + "dhw_modes": [ + "comfort", + "eco" + ], "location": "bc93488efab249e5bc54fd7e175a6f91", "maximum_boiler_temperature": { "current": 43.0, @@ -17,6 +21,7 @@ }, "model": "Generic heater", "name": "OpenTherm", + "select_dhw_mode": "eco", "sensors": { "intended_boiler_temperature": 22.5, "water_temperature": 43.0 From 85d2da73c09f335532cda67fd6dc5db870e299b1 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:28:15 +0200 Subject: [PATCH 15/52] Add missing _couht update --- plugwise/common.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugwise/common.py b/plugwise/common.py index 51a2fe6b9..49c735401 100644 --- a/plugwise/common.py +++ b/plugwise/common.py @@ -315,5 +315,6 @@ def _create_special_dicts( if item == "maximum_boiler_temperature": if "water_temperature" in data["sensors"]: temp_dict["current"] = data["sensors"]["water_temperature"] + self._count += 1 return item, temp_dict From 3e350db1709e53184b53cde7cd433bf3b116ff33 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:29:40 +0200 Subject: [PATCH 16/52] Update entity_items count --- 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 f34b15773..85f234557 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -47,7 +47,7 @@ async def test_connect_adam_plus_anna_new(self): test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata) assert api.gateway_id == "da224107914542988a88561b4452b0f6" - assert self.entity_items == 232 + assert self.entity_items == 234 assert test_items == self.entity_items assert self.entity_list == [ "da224107914542988a88561b4452b0f6", From b03a655c56c134916a6b564c26fad8c183e0c58f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:31:26 +0200 Subject: [PATCH 17/52] Revert test-name-changes in tinker_actuator_temp() --- 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 04ca7f426..b7947ba4a 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 [ - "boiler_temperature", - "dhw_temperature", + "maximum_boiler_temperature", + "max_dhw_temperature", "bogus_temperature", ]: _LOGGER.info(" + for %s", test) From 29271aaee29f401a395f8f6a16c133923347c49d Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:32:45 +0200 Subject: [PATCH 18/52] Update test-jsons --- tests/data/adam/adam_heatpump_cooling.json | 24 +++++++++++-------- .../adam_plus_anna_new_regulation_off.json | 20 +++++++++------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index 19322a002..b75f0fe4d 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -54,27 +54,27 @@ "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", "eco" ], - "dhw_temperature": { + "location": "eedadcb297564f1483faa509179aebed", + "max_dhw_temperature": { "current": 63.5, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 65.0 }, - "location": "eedadcb297564f1483faa509179aebed", + "maximum_boiler_temperature": { + "current": 24.5, + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, "model": "Generic heater/cooler", "model_id": "17.1", "name": "OpenTherm", @@ -83,7 +83,11 @@ "modulation_level": 0.0, "outdoor_air_temperature": 13.5, "return_temperature": 24.9, - "water_pressure": 2.0 + "water_pressure": 2.0, + "water_temperature": 24.5 + }, + "switches": { + "dhw_cm_switch": true }, "vendor": "Remeha B.V." }, 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 5ec7da839..e65b01c34 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,28 @@ "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", "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", + "maximum_boiler_temperature": { + "current": 30.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 0.0 + "intended_boiler_temperature": 0.0, + "water_temperature": 30.0 + }, + "switches": { + "dhw_cm_switch": false } }, "10016900610d4c7481df78c89606ef22": { From 3eb9bb51598db5a7856b6d99f886d96d62c6f6c2 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:38:15 +0200 Subject: [PATCH 19/52] Update entity_items count --- 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 85f234557..2cfd1e5ab 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -351,7 +351,7 @@ async def test_adam_heatpump_cooling(self): server, api, client = await self.connect_wrapper() test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) - assert self.entity_items == 540 + assert self.entity_items == 542 assert test_items == self.entity_items assert self.cooling_present assert self._cooling_enabled From 77ac69d07d9c852b91dcaa245010b35611ad0d4c Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:39:33 +0200 Subject: [PATCH 20/52] Update test-json --- .../adam_onoff_cooling_fake_firmware.json | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index cc40f41f5..a674140d2 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -7,27 +7,27 @@ "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", "eco" ], - "dhw_temperature": { + "location": "eedadcb297564f1483faa509179aebed", + "max_dhw_temperature": { "current": 63.5, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 65.0 }, - "location": "eedadcb297564f1483faa509179aebed", + "maximum_boiler_temperature": { + "current": 24.5, + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, "model": "Unknown", "name": "OnOff", "sensors": { @@ -35,7 +35,11 @@ "modulation_level": 0.0, "outdoor_air_temperature": 13.5, "return_temperature": 24.9, - "water_pressure": 2.0 + "water_pressure": 2.0, + "water_temperature": 24.5 + }, + "switches": { + "dhw_cm_switch": true } }, "7d97fc3117784cfdafe347bcedcbbbcb": { From ed900b9d899dcde3defa09048948915eea8d674a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:40:48 +0200 Subject: [PATCH 21/52] Update entity_items count --- 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 2cfd1e5ab..f5d727458 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -375,7 +375,7 @@ async def test_connect_adam_onoff_cooling_fake_firmware(self): ) test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) - assert self.entity_items == 71 + assert self.entity_items == 73 assert test_items == self.entity_items assert self.cooling_present # assert self._cooling_enabled - no cooling_enabled indication present From a0174e2857313886716f2e19b2a4d87b59d9fa0a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:42:06 +0200 Subject: [PATCH 22/52] Update test-json --- tests/data/adam/adam_plus_anna.json | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/tests/data/adam/adam_plus_anna.json b/tests/data/adam/adam_plus_anna.json index 82e620915..69974cd49 100644 --- a/tests/data/adam/adam_plus_anna.json +++ b/tests/data/adam/adam_plus_anna.json @@ -44,24 +44,28 @@ "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", "eco" ], "location": "07d618f0bb80412687f065b8698ce3e7", + "maximum_boiler_temperature": { + "current": 48.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 80.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 0.0 + "intended_boiler_temperature": 0.0, + "water_temperature": 48.0 + }, + "switches": { + "dhw_cm_switch": false } }, "aa6b0002df0a46e1b1eb94beb61eddfe": { From 5bf90abced067523405007d9dd2e599e0d365be9 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:43:46 +0200 Subject: [PATCH 23/52] Update entity_items count --- 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 f5d727458..564407a53 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -400,7 +400,7 @@ async def test_connect_adam_plus_anna(self): test_items = await self.device_test(api, "2020-03-22 00:00:01", testdata) assert api.gateway_id == "b128b4bbbd1f47e9bf4d756e8fb5ee94" - assert self.entity_items == 83 + assert self.entity_items == 85 assert test_items == self.entity_items assert "6fb89e35caeb4b1cb275184895202d84" in self.notifications From 7ff4407d2cb1a34a16c0e09451f676cd59b3b482 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:45:26 +0200 Subject: [PATCH 24/52] Update test-json --- tests/data/adam/adam_jip.json | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/tests/data/adam/adam_jip.json b/tests/data/adam/adam_jip.json index 8145751c2..fe1b373b9 100644 --- a/tests/data/adam/adam_jip.json +++ b/tests/data/adam/adam_jip.json @@ -393,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "9e4433a9d69f40b3aefd15e74395eaec", + "max_dhw_temperature": { "current": 37.3, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "9e4433a9d69f40b3aefd15e74395eaec", + "maximum_boiler_temperature": { + "current": 37.3, + "lower_bound": 20.0, + "resolution": 0.01, + "setpoint": 90.0, + "upper_bound": 90.0 + }, "model": "Generic heater", "model_id": "10.20", "name": "OpenTherm", @@ -421,7 +421,11 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "return_temperature": 37.1, - "water_pressure": 1.4 + "water_pressure": 1.4, + "water_temperature": 37.3 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Remeha B.V." }, From 0fb615d4c319fe4d478f7ecaeefd4b8f876fb844 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sat, 11 Jul 2026 19:46:24 +0200 Subject: [PATCH 25/52] Update entity_items count --- 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 564407a53..a1270b39f 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 == 271 + assert self.entity_items == 273 assert test_items == self.entity_items # Negative test From ea6d5f0366ca944dfe21a12e205931494abf6d88 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 15:06:29 +0200 Subject: [PATCH 26/52] Update test-jsons --- fixtures/adam_bad_thermostat/data.json | 24 ++++---- fixtures/adam_heatpump_cooling/data.json | 24 ++++---- fixtures/adam_jip/data.json | 24 ++++---- .../data.json | 24 ++++---- fixtures/adam_plus_anna/data.json | 20 ++++--- fixtures/adam_plus_anna_new/data.json | 20 ++++--- .../data.json | 20 ++++--- fixtures/anna_elga_2/data.json | 3 + fixtures/anna_elga_2_cooling/data.json | 20 ++++--- fixtures/anna_elga_2_schedule_off/data.json | 20 ++++--- fixtures/anna_elga_no_cooling/data.json | 24 ++++---- fixtures/anna_heatpump_cooling/data.json | 20 ++++--- .../data.json | 20 ++++--- fixtures/anna_heatpump_heating/data.json | 24 ++++---- fixtures/anna_loria_cooling_active/data.json | 24 ++++---- fixtures/anna_loria_driessens/data.json | 24 ++++---- fixtures/anna_loria_heating_idle/data.json | 24 ++++---- fixtures/anna_p1/data.json | 3 + fixtures/anna_v4/data.json | 24 ++++---- fixtures/anna_v4_dhw/data.json | 24 ++++---- fixtures/anna_v4_no_tag/data.json | 24 ++++---- tests/data/anna/anna_elga_2.json | 16 +++++- tests/data/anna/anna_elga_2_cooling.json | 20 ++++--- .../anna_elga_2_cooling_UPDATED_DATA.json | 22 ++++--- tests/data/anna/anna_elga_2_schedule_off.json | 20 ++++--- tests/data/anna/anna_elga_no_cooling.json | 24 ++++---- tests/data/anna/anna_heatpump_cooling.json | 20 ++++--- .../anna_heatpump_cooling_fake_firmware.json | 20 ++++--- tests/data/anna/anna_heatpump_heating.json | 24 ++++---- .../anna_heatpump_heating_UPDATED_DATA.json | 17 +++--- .../data/anna/anna_loria_cooling_active.json | 24 ++++---- tests/data/anna/anna_loria_driessens.json | 24 ++++---- tests/data/anna/anna_loria_heating_idle.json | 24 ++++---- tests/data/anna/anna_p1.json | 57 ++++++++++++------- tests/data/anna/anna_v4.json | 24 ++++---- tests/data/anna/anna_v4_UPDATED_DATA.json | 21 +++---- tests/data/anna/anna_v4_dhw.json | 24 ++++---- tests/data/anna/anna_v4_no_tag.json | 24 ++++---- .../data/anna/anna_without_boiler_fw441.json | 14 ++++- 39 files changed, 508 insertions(+), 345 deletions(-) diff --git a/fixtures/adam_bad_thermostat/data.json b/fixtures/adam_bad_thermostat/data.json index 4b762d7e5..9c768485e 100644 --- a/fixtures/adam_bad_thermostat/data.json +++ b/fixtures/adam_bad_thermostat/data.json @@ -6,27 +6,27 @@ "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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "856285a783f24bf4b2573c8bc510eabf", + "max_dhw_temperature": { "current": 49.9, "lower_bound": 0.0, "resolution": 1.0, "setpoint": 50.0, "upper_bound": 100.0 }, - "location": "856285a783f24bf4b2573c8bc510eabf", + "maximum_boiler_temperature": { + "current": 20.9, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 38.0, + "upper_bound": 45.0 + }, "model": "Generic heater", "model_id": "1.1", "name": "OpenTherm", @@ -34,7 +34,11 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, - "return_temperature": 33.0 + "return_temperature": 33.0, + "water_temperature": 20.9 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "WeHeat" }, diff --git a/fixtures/adam_heatpump_cooling/data.json b/fixtures/adam_heatpump_cooling/data.json index 19322a002..b75f0fe4d 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -54,27 +54,27 @@ "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", "eco" ], - "dhw_temperature": { + "location": "eedadcb297564f1483faa509179aebed", + "max_dhw_temperature": { "current": 63.5, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 65.0 }, - "location": "eedadcb297564f1483faa509179aebed", + "maximum_boiler_temperature": { + "current": 24.5, + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, "model": "Generic heater/cooler", "model_id": "17.1", "name": "OpenTherm", @@ -83,7 +83,11 @@ "modulation_level": 0.0, "outdoor_air_temperature": 13.5, "return_temperature": 24.9, - "water_pressure": 2.0 + "water_pressure": 2.0, + "water_temperature": 24.5 + }, + "switches": { + "dhw_cm_switch": true }, "vendor": "Remeha B.V." }, diff --git a/fixtures/adam_jip/data.json b/fixtures/adam_jip/data.json index 8145751c2..fe1b373b9 100644 --- a/fixtures/adam_jip/data.json +++ b/fixtures/adam_jip/data.json @@ -393,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "9e4433a9d69f40b3aefd15e74395eaec", + "max_dhw_temperature": { "current": 37.3, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "9e4433a9d69f40b3aefd15e74395eaec", + "maximum_boiler_temperature": { + "current": 37.3, + "lower_bound": 20.0, + "resolution": 0.01, + "setpoint": 90.0, + "upper_bound": 90.0 + }, "model": "Generic heater", "model_id": "10.20", "name": "OpenTherm", @@ -421,7 +421,11 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "return_temperature": 37.1, - "water_pressure": 1.4 + "water_pressure": 1.4, + "water_temperature": 37.3 + }, + "switches": { + "dhw_cm_switch": false }, "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 cc40f41f5..a674140d2 100644 --- a/fixtures/adam_onoff_cooling_fake_firmware/data.json +++ b/fixtures/adam_onoff_cooling_fake_firmware/data.json @@ -7,27 +7,27 @@ "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", "eco" ], - "dhw_temperature": { + "location": "eedadcb297564f1483faa509179aebed", + "max_dhw_temperature": { "current": 63.5, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 65.0 }, - "location": "eedadcb297564f1483faa509179aebed", + "maximum_boiler_temperature": { + "current": 24.5, + "lower_bound": 7.0, + "resolution": 0.01, + "setpoint": 35.0, + "upper_bound": 50.0 + }, "model": "Unknown", "name": "OnOff", "sensors": { @@ -35,7 +35,11 @@ "modulation_level": 0.0, "outdoor_air_temperature": 13.5, "return_temperature": 24.9, - "water_pressure": 2.0 + "water_pressure": 2.0, + "water_temperature": 24.5 + }, + "switches": { + "dhw_cm_switch": true } }, "7d97fc3117784cfdafe347bcedcbbbcb": { diff --git a/fixtures/adam_plus_anna/data.json b/fixtures/adam_plus_anna/data.json index 82e620915..69974cd49 100644 --- a/fixtures/adam_plus_anna/data.json +++ b/fixtures/adam_plus_anna/data.json @@ -44,24 +44,28 @@ "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", "eco" ], "location": "07d618f0bb80412687f065b8698ce3e7", + "maximum_boiler_temperature": { + "current": 48.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 80.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 0.0 + "intended_boiler_temperature": 0.0, + "water_temperature": 48.0 + }, + "switches": { + "dhw_cm_switch": false } }, "aa6b0002df0a46e1b1eb94beb61eddfe": { diff --git a/fixtures/adam_plus_anna_new/data.json b/fixtures/adam_plus_anna_new/data.json index 1f0aa4196..0dfd3b176 100644 --- a/fixtures/adam_plus_anna_new/data.json +++ b/fixtures/adam_plus_anna_new/data.json @@ -6,24 +6,28 @@ "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", "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", + "maximum_boiler_temperature": { + "current": 43.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 22.5 + "intended_boiler_temperature": 22.5, + "water_temperature": 43.0 + }, + "switches": { + "dhw_cm_switch": false } }, "10016900610d4c7481df78c89606ef22": { diff --git a/fixtures/adam_plus_anna_new_regulation_off/data.json b/fixtures/adam_plus_anna_new_regulation_off/data.json index 5ec7da839..e65b01c34 100644 --- a/fixtures/adam_plus_anna_new_regulation_off/data.json +++ b/fixtures/adam_plus_anna_new_regulation_off/data.json @@ -6,24 +6,28 @@ "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", "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", + "maximum_boiler_temperature": { + "current": 30.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 0.0 + "intended_boiler_temperature": 0.0, + "water_temperature": 30.0 + }, + "switches": { + "dhw_cm_switch": false } }, "10016900610d4c7481df78c89606ef22": { diff --git a/fixtures/anna_elga_2/data.json b/fixtures/anna_elga_2/data.json index 97e69f202..5d04e4343 100644 --- a/fixtures/anna_elga_2/data.json +++ b/fixtures/anna_elga_2/data.json @@ -28,6 +28,9 @@ "water_pressure": 0.5, "water_temperature": 42.6 }, + "switches": { + "dhw_cm_switch": false + }, "vendor": "Techneco" }, "ebd90df1ab334565b5895f37590ccff4": { diff --git a/fixtures/anna_elga_2_cooling/data.json b/fixtures/anna_elga_2_cooling/data.json index e1d3b007d..2ac1fc32a 100644 --- a/fixtures/anna_elga_2_cooling/data.json +++ b/fixtures/anna_elga_2_cooling/data.json @@ -10,19 +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", "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", + "maximum_boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", @@ -32,7 +32,11 @@ "modulation_level": 0.0, "outdoor_air_temperature": 30.0, "return_temperature": 23.4, - "water_pressure": 0.5 + "water_pressure": 0.5, + "water_temperature": 22.8 + }, + "switches": { + "dhw_cm_switch": true }, "vendor": "Techneco" }, diff --git a/fixtures/anna_elga_2_schedule_off/data.json b/fixtures/anna_elga_2_schedule_off/data.json index 02e11d02e..c8acc282a 100644 --- a/fixtures/anna_elga_2_schedule_off/data.json +++ b/fixtures/anna_elga_2_schedule_off/data.json @@ -10,19 +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", "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", + "maximum_boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", @@ -32,7 +32,11 @@ "modulation_level": 0.0, "outdoor_air_temperature": 13.0, "return_temperature": 23.4, - "water_pressure": 0.5 + "water_pressure": 0.5, + "water_temperature": 22.8 + }, + "switches": { + "dhw_cm_switch": true }, "vendor": "Techneco" }, diff --git a/fixtures/anna_elga_no_cooling/data.json b/fixtures/anna_elga_no_cooling/data.json index dfb5d15c1..08666fb01 100644 --- a/fixtures/anna_elga_no_cooling/data.json +++ b/fixtures/anna_elga_no_cooling/data.json @@ -26,27 +26,27 @@ "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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "a57efe5f145f498c9be62a9b63626fbf", + "max_dhw_temperature": { "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "name": "OpenTherm", "sensors": { @@ -54,7 +54,11 @@ "modulation_level": 52, "outdoor_air_temperature": 3.0, "return_temperature": 25.1, - "water_pressure": 1.57 + "water_pressure": 1.57, + "water_temperature": 29.1 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/fixtures/anna_heatpump_cooling/data.json b/fixtures/anna_heatpump_cooling/data.json index 6c3cf8b7d..ed73c1a36 100644 --- a/fixtures/anna_heatpump_cooling/data.json +++ b/fixtures/anna_heatpump_cooling/data.json @@ -28,19 +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", "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 24.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "eco", @@ -51,7 +51,11 @@ "modulation_level": 40, "outdoor_air_temperature": 22.0, "return_temperature": 23.8, - "water_pressure": 1.61 + "water_pressure": 1.61, + "water_temperature": 24.7 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/fixtures/anna_heatpump_cooling_fake_firmware/data.json b/fixtures/anna_heatpump_cooling_fake_firmware/data.json index 2289796f1..885453d9e 100644 --- a/fixtures/anna_heatpump_cooling_fake_firmware/data.json +++ b/fixtures/anna_heatpump_cooling_fake_firmware/data.json @@ -28,19 +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", "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 24.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "eco", @@ -51,7 +51,11 @@ "modulation_level": 100, "outdoor_air_temperature": 22.0, "return_temperature": 23.8, - "water_pressure": 1.61 + "water_pressure": 1.61, + "water_temperature": 24.7 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/fixtures/anna_heatpump_heating/data.json b/fixtures/anna_heatpump_heating/data.json index 53b710551..12db9c1f6 100644 --- a/fixtures/anna_heatpump_heating/data.json +++ b/fixtures/anna_heatpump_heating/data.json @@ -28,27 +28,27 @@ "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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "a57efe5f145f498c9be62a9b63626fbf", + "max_dhw_temperature": { "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { @@ -56,7 +56,11 @@ "modulation_level": 52, "outdoor_air_temperature": 3.0, "return_temperature": 25.1, - "water_pressure": 1.57 + "water_pressure": 1.57, + "water_temperature": 29.1 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/fixtures/anna_loria_cooling_active/data.json b/fixtures/anna_loria_cooling_active/data.json index 13c3b2432..d690d1fec 100644 --- a/fixtures/anna_loria_cooling_active/data.json +++ b/fixtures/anna_loria_cooling_active/data.json @@ -70,13 +70,6 @@ "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": [ @@ -86,14 +79,21 @@ "eco", "comfort" ], - "dhw_temperature": { + "location": "674b657c138a41a291d315d7471deb06", + "max_dhw_temperature": { "current": 52.9, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "674b657c138a41a291d315d7471deb06", + "maximum_boiler_temperature": { + "current": 25.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", @@ -101,10 +101,12 @@ "intended_boiler_temperature": 0.0, "modulation_level": 100, "outdoor_air_temperature": 17.2, - "return_temperature": 26.3 + "return_temperature": 26.3, + "water_temperature": 25.3 }, "switches": { - "cooling_ena_switch": true + "cooling_ena_switch": true, + "dhw_cm_switch": true }, "vendor": "Atlantic" } diff --git a/fixtures/anna_loria_driessens/data.json b/fixtures/anna_loria_driessens/data.json index 96e480c17..a1eb54217 100644 --- a/fixtures/anna_loria_driessens/data.json +++ b/fixtures/anna_loria_driessens/data.json @@ -72,13 +72,6 @@ "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": [ @@ -88,14 +81,21 @@ "boost", "auto" ], - "dhw_temperature": { + "location": "82c15f65c9bf44c592d69e16139355e3", + "max_dhw_temperature": { "current": 49.5, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "82c15f65c9bf44c592d69e16139355e3", + "maximum_boiler_temperature": { + "current": 23.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 45.0, + "upper_bound": 45.0 + }, "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", @@ -103,10 +103,12 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 7.5, - "return_temperature": 23.0 + "return_temperature": 23.0, + "water_temperature": 23.3 }, "switches": { - "cooling_ena_switch": false + "cooling_ena_switch": false, + "dhw_cm_switch": true }, "vendor": "Atlantic" } diff --git a/fixtures/anna_loria_heating_idle/data.json b/fixtures/anna_loria_heating_idle/data.json index 00fe5ba07..c3bd260c4 100644 --- a/fixtures/anna_loria_heating_idle/data.json +++ b/fixtures/anna_loria_heating_idle/data.json @@ -70,13 +70,6 @@ "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": [ @@ -86,14 +79,21 @@ "eco", "comfort" ], - "dhw_temperature": { + "location": "674b657c138a41a291d315d7471deb06", + "max_dhw_temperature": { "current": 52.9, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "674b657c138a41a291d315d7471deb06", + "maximum_boiler_temperature": { + "current": 25.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", @@ -101,10 +101,12 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 17.2, - "return_temperature": 26.3 + "return_temperature": 26.3, + "water_temperature": 25.3 }, "switches": { - "cooling_ena_switch": false + "cooling_ena_switch": false, + "dhw_cm_switch": true }, "vendor": "Atlantic" } diff --git a/fixtures/anna_p1/data.json b/fixtures/anna_p1/data.json index 4a7f5aa03..0f288e0d2 100644 --- a/fixtures/anna_p1/data.json +++ b/fixtures/anna_p1/data.json @@ -63,6 +63,9 @@ "water_pressure": 6.0, "water_temperature": 35.0 }, + "switches": { + "dhw_cm_switch": true + }, "vendor": "Intergas" }, "53130847be2f436cb946b78dedb9053a": { diff --git a/fixtures/anna_v4/data.json b/fixtures/anna_v4/data.json index cecb3e0a8..4b6f1ecd0 100644 --- a/fixtures/anna_v4/data.json +++ b/fixtures/anna_v4/data.json @@ -66,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "maximum_boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -94,7 +94,11 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2 + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/fixtures/anna_v4_dhw/data.json b/fixtures/anna_v4_dhw/data.json index 01c6bb25d..4932d2034 100644 --- a/fixtures/anna_v4_dhw/data.json +++ b/fixtures/anna_v4_dhw/data.json @@ -66,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "maximum_boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -94,7 +94,11 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2 + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/fixtures/anna_v4_no_tag/data.json b/fixtures/anna_v4_no_tag/data.json index c9ea37dca..419675ca5 100644 --- a/fixtures/anna_v4_no_tag/data.json +++ b/fixtures/anna_v4_no_tag/data.json @@ -66,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "maximum_boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -94,7 +94,11 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2 + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/tests/data/anna/anna_elga_2.json b/tests/data/anna/anna_elga_2.json index 71edd600e..5d04e4343 100644 --- a/tests/data/anna/anna_elga_2.json +++ b/tests/data/anna/anna_elga_2.json @@ -28,11 +28,17 @@ "water_pressure": 0.5, "water_temperature": 42.6 }, + "switches": { + "dhw_cm_switch": false + }, "vendor": "Techneco" }, "ebd90df1ab334565b5895f37590ccff4": { "active_preset": "home", - "available_schedules": ["Thermostat schedule", "off"], + "available_schedules": [ + "Thermostat schedule", + "off" + ], "climate_mode": "auto", "control_state": "heating", "dev_class": "thermostat", @@ -41,7 +47,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": 24.0, diff --git a/tests/data/anna/anna_elga_2_cooling.json b/tests/data/anna/anna_elga_2_cooling.json index e1d3b007d..2ac1fc32a 100644 --- a/tests/data/anna/anna_elga_2_cooling.json +++ b/tests/data/anna/anna_elga_2_cooling.json @@ -10,19 +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", "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", + "maximum_boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", @@ -32,7 +32,11 @@ "modulation_level": 0.0, "outdoor_air_temperature": 30.0, "return_temperature": 23.4, - "water_pressure": 0.5 + "water_pressure": 0.5, + "water_temperature": 22.8 + }, + "switches": { + "dhw_cm_switch": true }, "vendor": "Techneco" }, 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 70ab678d7..892ab5959 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,33 @@ "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", "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", - + "maximum_boiler_temperature": { + "current": 22.8, + "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_pressure": 0.5, + "water_temperature": 22.8 + }, + "switches": { + "dhw_cm_switch": true }, "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 02e11d02e..c8acc282a 100644 --- a/tests/data/anna/anna_elga_2_schedule_off.json +++ b/tests/data/anna/anna_elga_2_schedule_off.json @@ -10,19 +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", "eco" ], "location": "d34dfe6ab90b410c98068e75de3eb631", + "maximum_boiler_temperature": { + "current": 22.8, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "comfort", @@ -32,7 +32,11 @@ "modulation_level": 0.0, "outdoor_air_temperature": 13.0, "return_temperature": 23.4, - "water_pressure": 0.5 + "water_pressure": 0.5, + "water_temperature": 22.8 + }, + "switches": { + "dhw_cm_switch": true }, "vendor": "Techneco" }, diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index dfb5d15c1..08666fb01 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -26,27 +26,27 @@ "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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "a57efe5f145f498c9be62a9b63626fbf", + "max_dhw_temperature": { "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "name": "OpenTherm", "sensors": { @@ -54,7 +54,11 @@ "modulation_level": 52, "outdoor_air_temperature": 3.0, "return_temperature": 25.1, - "water_pressure": 1.57 + "water_pressure": 1.57, + "water_temperature": 29.1 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/tests/data/anna/anna_heatpump_cooling.json b/tests/data/anna/anna_heatpump_cooling.json index 6c3cf8b7d..ed73c1a36 100644 --- a/tests/data/anna/anna_heatpump_cooling.json +++ b/tests/data/anna/anna_heatpump_cooling.json @@ -28,19 +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", "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 24.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "eco", @@ -51,7 +51,11 @@ "modulation_level": 40, "outdoor_air_temperature": 22.0, "return_temperature": 23.8, - "water_pressure": 1.61 + "water_pressure": 1.61, + "water_temperature": 24.7 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json index 2289796f1..885453d9e 100644 --- a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json +++ b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json @@ -28,19 +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", "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 24.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "eco", @@ -51,7 +51,11 @@ "modulation_level": 100, "outdoor_air_temperature": 22.0, "return_temperature": 23.8, - "water_pressure": 1.61 + "water_pressure": 1.61, + "water_temperature": 24.7 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index 53b710551..12db9c1f6 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -28,27 +28,27 @@ "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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "a57efe5f145f498c9be62a9b63626fbf", + "max_dhw_temperature": { "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 29.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { @@ -56,7 +56,11 @@ "modulation_level": 52, "outdoor_air_temperature": 3.0, "return_temperature": 25.1, - "water_pressure": 1.57 + "water_pressure": 1.57, + "water_temperature": 29.1 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json index 94995038b..9d1cce51a 100644 --- a/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json +++ b/tests/data/anna/anna_heatpump_heating_UPDATED_DATA.json @@ -10,19 +10,19 @@ "secondary_boiler_state": false, "flame_state": false }, - "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", "eco" ], "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 29.1, + "setpoint": 60.0, + "lower_bound": 0.0, + "upper_bound": 100.0, + "resolution": 1.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "select_dhw_mode": "eco", @@ -34,6 +34,9 @@ "outdoor_air_temperature": 3.0 }, + "switches": { + "dhw_cm_switch": false + }, "vendor": "Techneco" } } diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index 13c3b2432..d690d1fec 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -70,13 +70,6 @@ "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": [ @@ -86,14 +79,21 @@ "eco", "comfort" ], - "dhw_temperature": { + "location": "674b657c138a41a291d315d7471deb06", + "max_dhw_temperature": { "current": 52.9, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "674b657c138a41a291d315d7471deb06", + "maximum_boiler_temperature": { + "current": 25.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", @@ -101,10 +101,12 @@ "intended_boiler_temperature": 0.0, "modulation_level": 100, "outdoor_air_temperature": 17.2, - "return_temperature": 26.3 + "return_temperature": 26.3, + "water_temperature": 25.3 }, "switches": { - "cooling_ena_switch": true + "cooling_ena_switch": true, + "dhw_cm_switch": true }, "vendor": "Atlantic" } diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index 96e480c17..a1eb54217 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -72,13 +72,6 @@ "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": [ @@ -88,14 +81,21 @@ "boost", "auto" ], - "dhw_temperature": { + "location": "82c15f65c9bf44c592d69e16139355e3", + "max_dhw_temperature": { "current": 49.5, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "82c15f65c9bf44c592d69e16139355e3", + "maximum_boiler_temperature": { + "current": 23.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 45.0, + "upper_bound": 45.0 + }, "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", @@ -103,10 +103,12 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 7.5, - "return_temperature": 23.0 + "return_temperature": 23.0, + "water_temperature": 23.3 }, "switches": { - "cooling_ena_switch": false + "cooling_ena_switch": false, + "dhw_cm_switch": true }, "vendor": "Atlantic" } diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index 00fe5ba07..c3bd260c4 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -70,13 +70,6 @@ "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": [ @@ -86,14 +79,21 @@ "eco", "comfort" ], - "dhw_temperature": { + "location": "674b657c138a41a291d315d7471deb06", + "max_dhw_temperature": { "current": 52.9, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "674b657c138a41a291d315d7471deb06", + "maximum_boiler_temperature": { + "current": 25.3, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 40.0, + "upper_bound": 45.0 + }, "model": "Generic heater/cooler", "model_id": "173", "name": "OpenTherm", @@ -101,10 +101,12 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 17.2, - "return_temperature": 26.3 + "return_temperature": 26.3, + "water_temperature": 25.3 }, "switches": { - "cooling_ena_switch": false + "cooling_ena_switch": false, + "dhw_cm_switch": true }, "vendor": "Atlantic" } diff --git a/tests/data/anna/anna_p1.json b/tests/data/anna/anna_p1.json index a2206b942..0f288e0d2 100644 --- a/tests/data/anna/anna_p1.json +++ b/tests/data/anna/anna_p1.json @@ -1,7 +1,10 @@ { "1e5e55b958ac445583602f767cb45942": { "active_preset": "home", - "available_schedules": ["Thermostat schedule", "off"], + "available_schedules": [ + "Thermostat schedule", + "off" + ], "climate_mode": "heat", "control_state": "idle", "dev_class": "thermostat", @@ -10,7 +13,13 @@ "location": "5b13651d79c4454684fd268850b1bff8", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["home", "asleep", "away", "vacation", "no_frost"], + "preset_modes": [ + "home", + "asleep", + "away", + "vacation", + "no_frost" + ], "select_schedule": "off", "sensors": { "illuminance": 2.0, @@ -39,7 +48,10 @@ "heating_state": false }, "dev_class": "heater_central", - "dhw_modes": ["comfort", "eco"], + "dhw_modes": [ + "comfort", + "eco" + ], "location": "da7be222ab3b420c927f3e49fade0304", "model": "Generic heater", "model_id": "HR24", @@ -51,8 +63,29 @@ "water_pressure": 6.0, "water_temperature": 35.0 }, + "switches": { + "dhw_cm_switch": true + }, "vendor": "Intergas" }, + "53130847be2f436cb946b78dedb9053a": { + "binary_sensors": { + "plugwise_notification": false + }, + "dev_class": "gateway", + "firmware": "4.4.4", + "hardware": "AME Smile 2.0 board", + "location": "da7be222ab3b420c927f3e49fade0304", + "mac_address": "C493000ABCD", + "model": "Gateway", + "model_id": "smile_thermo", + "name": "Smile Anna P1", + "notifications": {}, + "sensors": { + "outdoor_temperature": 11.8 + }, + "vendor": "Plugwise" + }, "da7be222ab3b420c927f3e49fade0304": { "available": true, "dev_class": "smartmeter", @@ -81,23 +114,5 @@ "voltage_phase_one": 234.6 }, "vendor": "SAGEM" - }, - "53130847be2f436cb946b78dedb9053a": { - "binary_sensors": { - "plugwise_notification": false - }, - "dev_class": "gateway", - "firmware": "4.4.4", - "hardware": "AME Smile 2.0 board", - "location": "da7be222ab3b420c927f3e49fade0304", - "mac_address": "C493000ABCD", - "model": "Gateway", - "model_id": "smile_thermo", - "name": "Smile Anna P1", - "notifications": {}, - "sensors": { - "outdoor_temperature": 11.8 - }, - "vendor": "Plugwise" } } diff --git a/tests/data/anna/anna_v4.json b/tests/data/anna/anna_v4.json index cecb3e0a8..4b6f1ecd0 100644 --- a/tests/data/anna/anna_v4.json +++ b/tests/data/anna/anna_v4.json @@ -66,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "maximum_boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -94,7 +94,11 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2 + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/tests/data/anna/anna_v4_UPDATED_DATA.json b/tests/data/anna/anna_v4_UPDATED_DATA.json index 4cd8fdda5..ac5cdaff1 100644 --- a/tests/data/anna/anna_v4_UPDATED_DATA.json +++ b/tests/data/anna/anna_v4_UPDATED_DATA.json @@ -1,31 +1,32 @@ { "cd0e6156b1f04d5f952349ffbe397481": { - "boiler_temperature": { + "dhw_mode": "comfort", + "dhw_modes": ["comfort", "eco"], + "binary_sensors": { + "dhw_state": false, + "heating_state": false, + "flame_state": false + }, + "maximum_boiler_temperature": { "current": 51.0, "setpoint": 69.0, "lower_bound": 0.0, "upper_bound": 100.0, "resolution": 1.0 }, - "dhw_mode": "comfort", - "dhw_modes": ["comfort", "eco"], - "dhw_temperature": { + "max_dhw_temperature": { "current": 51.0, "setpoint": 59.0, "lower_bound": 30.0, "upper_bound": 60.0, "resolution": 0.01 }, - "binary_sensors": { - "dhw_state": false, - "heating_state": false, - "flame_state": false - }, "sensors": { "intended_boiler_temperature": 0.0, "modulation_level": 0, "return_temperature": 41.0, - "water_pressure": 2.1 + "water_pressure": 2.1, + "water_temperature": 51.0 } }, "01b85360fdd243d0aaad4d6ac2a5ba7e": { diff --git a/tests/data/anna/anna_v4_dhw.json b/tests/data/anna/anna_v4_dhw.json index 01c6bb25d..4932d2034 100644 --- a/tests/data/anna/anna_v4_dhw.json +++ b/tests/data/anna/anna_v4_dhw.json @@ -66,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "maximum_boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -94,7 +94,11 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2 + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/tests/data/anna/anna_v4_no_tag.json b/tests/data/anna/anna_v4_no_tag.json index c9ea37dca..419675ca5 100644 --- a/tests/data/anna/anna_v4_no_tag.json +++ b/tests/data/anna/anna_v4_no_tag.json @@ -66,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "max_dhw_temperature": { "current": 45.0, "lower_bound": 30.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "94c107dc6ac84ed98e9f68c0dd06bf71", + "maximum_boiler_temperature": { + "current": 45.0, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 70.0, + "upper_bound": 100.0 + }, "model": "Generic heater", "model_id": "2.32", "name": "OpenTherm", @@ -94,7 +94,11 @@ "intended_boiler_temperature": 39.9, "modulation_level": 0.0, "return_temperature": 32.0, - "water_pressure": 2.2 + "water_pressure": 2.2, + "water_temperature": 45.0 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." } diff --git a/tests/data/anna/anna_without_boiler_fw441.json b/tests/data/anna/anna_without_boiler_fw441.json index 7e0b7cc4f..7cc9eaff3 100644 --- a/tests/data/anna/anna_without_boiler_fw441.json +++ b/tests/data/anna/anna_without_boiler_fw441.json @@ -1,7 +1,11 @@ { "7ffbb3ab4b6c4ab2915d7510f7bf8fe9": { "active_preset": "home", - "available_schedules": ["Test", "Normaal", "off"], + "available_schedules": [ + "Test", + "Normaal", + "off" + ], "climate_mode": "auto", "control_state": "idle", "dev_class": "thermostat", @@ -10,7 +14,13 @@ "location": "c34c6864216446528e95d88985e714cc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "asleep", "away", "vacation", "home"], + "preset_modes": [ + "no_frost", + "asleep", + "away", + "vacation", + "home" + ], "select_schedule": "Normaal", "sensors": { "illuminance": 0.25, From 77ab0c541ec888fcf305a874f7a415a7b5531e2f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 15:10:36 +0200 Subject: [PATCH 27/52] Update entity_items count --- tests/test_anna.py | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/tests/test_anna.py b/tests/test_anna.py index 4e47fe965..f702f8b0b 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 == 62 + assert self.entity_items == 64 assert not self.notifications assert not self.cooling_present @@ -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 == 62 + assert self.entity_items == 64 assert not self.notifications result = await self.tinker_thermostat( @@ -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 == 62 + assert self.entity_items == 64 result = await self.tinker_thermostat( api, @@ -186,7 +186,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test(api, "2020-04-12 00:00:01", testdata) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - assert self.entity_items == 70 + assert self.entity_items == 72 assert not self.notifications assert self.cooling_present assert not self._cooling_enabled @@ -216,7 +216,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test( api, "2020-04-13 00:00:01", testdata_updated, initialize=False ) - assert self.entity_items == 67 + assert self.entity_items == 69 await api.close_connection() await self.disconnect(server, client) @@ -241,7 +241,7 @@ async def test_connect_anna_heatpump_cooling(self): ) await self.device_test(api, "2020-04-19 00:00:01", testdata) - assert self.entity_items == 67 + assert self.entity_items == 69 assert self.cooling_present assert not self.notifications @@ -287,7 +287,7 @@ async def test_connect_anna_heatpump_cooling_fake_firmware(self): ) await self.device_test(api, "2020-04-19 00:00:01", testdata) - assert self.entity_items == 67 + assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled assert self._cooling_active @@ -313,7 +313,7 @@ async def test_connect_anna_elga_no_cooling(self): await self.device_test(api, "2020-04-12 00:00:01", testdata) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - assert self.entity_items == 66 + assert self.entity_items == 68 assert not self.notifications assert not self.cooling_present @@ -336,7 +336,7 @@ async def test_connect_anna_elga_2(self): ) await self.device_test(api, "2022-03-13 00:00:01", testdata) - assert self.entity_items == 62 + assert self.entity_items == 63 assert api.gateway_id == "fb49af122f6e4b0f91267e1cf7666d6f" assert self.cooling_present assert not self._cooling_enabled @@ -356,7 +356,7 @@ async def test_connect_anna_elga_2_schedule_off(self): await self.device_test(api, "2022-03-13 00:00:01", testdata) assert not self._cooling_enabled - assert self.entity_items == 66 + assert self.entity_items == 68 result = await self.tinker_thermostat( api, @@ -387,7 +387,7 @@ async def test_connect_anna_elga_2_cooling(self): ) await self.device_test(api, "2022-03-10 00:00:01", testdata) - assert self.entity_items == 66 + assert self.entity_items == 68 assert not self.notifications assert self.cooling_present @@ -440,7 +440,7 @@ async def test_connect_anna_loria_heating_idle(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 67 + assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -509,7 +509,7 @@ async def test_connect_anna_loria_cooling_active(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 67 + assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled @@ -532,7 +532,7 @@ async def test_connect_anna_loria_driessens(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 67 + assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -555,7 +555,7 @@ async def test_connect_anna_p1(self): ) await self.device_test(api, "2025-11-02 00:00:01", testdata) - assert self.entity_items == 77 + assert self.entity_items == 78 await api.close_connection() await self.disconnect(server, client) From a003289664eb0e1bffdc9e125fedf09033cfaccf Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 15:16:12 +0200 Subject: [PATCH 28/52] Add missing argument --- plugwise/legacy/helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise/legacy/helper.py b/plugwise/legacy/helper.py index ab6f55ad1..ee92fe7d9 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, data) + self._get_actuator_functionalities(appliance, data, entity) # Anna: the Smile outdoor_temperature is present in the Home location # For some Anna's LOCATIONS is empty, falling back to domain_objects! From cebbaca6018110221fea6b1a8e6c94b2145deecd Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 15:17:18 +0200 Subject: [PATCH 29/52] Update test-json --- tests/data/anna/legacy_anna.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/data/anna/legacy_anna.json b/tests/data/anna/legacy_anna.json index c0adfe8f3..c38e6f0a2 100644 --- a/tests/data/anna/legacy_anna.json +++ b/tests/data/anna/legacy_anna.json @@ -13,15 +13,15 @@ "flame_state": true, "heating_state": true }, - "boiler_temperature": { + "dev_class": "heater_central", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "maximum_boiler_temperature": { "current": 23.6, "lower_bound": 50.0, "resolution": 1.0, "setpoint": 50.0, "upper_bound": 90.0 }, - "dev_class": "heater_central", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", "model": "Generic heater", "name": "OpenTherm", "sensors": { @@ -29,7 +29,8 @@ "intended_boiler_temperature": 17.0, "modulation_level": 0.0, "return_temperature": 21.7, - "water_pressure": 1.2 + "water_pressure": 1.2, + "water_temperature": 23.6 }, "vendor": "Bosch Thermotechniek B.V." }, From a43b658245509e0d6ac3a89dedea7ce89d450580 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 15:18:39 +0200 Subject: [PATCH 30/52] Update entity_items counts --- fixtures/legacy_anna/data.json | 9 +++++---- tests/test_legacy_anna.py | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/fixtures/legacy_anna/data.json b/fixtures/legacy_anna/data.json index c0adfe8f3..c38e6f0a2 100644 --- a/fixtures/legacy_anna/data.json +++ b/fixtures/legacy_anna/data.json @@ -13,15 +13,15 @@ "flame_state": true, "heating_state": true }, - "boiler_temperature": { + "dev_class": "heater_central", + "location": "0000aaaa0000aaaa0000aaaa0000aa00", + "maximum_boiler_temperature": { "current": 23.6, "lower_bound": 50.0, "resolution": 1.0, "setpoint": 50.0, "upper_bound": 90.0 }, - "dev_class": "heater_central", - "location": "0000aaaa0000aaaa0000aaaa0000aa00", "model": "Generic heater", "name": "OpenTherm", "sensors": { @@ -29,7 +29,8 @@ "intended_boiler_temperature": 17.0, "modulation_level": 0.0, "return_temperature": 21.7, - "water_pressure": 1.2 + "water_pressure": 1.2, + "water_temperature": 23.6 }, "vendor": "Bosch Thermotechniek B.V." }, diff --git a/tests/test_legacy_anna.py b/tests/test_legacy_anna.py index bf12e143c..4690a6fb7 100644 --- a/tests/test_legacy_anna.py +++ b/tests/test_legacy_anna.py @@ -30,7 +30,7 @@ async def test_connect_legacy_anna(self): await self.device_test(api, "2020-03-22 00:00:01", testdata) assert api.gateway_id == "0000aaaa0000aaaa0000aaaa0000aa00" - assert self.entity_items == 44 + assert self.entity_items == 45 assert not api.reboot result = await self.tinker_legacy_thermostat(api, schedule_on=False) @@ -65,7 +65,7 @@ async def test_connect_legacy_anna_2(self): await self.device_test(api, "2020-05-03 00:00:01", testdata) assert api.gateway_id == "be81e3f8275b4129852c4d8d550ae2eb" - assert self.entity_items == 44 + assert self.entity_items == 45 result = await self.tinker_legacy_thermostat(api) assert result From 57cd4645d902530e29b48073ea26d4a0f0cb96aa Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 15:19:30 +0200 Subject: [PATCH 31/52] Update test-json --- tests/data/anna/legacy_anna_2.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/data/anna/legacy_anna_2.json b/tests/data/anna/legacy_anna_2.json index 635756ecf..160911444 100644 --- a/tests/data/anna/legacy_anna_2.json +++ b/tests/data/anna/legacy_anna_2.json @@ -51,15 +51,15 @@ "flame_state": false, "heating_state": false }, - "boiler_temperature": { + "dev_class": "heater_central", + "location": "be81e3f8275b4129852c4d8d550ae2eb", + "maximum_boiler_temperature": { "current": 54.0, "lower_bound": 50.0, "resolution": 1.0, "setpoint": 70.0, "upper_bound": 90.0 }, - "dev_class": "heater_central", - "location": "be81e3f8275b4129852c4d8d550ae2eb", "model": "Generic heater", "name": "OpenTherm", "sensors": { @@ -67,7 +67,8 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "return_temperature": 0.0, - "water_pressure": 1.7 + "water_pressure": 1.7, + "water_temperature": 54.0 } } } From e6da846a434cfc4867a2d3b5a9f1707bb10fa5f8 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 15:21:54 +0200 Subject: [PATCH 32/52] Mypy fix --- plugwise/smile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise/smile.py b/plugwise/smile.py index 4442d41a3..5f5235d7f 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -261,7 +261,7 @@ async def set_dhw_mode( - 2 modes, comfort and off, representing the dhw comfort mode on and off switch states, - and the 5 modes available on the Loria. """ - if mode not in self._dhw_allowed_modes: + if self._dhw_allowed_modes is not None and mode not in self._dhw_allowed_modes: raise PlugwiseError("Plugwise: invalid dhw mode.") match length: From 12c0bafbca44b1b2de211a4f89d1834b949cc9b5 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 15:24:33 +0200 Subject: [PATCH 33/52] Fix manual fixtures script --- scripts/manual_fixtures.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/manual_fixtures.py b/scripts/manual_fixtures.py index 5149001c9..f9cb11d99 100755 --- a/scripts/manual_fixtures.py +++ b/scripts/manual_fixtures.py @@ -127,7 +127,7 @@ def json_writer(manual_name: str, output: dict) -> None: m_adam_cooling["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"]["flame_state"] = ( False ) -m_adam_cooling["056ee145a816487eaa69243c3280f8bf"]["boiler_temperature"]["current"] = 19.0 +m_adam_cooling["056ee145a816487eaa69243c3280f8bf"]["maximum_boiler_temperature"]["current"] = 19.0 m_adam_cooling["056ee145a816487eaa69243c3280f8bf"]["sensors"][ "intended_boiler_temperature" ] = 17.5 @@ -182,11 +182,11 @@ def json_writer(manual_name: str, output: dict) -> None: m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["binary_sensors"]["flame_state"] = ( False ) -m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["boiler_temperature"]["current"] = 37.0 +m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["maximum_boiler_temperature"]["current"] = 37.0 m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["sensors"][ "intended_boiler_temperature" ] = 38.1 -m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["dhw_temperature"] = { +m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["max_dhw_temperature"] = { "current": 37.0, "setpoint": 60.0, "lower_bound": 40.0, @@ -244,8 +244,8 @@ def json_writer(manual_name: str, output: dict) -> None: "cooling_state" ] = True -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"]["maximum_boiler_temperature"]["current"] = 22.7 +m_anna_heatpump_cooling["1cbf783bb11e4a7c8a6843dee3a86927"]["max_dhw_temperature"]["current"] = 41.5 m_anna_heatpump_cooling["1cbf783bb11e4a7c8a6843dee3a86927"]["sensors"][ "intended_boiler_temperature" ] = 0.0 @@ -297,8 +297,8 @@ def json_writer(manual_name: str, output: dict) -> None: "cooling_state" ] = False -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"]["maximum_boiler_temperature"]["current"] = 19.1 +m_anna_heatpump_idle["1cbf783bb11e4a7c8a6843dee3a86927"]["max_dhw_temperature"]["current"] = 46.3 m_anna_heatpump_idle["1cbf783bb11e4a7c8a6843dee3a86927"]["sensors"][ "intended_boiler_temperature" ] = 18.0 From 828f39de099ca93e0a3a63d0fd3afa7b23dde08b Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 17:56:52 +0200 Subject: [PATCH 34/52] Save updated fixture --- fixtures/legacy_anna_2/data.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/fixtures/legacy_anna_2/data.json b/fixtures/legacy_anna_2/data.json index 635756ecf..160911444 100644 --- a/fixtures/legacy_anna_2/data.json +++ b/fixtures/legacy_anna_2/data.json @@ -51,15 +51,15 @@ "flame_state": false, "heating_state": false }, - "boiler_temperature": { + "dev_class": "heater_central", + "location": "be81e3f8275b4129852c4d8d550ae2eb", + "maximum_boiler_temperature": { "current": 54.0, "lower_bound": 50.0, "resolution": 1.0, "setpoint": 70.0, "upper_bound": 90.0 }, - "dev_class": "heater_central", - "location": "be81e3f8275b4129852c4d8d550ae2eb", "model": "Generic heater", "name": "OpenTherm", "sensors": { @@ -67,7 +67,8 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "return_temperature": 0.0, - "water_pressure": 1.7 + "water_pressure": 1.7, + "water_temperature": 54.0 } } } From fc7ff85e095159878c4a26832916026316f7b742 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 18:14:53 +0200 Subject: [PATCH 35/52] Update m_adam_heating --- scripts/manual_fixtures.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/manual_fixtures.py b/scripts/manual_fixtures.py index f9cb11d99..cd467a2c5 100755 --- a/scripts/manual_fixtures.py +++ b/scripts/manual_fixtures.py @@ -193,6 +193,9 @@ def json_writer(manual_name: str, output: dict) -> None: "upper_bound": 60.0, "resolution": 0.01, } +dhw_mode = m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["select_dhw_mode"] +m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["dhw_mode"] = dhw_mode +m_adam_heating["056ee145a816487eaa69243c3280f8bf"].pop("select_dhw_mode") json_writer("m_adam_heating", m_adam_heating) From d78ea9e7a6fdc70025dda84fe10a283462db8974 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 18:17:51 +0200 Subject: [PATCH 36/52] Save updated manual fixtures --- fixtures/m_adam_cooling/data.json | 20 ++++++++------ fixtures/m_adam_heating/data.json | 26 +++++++++++-------- .../m_adam_heating_off_schedule/data.json | 26 +++++++++++-------- fixtures/m_adam_jip/data.json | 24 ++++++++++------- fixtures/m_anna_heatpump_cooling/data.json | 24 ++++++++++------- fixtures/m_anna_heatpump_idle/data.json | 24 ++++++++++------- 6 files changed, 84 insertions(+), 60 deletions(-) diff --git a/fixtures/m_adam_cooling/data.json b/fixtures/m_adam_cooling/data.json index 6aaec3e90..da02a5282 100644 --- a/fixtures/m_adam_cooling/data.json +++ b/fixtures/m_adam_cooling/data.json @@ -7,24 +7,28 @@ "flame_state": false, "heating_state": false }, - "boiler_temperature": { - "current": 19.0, - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 - }, "dev_class": "heater_central", "dhw_modes": [ "comfort", "eco" ], "location": "bc93488efab249e5bc54fd7e175a6f91", + "maximum_boiler_temperature": { + "current": 19.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "model": "Generic heater", "name": "OpenTherm", "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 17.5 + "intended_boiler_temperature": 17.5, + "water_temperature": 43.0 + }, + "switches": { + "dhw_cm_switch": false } }, "14df5c4dc8cb4ba69f9d1ac0eaf7c5c6": { diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index ad2fb4df1..ff886503f 100644 --- a/fixtures/m_adam_heating/data.json +++ b/fixtures/m_adam_heating/data.json @@ -6,31 +6,35 @@ "flame_state": false, "heating_state": true }, - "boiler_temperature": { - "current": 37.0, - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 - }, "dev_class": "heater_central", + "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "bc93488efab249e5bc54fd7e175a6f91", + "max_dhw_temperature": { "current": 37.0, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "bc93488efab249e5bc54fd7e175a6f91", + "maximum_boiler_temperature": { + "current": 37.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 38.1 + "intended_boiler_temperature": 38.1, + "water_temperature": 43.0 + }, + "switches": { + "dhw_cm_switch": false } }, "14df5c4dc8cb4ba69f9d1ac0eaf7c5c6": { diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index 9b2b1b245..d4680bb43 100644 --- a/fixtures/m_adam_heating_off_schedule/data.json +++ b/fixtures/m_adam_heating_off_schedule/data.json @@ -6,31 +6,35 @@ "flame_state": false, "heating_state": false }, - "boiler_temperature": { - "current": 37.0, - "lower_bound": 25.0, - "resolution": 0.01, - "setpoint": 50.0, - "upper_bound": 95.0 - }, "dev_class": "heater_central", + "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "bc93488efab249e5bc54fd7e175a6f91", + "max_dhw_temperature": { "current": 37.0, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "bc93488efab249e5bc54fd7e175a6f91", + "maximum_boiler_temperature": { + "current": 37.0, + "lower_bound": 25.0, + "resolution": 0.01, + "setpoint": 50.0, + "upper_bound": 95.0 + }, "model": "Generic heater", "name": "OpenTherm", - "select_dhw_mode": "eco", "sensors": { - "intended_boiler_temperature": 0.0 + "intended_boiler_temperature": 0.0, + "water_temperature": 43.0 + }, + "switches": { + "dhw_cm_switch": false } }, "14df5c4dc8cb4ba69f9d1ac0eaf7c5c6": { diff --git a/fixtures/m_adam_jip/data.json b/fixtures/m_adam_jip/data.json index 28867a99d..fafc3cb2a 100644 --- a/fixtures/m_adam_jip/data.json +++ b/fixtures/m_adam_jip/data.json @@ -392,27 +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": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "9e4433a9d69f40b3aefd15e74395eaec", + "max_dhw_temperature": { "current": 37.3, "lower_bound": 40.0, "resolution": 0.01, "setpoint": 60.0, "upper_bound": 60.0 }, - "location": "9e4433a9d69f40b3aefd15e74395eaec", + "maximum_boiler_temperature": { + "current": 37.3, + "lower_bound": 20.0, + "resolution": 0.01, + "setpoint": 90.0, + "upper_bound": 90.0 + }, "model": "Generic heater", "model_id": "10.20", "name": "OpenTherm", @@ -420,7 +420,11 @@ "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "return_temperature": 37.1, - "water_pressure": 1.4 + "water_pressure": 1.4, + "water_temperature": 37.3 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Remeha B.V." }, diff --git a/fixtures/m_anna_heatpump_cooling/data.json b/fixtures/m_anna_heatpump_cooling/data.json index 018610533..0c846804d 100644 --- a/fixtures/m_anna_heatpump_cooling/data.json +++ b/fixtures/m_anna_heatpump_cooling/data.json @@ -28,27 +28,27 @@ "heating_state": false, "secondary_boiler_state": false }, - "boiler_temperature": { - "current": 22.7, - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "dev_class": "heater_central", "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "a57efe5f145f498c9be62a9b63626fbf", + "max_dhw_temperature": { "current": 41.5, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 22.7, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { @@ -56,7 +56,11 @@ "modulation_level": 40, "outdoor_air_temperature": 28.0, "return_temperature": 23.8, - "water_pressure": 1.57 + "water_pressure": 1.57, + "water_temperature": 29.1 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index 2578a20a0..329e502b3 100644 --- a/fixtures/m_anna_heatpump_idle/data.json +++ b/fixtures/m_anna_heatpump_idle/data.json @@ -28,27 +28,27 @@ "heating_state": false, "secondary_boiler_state": false }, - "boiler_temperature": { - "current": 19.1, - "lower_bound": 0.0, - "resolution": 1.0, - "setpoint": 60.0, - "upper_bound": 100.0 - }, "dev_class": "heater_central", "dhw_mode": "eco", "dhw_modes": [ "comfort", "eco" ], - "dhw_temperature": { + "location": "a57efe5f145f498c9be62a9b63626fbf", + "max_dhw_temperature": { "current": 46.3, "lower_bound": 35.0, "resolution": 0.01, "setpoint": 53.0, "upper_bound": 60.0 }, - "location": "a57efe5f145f498c9be62a9b63626fbf", + "maximum_boiler_temperature": { + "current": 19.1, + "lower_bound": 0.0, + "resolution": 1.0, + "setpoint": 60.0, + "upper_bound": 100.0 + }, "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { @@ -56,7 +56,11 @@ "modulation_level": 0, "outdoor_air_temperature": 28.2, "return_temperature": 22.0, - "water_pressure": 1.57 + "water_pressure": 1.57, + "water_temperature": 29.1 + }, + "switches": { + "dhw_cm_switch": false }, "vendor": "Techneco" }, From 51f0d0f2f442a453b7f739316959705e4506b249 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 18:23:25 +0200 Subject: [PATCH 37/52] Shorten guard --- plugwise/smile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise/smile.py b/plugwise/smile.py index 5f5235d7f..39deea4ce 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -261,7 +261,7 @@ async def set_dhw_mode( - 2 modes, comfort and off, representing the dhw comfort mode on and off switch states, - and the 5 modes available on the Loria. """ - if self._dhw_allowed_modes is not None and mode not in self._dhw_allowed_modes: + if self._dhw_allowed_modes and mode not in self._dhw_allowed_modes: raise PlugwiseError("Plugwise: invalid dhw mode.") match length: From 76c0b3618dd1be857043578925f219d5b147949c Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 18:39:57 +0200 Subject: [PATCH 38/52] Update CHANGELOG --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 191a82937..81f77b84d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## v1.14.0 + +- Include both old and new entities for a step-wise introduction of water_heaters in HA via PR [#895](https://github.com/plugwise/python-plugwise/pull/895): + - Keep the `dhw_cm_switch` and add the `dhw_modes list` and the `select_dhw_mode` string that will replace the `dhw_cm_switch` in the future + - `dhw_cm_switch` = `on` --> `select_dhw_mode` = `comfort`, `dhw_cm_switch` = `off` --> `select_dhw_mode` = `eco` + - Add a `current` (`temperature`) key to the `maximum_boiler_temperature` and `max_dhw_temperature` dicts + ## v1.13.1 - Implement dedicated boiler_temperature dict for legacy Anna via PR [#893](https://github.com/plugwise/python-plugwise/pull/893) From 5f0925bf2e7346fb4c2e1eaf507d42a57cf59588 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 18:40:33 +0200 Subject: [PATCH 39/52] Bump version to v1.14.0a0 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 892bbf11e..eb37a14bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "plugwise" -version = "1.13.1" +version = "1.14.0a0" license = "MIT" description = "Plugwise Smile (Adam/Anna/P1) and Stretch module for Python 3." readme = "README.md" From bd6ee0891b8d88fe352b93718a49d7ba552df584 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 18:43:16 +0200 Subject: [PATCH 40/52] One more update for m_adam_heating, as suggested --- scripts/manual_fixtures.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/manual_fixtures.py b/scripts/manual_fixtures.py index cd467a2c5..a62d9cf3b 100755 --- a/scripts/manual_fixtures.py +++ b/scripts/manual_fixtures.py @@ -186,6 +186,9 @@ def json_writer(manual_name: str, output: dict) -> None: m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["sensors"][ "intended_boiler_temperature" ] = 38.1 +m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["sensors"][ + "water_temperature" +] = 37.0 m_adam_heating["056ee145a816487eaa69243c3280f8bf"]["max_dhw_temperature"] = { "current": 37.0, "setpoint": 60.0, From 5a41fa6484cc919d645fe60b4b6046ded62dfa2f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 18:44:54 +0200 Subject: [PATCH 41/52] Save updated manual fixtures --- fixtures/m_adam_heating/data.json | 2 +- fixtures/m_adam_heating_off_schedule/data.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/fixtures/m_adam_heating/data.json b/fixtures/m_adam_heating/data.json index ff886503f..719e9f212 100644 --- a/fixtures/m_adam_heating/data.json +++ b/fixtures/m_adam_heating/data.json @@ -31,7 +31,7 @@ "name": "OpenTherm", "sensors": { "intended_boiler_temperature": 38.1, - "water_temperature": 43.0 + "water_temperature": 37.0 }, "switches": { "dhw_cm_switch": false diff --git a/fixtures/m_adam_heating_off_schedule/data.json b/fixtures/m_adam_heating_off_schedule/data.json index d4680bb43..fb9db1939 100644 --- a/fixtures/m_adam_heating_off_schedule/data.json +++ b/fixtures/m_adam_heating_off_schedule/data.json @@ -31,7 +31,7 @@ "name": "OpenTherm", "sensors": { "intended_boiler_temperature": 0.0, - "water_temperature": 43.0 + "water_temperature": 37.0 }, "switches": { "dhw_cm_switch": false From 95aeccfe2f63ad71dce20c8e1022b01d5926d675 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 Jul 2026 18:50:58 +0200 Subject: [PATCH 42/52] Update docstring as suggested, keep the dhw_temperature sensor for now --- plugwise/common.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/plugwise/common.py b/plugwise/common.py index 49c735401..2c784b187 100644 --- a/plugwise/common.py +++ b/plugwise/common.py @@ -295,19 +295,16 @@ def _get_module_data( 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. - """ + """Update the max_dhw_temperature and maximum_boiler_temperature dicts with a current key.""" if item == DHW_SETPOINT: item = "max_dhw_temperature" if DHW_SETPOINT in data["sensors"]: data["sensors"].pop(DHW_SETPOINT) self._count -= 1 + # Use dhw_temperature when available, otherwise use water_temperature if "dhw_temperature" in data["sensors"]: temp_dict["current"] = data["sensors"]["dhw_temperature"] - data["sensors"].pop("dhw_temperature") + self._count += 1 elif "water_temperature" in data["sensors"]: temp_dict["current"] = data["sensors"]["water_temperature"] self._count += 1 From 9a20b573c10fd7802706b66e1061c261df0fa9ba Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 08:03:17 +0200 Subject: [PATCH 43/52] Enable skip_testing --- tests/test_adam.py | 18 +++++++++--------- tests/test_anna.py | 32 ++++++++++++++++---------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/tests/test_adam.py b/tests/test_adam.py index a1270b39f..d03404020 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -23,7 +23,7 @@ async def test_connect_adam_bad_thermostat(self, caplog): testdata = await self.load_testdata(SMILE_TYPE, self.smile_setup) server, api, client = await self.connect_wrapper(raise_timeout=True) - await self.device_test(api, "2023-12-17 00:00:01", testdata) + await self.device_test(api, "2023-12-17 00:00:01", testdata, skip_testing=True) assert "Thermostat data in Zone" in caplog.text await api.close_connection() @@ -45,7 +45,7 @@ async def test_connect_adam_plus_anna_new(self): smile_version="3.9.0", ) - test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata) + test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "da224107914542988a88561b4452b0f6" assert self.entity_items == 234 assert test_items == self.entity_items @@ -218,7 +218,7 @@ async def test_connect_adam_plus_anna_new_regulation_off(self): server, api, client = await self.connect_wrapper() assert api.smile.hostname == "smile000000" - await self.device_test(api, "2023-12-17 00:00:01", testdata) + await self.device_test(api, "2023-12-17 00:00:01", testdata, skip_testing=True) await api.close_connection() await self.disconnect(server, client) @@ -238,7 +238,7 @@ async def test_connect_adam_zone_per_device(self): smile_version="3.0.15", ) - test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata) + test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "fe799307f1624099878210aa0b9f1475" assert self.entity_items == 386 assert test_items == self.entity_items @@ -313,7 +313,7 @@ async def test_connect_adam_multiple_devices_per_zone(self): smile_version="3.0.15", ) - test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata) + test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert self.entity_items == 394 assert test_items == self.entity_items @@ -350,7 +350,7 @@ async def test_adam_heatpump_cooling(self): testdata = await self.load_testdata(SMILE_TYPE, self.smile_setup) server, api, client = await self.connect_wrapper() - test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) + test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata, skip_testing=True) assert self.entity_items == 542 assert test_items == self.entity_items assert self.cooling_present @@ -374,7 +374,7 @@ async def test_connect_adam_onoff_cooling_fake_firmware(self): smile_version=None, ) - test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) + test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata, skip_testing=True) assert self.entity_items == 73 assert test_items == self.entity_items assert self.cooling_present @@ -398,7 +398,7 @@ async def test_connect_adam_plus_anna(self): smile_version="3.0.15", ) - test_items = await self.device_test(api, "2020-03-22 00:00:01", testdata) + test_items = await self.device_test(api, "2020-03-22 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "b128b4bbbd1f47e9bf4d756e8fb5ee94" assert self.entity_items == 85 assert test_items == self.entity_items @@ -439,7 +439,7 @@ async def test_adam_plus_jip(self): testdata = await self.load_testdata(SMILE_TYPE, self.smile_setup) server, api, client = await self.connect_wrapper() - test_items = await self.device_test(api, "2021-06-20 00:00:01", testdata) + test_items = await self.device_test(api, "2021-06-20 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "b5c2386c6f6342669e50fe49dd05b188" assert self.entity_items == 273 assert test_items == self.entity_items diff --git a/tests/test_anna.py b/tests/test_anna.py index f702f8b0b..eaff34362 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -27,7 +27,7 @@ async def test_connect_anna_v4(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-05 00:00:01", testdata) + await self.device_test(api, "2020-04-05 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "0466eae8520144c78afb29628384edeb" assert self.entity_items == 64 assert not self.notifications @@ -100,7 +100,7 @@ async def test_connect_anna_v4_dhw(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-05 00:00:01", testdata) + await self.device_test(api, "2020-04-05 00:00:01", testdata, skip_testing=True) assert self.entity_items == 64 assert not self.notifications @@ -129,7 +129,7 @@ async def test_connect_anna_v4_no_tag(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-05 00:00:01", testdata) + await self.device_test(api, "2020-04-05 00:00:01", testdata, skip_testing=True) assert self.entity_items == 64 result = await self.tinker_thermostat( @@ -157,7 +157,7 @@ async def test_connect_anna_without_boiler_fw441(self): smile_version="4.4.1", ) - await self.device_test(api, "2022-05-16 00:00:01", testdata) + await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert self.entity_items == 41 assert not self.notifications @@ -184,7 +184,7 @@ async def test_connect_anna_heatpump_heating(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-12 00:00:01", testdata) + await self.device_test(api, "2020-04-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" assert self.entity_items == 72 assert not self.notifications @@ -240,7 +240,7 @@ async def test_connect_anna_heatpump_cooling(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-19 00:00:01", testdata) + await self.device_test(api, "2020-04-19 00:00:01", testdata, skip_testing=True) assert self.entity_items == 69 assert self.cooling_present assert not self.notifications @@ -286,7 +286,7 @@ async def test_connect_anna_heatpump_cooling_fake_firmware(self): smile_version="4.10.10", ) - await self.device_test(api, "2020-04-19 00:00:01", testdata) + await self.device_test(api, "2020-04-19 00:00:01", testdata, skip_testing=True) assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled @@ -311,7 +311,7 @@ async def test_connect_anna_elga_no_cooling(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-12 00:00:01", testdata) + await self.device_test(api, "2020-04-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" assert self.entity_items == 68 assert not self.notifications @@ -335,7 +335,7 @@ async def test_connect_anna_elga_2(self): smile_version="4.4.1", ) - await self.device_test(api, "2022-03-13 00:00:01", testdata) + await self.device_test(api, "2022-03-13 00:00:01", testdata, skip_testing=True) assert self.entity_items == 63 assert api.gateway_id == "fb49af122f6e4b0f91267e1cf7666d6f" assert self.cooling_present @@ -354,7 +354,7 @@ async def test_connect_anna_elga_2_schedule_off(self): server, api, client = await self.connect_wrapper() assert api.smile.hostname == "smile000000" - await self.device_test(api, "2022-03-13 00:00:01", testdata) + await self.device_test(api, "2022-03-13 00:00:01", testdata, skip_testing=True) assert not self._cooling_enabled assert self.entity_items == 68 @@ -386,7 +386,7 @@ async def test_connect_anna_elga_2_cooling(self): smile_version="4.2.1", ) - await self.device_test(api, "2022-03-10 00:00:01", testdata) + await self.device_test(api, "2022-03-10 00:00:01", testdata, skip_testing=True) assert self.entity_items == 68 assert not self.notifications @@ -439,7 +439,7 @@ async def test_connect_anna_loria_heating_idle(self): smile_version=None, ) - await self.device_test(api, "2022-05-16 00:00:01", testdata) + await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -508,7 +508,7 @@ async def test_connect_anna_loria_cooling_active(self): smile_version=None, ) - await self.device_test(api, "2022-05-16 00:00:01", testdata) + await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled @@ -531,7 +531,7 @@ async def test_connect_anna_loria_driessens(self): smile_version=None, ) - await self.device_test(api, "2022-05-16 00:00:01", testdata) + await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -554,7 +554,7 @@ async def test_connect_anna_p1(self): smile_version=None, ) - await self.device_test(api, "2025-11-02 00:00:01", testdata) + await self.device_test(api, "2025-11-02 00:00:01", testdata, skip_testing=True) assert self.entity_items == 78 await api.close_connection() @@ -575,7 +575,7 @@ async def test_connect_anna_v4_no_modules(self): smile_version=None, ) - await self.device_test(api, "2022-05-16 00:00:01", testdata) + await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert self.entity_items == 12 await api.close_connection() From 2dba7921ae3d80c6ff61c654de31e2871b5af4d9 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 08:05:22 +0200 Subject: [PATCH 44/52] Disable entity_items count --- tests/test_adam.py | 28 ++++++++++++++-------------- tests/test_anna.py | 34 +++++++++++++++++----------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/tests/test_adam.py b/tests/test_adam.py index d03404020..70f80e5e8 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -47,8 +47,8 @@ async def test_connect_adam_plus_anna_new(self): test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "da224107914542988a88561b4452b0f6" - assert self.entity_items == 234 - assert test_items == self.entity_items + # assert self.entity_items == 234 + # assert test_items == self.entity_items assert self.entity_list == [ "da224107914542988a88561b4452b0f6", "056ee145a816487eaa69243c3280f8bf", @@ -240,8 +240,8 @@ async def test_connect_adam_zone_per_device(self): test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "fe799307f1624099878210aa0b9f1475" - assert self.entity_items == 386 - assert test_items == self.entity_items + # assert self.entity_items == 386 + # assert test_items == self.entity_items assert "af82e4ccf9c548528166d38e560662a4" in self.notifications await api.delete_notification() @@ -314,8 +314,8 @@ async def test_connect_adam_multiple_devices_per_zone(self): ) test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 394 - assert test_items == self.entity_items + # assert self.entity_items == 394 + # assert test_items == self.entity_items assert "af82e4ccf9c548528166d38e560662a4" in self.notifications @@ -351,8 +351,8 @@ async def test_adam_heatpump_cooling(self): server, api, client = await self.connect_wrapper() test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 542 - assert test_items == self.entity_items + # assert self.entity_items == 542 + # assert test_items == self.entity_items assert self.cooling_present assert self._cooling_enabled @@ -375,8 +375,8 @@ async def test_connect_adam_onoff_cooling_fake_firmware(self): ) test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 73 - assert test_items == self.entity_items + # assert self.entity_items == 73 + # assert test_items == self.entity_items assert self.cooling_present # assert self._cooling_enabled - no cooling_enabled indication present @@ -400,8 +400,8 @@ async def test_connect_adam_plus_anna(self): test_items = await self.device_test(api, "2020-03-22 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "b128b4bbbd1f47e9bf4d756e8fb5ee94" - assert self.entity_items == 85 - assert test_items == self.entity_items + # assert self.entity_items == 85 + # assert test_items == self.entity_items assert "6fb89e35caeb4b1cb275184895202d84" in self.notifications result = await self.tinker_thermostat( @@ -441,8 +441,8 @@ async def test_adam_plus_jip(self): test_items = await self.device_test(api, "2021-06-20 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "b5c2386c6f6342669e50fe49dd05b188" - assert self.entity_items == 273 - assert test_items == self.entity_items + # assert self.entity_items == 273 + # assert test_items == self.entity_items # Negative test result = await self.tinker_thermostat( diff --git a/tests/test_anna.py b/tests/test_anna.py index eaff34362..daa3663d4 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, skip_testing=True) assert api.gateway_id == "0466eae8520144c78afb29628384edeb" - assert self.entity_items == 64 + # assert self.entity_items == 64 assert not self.notifications assert not self.cooling_present @@ -101,7 +101,7 @@ async def test_connect_anna_v4_dhw(self): ) await self.device_test(api, "2020-04-05 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 64 + # assert self.entity_items == 64 assert not self.notifications result = await self.tinker_thermostat( @@ -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, skip_testing=True) - assert self.entity_items == 64 + # assert self.entity_items == 64 result = await self.tinker_thermostat( api, @@ -158,7 +158,7 @@ async def test_connect_anna_without_boiler_fw441(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 41 + # assert self.entity_items == 41 assert not self.notifications result = await self.tinker_thermostat( @@ -186,7 +186,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test(api, "2020-04-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - assert self.entity_items == 72 + # assert self.entity_items == 72 assert not self.notifications assert self.cooling_present assert not self._cooling_enabled @@ -216,7 +216,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test( api, "2020-04-13 00:00:01", testdata_updated, initialize=False ) - assert self.entity_items == 69 + # assert self.entity_items == 69 await api.close_connection() await self.disconnect(server, client) @@ -241,7 +241,7 @@ async def test_connect_anna_heatpump_cooling(self): ) await self.device_test(api, "2020-04-19 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 69 + # assert self.entity_items == 69 assert self.cooling_present assert not self.notifications @@ -287,7 +287,7 @@ async def test_connect_anna_heatpump_cooling_fake_firmware(self): ) await self.device_test(api, "2020-04-19 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 69 + # assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled assert self._cooling_active @@ -313,7 +313,7 @@ async def test_connect_anna_elga_no_cooling(self): await self.device_test(api, "2020-04-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - assert self.entity_items == 68 + # assert self.entity_items == 68 assert not self.notifications assert not self.cooling_present @@ -336,7 +336,7 @@ async def test_connect_anna_elga_2(self): ) await self.device_test(api, "2022-03-13 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 63 + # assert self.entity_items == 63 assert api.gateway_id == "fb49af122f6e4b0f91267e1cf7666d6f" assert self.cooling_present assert not self._cooling_enabled @@ -356,7 +356,7 @@ async def test_connect_anna_elga_2_schedule_off(self): await self.device_test(api, "2022-03-13 00:00:01", testdata, skip_testing=True) assert not self._cooling_enabled - assert self.entity_items == 68 + # assert self.entity_items == 68 result = await self.tinker_thermostat( api, @@ -387,7 +387,7 @@ async def test_connect_anna_elga_2_cooling(self): ) await self.device_test(api, "2022-03-10 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 68 + # assert self.entity_items == 68 assert not self.notifications assert self.cooling_present @@ -440,7 +440,7 @@ async def test_connect_anna_loria_heating_idle(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 69 + # assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -509,7 +509,7 @@ async def test_connect_anna_loria_cooling_active(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 69 + # assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled @@ -532,7 +532,7 @@ async def test_connect_anna_loria_driessens(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 69 + # assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -555,7 +555,7 @@ async def test_connect_anna_p1(self): ) await self.device_test(api, "2025-11-02 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 78 + # assert self.entity_items == 78 await api.close_connection() await self.disconnect(server, client) @@ -576,7 +576,7 @@ async def test_connect_anna_v4_no_modules(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - assert self.entity_items == 12 + # assert self.entity_items == 12 await api.close_connection() await self.disconnect(server, client) From 18d9f5fe1070fd517eb70f0cc62ff6c605983c04 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 08:19:24 +0200 Subject: [PATCH 45/52] Save updated test-jsons --- tests/data/adam/adam_bad_thermostat.json | 1 + tests/data/adam/adam_heatpump_cooling.json | 1 + tests/data/adam/adam_onoff_cooling_fake_firmware.json | 1 + tests/data/anna/anna_elga_no_cooling.json | 1 + tests/data/anna/anna_heatpump_heating.json | 1 + tests/data/anna/anna_loria_cooling_active.json | 1 + tests/data/anna/anna_loria_driessens.json | 1 + tests/data/anna/anna_loria_heating_idle.json | 1 + 8 files changed, 8 insertions(+) diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index 9c768485e..1f1554832 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -31,6 +31,7 @@ "model_id": "1.1", "name": "OpenTherm", "sensors": { + "dhw_temperature": 49.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index b75f0fe4d..7e0c0f849 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -79,6 +79,7 @@ "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, diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index a674140d2..f0100393d 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -31,6 +31,7 @@ "model": "Unknown", "name": "OnOff", "sensors": { + "dhw_temperature": 63.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.5, diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index 08666fb01..8f7a49383 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -50,6 +50,7 @@ "model": "Generic heater", "name": "OpenTherm", "sensors": { + "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index 12db9c1f6..91040f4d4 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -52,6 +52,7 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { + "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index d690d1fec..db44a078b 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -98,6 +98,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 100, "outdoor_air_temperature": 17.2, diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index a1eb54217..07db02be6 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -100,6 +100,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 49.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 7.5, diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index c3bd260c4..d21b672c4 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -98,6 +98,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 17.2, From b5d095f3e3d7d5f5ae8256cbc7f55dd8229361fa Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 08:20:23 +0200 Subject: [PATCH 46/52] Revert "Save updated test-jsons" This reverts commit 18d9f5fe1070fd517eb70f0cc62ff6c605983c04. --- tests/data/adam/adam_bad_thermostat.json | 1 - tests/data/adam/adam_heatpump_cooling.json | 1 - tests/data/adam/adam_onoff_cooling_fake_firmware.json | 1 - tests/data/anna/anna_elga_no_cooling.json | 1 - tests/data/anna/anna_heatpump_heating.json | 1 - tests/data/anna/anna_loria_cooling_active.json | 1 - tests/data/anna/anna_loria_driessens.json | 1 - tests/data/anna/anna_loria_heating_idle.json | 1 - 8 files changed, 8 deletions(-) diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index 1f1554832..9c768485e 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -31,7 +31,6 @@ "model_id": "1.1", "name": "OpenTherm", "sensors": { - "dhw_temperature": 49.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index 7e0c0f849..b75f0fe4d 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -79,7 +79,6 @@ "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, diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index f0100393d..a674140d2 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -31,7 +31,6 @@ "model": "Unknown", "name": "OnOff", "sensors": { - "dhw_temperature": 63.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.5, diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index 8f7a49383..08666fb01 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -50,7 +50,6 @@ "model": "Generic heater", "name": "OpenTherm", "sensors": { - "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index 91040f4d4..12db9c1f6 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -52,7 +52,6 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { - "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index db44a078b..d690d1fec 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -98,7 +98,6 @@ "model_id": "173", "name": "OpenTherm", "sensors": { - "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 100, "outdoor_air_temperature": 17.2, diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index 07db02be6..a1eb54217 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -100,7 +100,6 @@ "model_id": "173", "name": "OpenTherm", "sensors": { - "dhw_temperature": 49.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 7.5, diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index d21b672c4..c3bd260c4 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -98,7 +98,6 @@ "model_id": "173", "name": "OpenTherm", "sensors": { - "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 17.2, From 8389faa565ecc22d8953c602715969f525478518 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 08:20:31 +0200 Subject: [PATCH 47/52] Revert "Disable entity_items count" This reverts commit 2dba7921ae3d80c6ff61c654de31e2871b5af4d9. --- tests/test_adam.py | 28 ++++++++++++++-------------- tests/test_anna.py | 34 +++++++++++++++++----------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/tests/test_adam.py b/tests/test_adam.py index 70f80e5e8..d03404020 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -47,8 +47,8 @@ async def test_connect_adam_plus_anna_new(self): test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "da224107914542988a88561b4452b0f6" - # assert self.entity_items == 234 - # assert test_items == self.entity_items + assert self.entity_items == 234 + assert test_items == self.entity_items assert self.entity_list == [ "da224107914542988a88561b4452b0f6", "056ee145a816487eaa69243c3280f8bf", @@ -240,8 +240,8 @@ async def test_connect_adam_zone_per_device(self): test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "fe799307f1624099878210aa0b9f1475" - # assert self.entity_items == 386 - # assert test_items == self.entity_items + assert self.entity_items == 386 + assert test_items == self.entity_items assert "af82e4ccf9c548528166d38e560662a4" in self.notifications await api.delete_notification() @@ -314,8 +314,8 @@ async def test_connect_adam_multiple_devices_per_zone(self): ) test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 394 - # assert test_items == self.entity_items + assert self.entity_items == 394 + assert test_items == self.entity_items assert "af82e4ccf9c548528166d38e560662a4" in self.notifications @@ -351,8 +351,8 @@ async def test_adam_heatpump_cooling(self): server, api, client = await self.connect_wrapper() test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 542 - # assert test_items == self.entity_items + assert self.entity_items == 542 + assert test_items == self.entity_items assert self.cooling_present assert self._cooling_enabled @@ -375,8 +375,8 @@ async def test_connect_adam_onoff_cooling_fake_firmware(self): ) test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 73 - # assert test_items == self.entity_items + assert self.entity_items == 73 + assert test_items == self.entity_items assert self.cooling_present # assert self._cooling_enabled - no cooling_enabled indication present @@ -400,8 +400,8 @@ async def test_connect_adam_plus_anna(self): test_items = await self.device_test(api, "2020-03-22 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "b128b4bbbd1f47e9bf4d756e8fb5ee94" - # assert self.entity_items == 85 - # assert test_items == self.entity_items + assert self.entity_items == 85 + assert test_items == self.entity_items assert "6fb89e35caeb4b1cb275184895202d84" in self.notifications result = await self.tinker_thermostat( @@ -441,8 +441,8 @@ async def test_adam_plus_jip(self): test_items = await self.device_test(api, "2021-06-20 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "b5c2386c6f6342669e50fe49dd05b188" - # assert self.entity_items == 273 - # assert test_items == self.entity_items + assert self.entity_items == 273 + assert test_items == self.entity_items # Negative test result = await self.tinker_thermostat( diff --git a/tests/test_anna.py b/tests/test_anna.py index daa3663d4..eaff34362 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, skip_testing=True) assert api.gateway_id == "0466eae8520144c78afb29628384edeb" - # assert self.entity_items == 64 + assert self.entity_items == 64 assert not self.notifications assert not self.cooling_present @@ -101,7 +101,7 @@ async def test_connect_anna_v4_dhw(self): ) await self.device_test(api, "2020-04-05 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 64 + assert self.entity_items == 64 assert not self.notifications result = await self.tinker_thermostat( @@ -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, skip_testing=True) - # assert self.entity_items == 64 + assert self.entity_items == 64 result = await self.tinker_thermostat( api, @@ -158,7 +158,7 @@ async def test_connect_anna_without_boiler_fw441(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 41 + assert self.entity_items == 41 assert not self.notifications result = await self.tinker_thermostat( @@ -186,7 +186,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test(api, "2020-04-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - # assert self.entity_items == 72 + assert self.entity_items == 72 assert not self.notifications assert self.cooling_present assert not self._cooling_enabled @@ -216,7 +216,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test( api, "2020-04-13 00:00:01", testdata_updated, initialize=False ) - # assert self.entity_items == 69 + assert self.entity_items == 69 await api.close_connection() await self.disconnect(server, client) @@ -241,7 +241,7 @@ async def test_connect_anna_heatpump_cooling(self): ) await self.device_test(api, "2020-04-19 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 69 + assert self.entity_items == 69 assert self.cooling_present assert not self.notifications @@ -287,7 +287,7 @@ async def test_connect_anna_heatpump_cooling_fake_firmware(self): ) await self.device_test(api, "2020-04-19 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 69 + assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled assert self._cooling_active @@ -313,7 +313,7 @@ async def test_connect_anna_elga_no_cooling(self): await self.device_test(api, "2020-04-12 00:00:01", testdata, skip_testing=True) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - # assert self.entity_items == 68 + assert self.entity_items == 68 assert not self.notifications assert not self.cooling_present @@ -336,7 +336,7 @@ async def test_connect_anna_elga_2(self): ) await self.device_test(api, "2022-03-13 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 63 + assert self.entity_items == 63 assert api.gateway_id == "fb49af122f6e4b0f91267e1cf7666d6f" assert self.cooling_present assert not self._cooling_enabled @@ -356,7 +356,7 @@ async def test_connect_anna_elga_2_schedule_off(self): await self.device_test(api, "2022-03-13 00:00:01", testdata, skip_testing=True) assert not self._cooling_enabled - # assert self.entity_items == 68 + assert self.entity_items == 68 result = await self.tinker_thermostat( api, @@ -387,7 +387,7 @@ async def test_connect_anna_elga_2_cooling(self): ) await self.device_test(api, "2022-03-10 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 68 + assert self.entity_items == 68 assert not self.notifications assert self.cooling_present @@ -440,7 +440,7 @@ async def test_connect_anna_loria_heating_idle(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 69 + assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -509,7 +509,7 @@ async def test_connect_anna_loria_cooling_active(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 69 + assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled @@ -532,7 +532,7 @@ async def test_connect_anna_loria_driessens(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 69 + assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -555,7 +555,7 @@ async def test_connect_anna_p1(self): ) await self.device_test(api, "2025-11-02 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 78 + assert self.entity_items == 78 await api.close_connection() await self.disconnect(server, client) @@ -576,7 +576,7 @@ async def test_connect_anna_v4_no_modules(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) - # assert self.entity_items == 12 + assert self.entity_items == 12 await api.close_connection() await self.disconnect(server, client) From a4c4dcbc85c199d7c67b2e350f19ade4bed5af96 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 08:20:39 +0200 Subject: [PATCH 48/52] Revert "Enable skip_testing" This reverts commit 9a20b573c10fd7802706b66e1061c261df0fa9ba. --- tests/test_adam.py | 18 +++++++++--------- tests/test_anna.py | 32 ++++++++++++++++---------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/tests/test_adam.py b/tests/test_adam.py index d03404020..a1270b39f 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -23,7 +23,7 @@ async def test_connect_adam_bad_thermostat(self, caplog): testdata = await self.load_testdata(SMILE_TYPE, self.smile_setup) 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) + await self.device_test(api, "2023-12-17 00:00:01", testdata) assert "Thermostat data in Zone" in caplog.text await api.close_connection() @@ -45,7 +45,7 @@ async def test_connect_adam_plus_anna_new(self): smile_version="3.9.0", ) - test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata, skip_testing=True) + test_items = await self.device_test(api, "2025-10-12 00:00:01", testdata) assert api.gateway_id == "da224107914542988a88561b4452b0f6" assert self.entity_items == 234 assert test_items == self.entity_items @@ -218,7 +218,7 @@ async def test_connect_adam_plus_anna_new_regulation_off(self): server, api, client = await self.connect_wrapper() assert api.smile.hostname == "smile000000" - await self.device_test(api, "2023-12-17 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2023-12-17 00:00:01", testdata) await api.close_connection() await self.disconnect(server, client) @@ -238,7 +238,7 @@ async def test_connect_adam_zone_per_device(self): smile_version="3.0.15", ) - test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) + test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata) assert api.gateway_id == "fe799307f1624099878210aa0b9f1475" assert self.entity_items == 386 assert test_items == self.entity_items @@ -313,7 +313,7 @@ async def test_connect_adam_multiple_devices_per_zone(self): smile_version="3.0.15", ) - test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) + test_items = await self.device_test(api, "2022-05-16 00:00:01", testdata) assert self.entity_items == 394 assert test_items == self.entity_items @@ -350,7 +350,7 @@ async def test_adam_heatpump_cooling(self): testdata = await self.load_testdata(SMILE_TYPE, self.smile_setup) server, api, client = await self.connect_wrapper() - test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata, skip_testing=True) + test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) assert self.entity_items == 542 assert test_items == self.entity_items assert self.cooling_present @@ -374,7 +374,7 @@ async def test_connect_adam_onoff_cooling_fake_firmware(self): smile_version=None, ) - test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata, skip_testing=True) + test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) assert self.entity_items == 73 assert test_items == self.entity_items assert self.cooling_present @@ -398,7 +398,7 @@ async def test_connect_adam_plus_anna(self): smile_version="3.0.15", ) - test_items = await self.device_test(api, "2020-03-22 00:00:01", testdata, skip_testing=True) + test_items = await self.device_test(api, "2020-03-22 00:00:01", testdata) assert api.gateway_id == "b128b4bbbd1f47e9bf4d756e8fb5ee94" assert self.entity_items == 85 assert test_items == self.entity_items @@ -439,7 +439,7 @@ async def test_adam_plus_jip(self): testdata = await self.load_testdata(SMILE_TYPE, self.smile_setup) server, api, client = await self.connect_wrapper() - test_items = await self.device_test(api, "2021-06-20 00:00:01", testdata, skip_testing=True) + test_items = await self.device_test(api, "2021-06-20 00:00:01", testdata) assert api.gateway_id == "b5c2386c6f6342669e50fe49dd05b188" assert self.entity_items == 273 assert test_items == self.entity_items diff --git a/tests/test_anna.py b/tests/test_anna.py index eaff34362..f702f8b0b 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -27,7 +27,7 @@ async def test_connect_anna_v4(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-05 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2020-04-05 00:00:01", testdata) assert api.gateway_id == "0466eae8520144c78afb29628384edeb" assert self.entity_items == 64 assert not self.notifications @@ -100,7 +100,7 @@ async def test_connect_anna_v4_dhw(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-05 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2020-04-05 00:00:01", testdata) assert self.entity_items == 64 assert not self.notifications @@ -129,7 +129,7 @@ async def test_connect_anna_v4_no_tag(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-05 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2020-04-05 00:00:01", testdata) assert self.entity_items == 64 result = await self.tinker_thermostat( @@ -157,7 +157,7 @@ async def test_connect_anna_without_boiler_fw441(self): smile_version="4.4.1", ) - await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2022-05-16 00:00:01", testdata) assert self.entity_items == 41 assert not self.notifications @@ -184,7 +184,7 @@ async def test_connect_anna_heatpump_heating(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-12 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2020-04-12 00:00:01", testdata) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" assert self.entity_items == 72 assert not self.notifications @@ -240,7 +240,7 @@ async def test_connect_anna_heatpump_cooling(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-19 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2020-04-19 00:00:01", testdata) assert self.entity_items == 69 assert self.cooling_present assert not self.notifications @@ -286,7 +286,7 @@ async def test_connect_anna_heatpump_cooling_fake_firmware(self): smile_version="4.10.10", ) - await self.device_test(api, "2020-04-19 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2020-04-19 00:00:01", testdata) assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled @@ -311,7 +311,7 @@ async def test_connect_anna_elga_no_cooling(self): smile_version="4.0.15", ) - await self.device_test(api, "2020-04-12 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2020-04-12 00:00:01", testdata) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" assert self.entity_items == 68 assert not self.notifications @@ -335,7 +335,7 @@ async def test_connect_anna_elga_2(self): smile_version="4.4.1", ) - await self.device_test(api, "2022-03-13 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2022-03-13 00:00:01", testdata) assert self.entity_items == 63 assert api.gateway_id == "fb49af122f6e4b0f91267e1cf7666d6f" assert self.cooling_present @@ -354,7 +354,7 @@ async def test_connect_anna_elga_2_schedule_off(self): server, api, client = await self.connect_wrapper() assert api.smile.hostname == "smile000000" - await self.device_test(api, "2022-03-13 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2022-03-13 00:00:01", testdata) assert not self._cooling_enabled assert self.entity_items == 68 @@ -386,7 +386,7 @@ async def test_connect_anna_elga_2_cooling(self): smile_version="4.2.1", ) - await self.device_test(api, "2022-03-10 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2022-03-10 00:00:01", testdata) assert self.entity_items == 68 assert not self.notifications @@ -439,7 +439,7 @@ async def test_connect_anna_loria_heating_idle(self): smile_version=None, ) - await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2022-05-16 00:00:01", testdata) assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -508,7 +508,7 @@ async def test_connect_anna_loria_cooling_active(self): smile_version=None, ) - await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2022-05-16 00:00:01", testdata) assert self.entity_items == 69 assert self.cooling_present assert self._cooling_enabled @@ -531,7 +531,7 @@ async def test_connect_anna_loria_driessens(self): smile_version=None, ) - await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2022-05-16 00:00:01", testdata) assert self.entity_items == 69 assert self.cooling_present assert not self._cooling_enabled @@ -554,7 +554,7 @@ async def test_connect_anna_p1(self): smile_version=None, ) - await self.device_test(api, "2025-11-02 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2025-11-02 00:00:01", testdata) assert self.entity_items == 78 await api.close_connection() @@ -575,7 +575,7 @@ async def test_connect_anna_v4_no_modules(self): smile_version=None, ) - await self.device_test(api, "2022-05-16 00:00:01", testdata, skip_testing=True) + await self.device_test(api, "2022-05-16 00:00:01", testdata) assert self.entity_items == 12 await api.close_connection() From 8687ae202254081c76efca4396752ca380bc23b0 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 08:25:45 +0200 Subject: [PATCH 49/52] Update entity_items counts --- 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 a1270b39f..6c483d14d 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -351,7 +351,7 @@ async def test_adam_heatpump_cooling(self): server, api, client = await self.connect_wrapper() test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) - assert self.entity_items == 542 + assert self.entity_items == 543 assert test_items == self.entity_items assert self.cooling_present assert self._cooling_enabled From 8fc17a06e65a87085c9e8c8c48d0a56b31fff67b Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 08:29:26 +0200 Subject: [PATCH 50/52] Save updated test-jsons --- tests/data/adam/adam_bad_thermostat.json | 1 + tests/data/adam/adam_heatpump_cooling.json | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/data/adam/adam_bad_thermostat.json b/tests/data/adam/adam_bad_thermostat.json index 9c768485e..1f1554832 100644 --- a/tests/data/adam/adam_bad_thermostat.json +++ b/tests/data/adam/adam_bad_thermostat.json @@ -31,6 +31,7 @@ "model_id": "1.1", "name": "OpenTherm", "sensors": { + "dhw_temperature": 49.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, diff --git a/tests/data/adam/adam_heatpump_cooling.json b/tests/data/adam/adam_heatpump_cooling.json index b75f0fe4d..7e0c0f849 100644 --- a/tests/data/adam/adam_heatpump_cooling.json +++ b/tests/data/adam/adam_heatpump_cooling.json @@ -79,6 +79,7 @@ "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, From 546ec3308e7ebbb2ee6b6c1bea84a295ccfb8ce8 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 18:45:41 +0200 Subject: [PATCH 51/52] Save various updates --- fixtures/adam_bad_thermostat/data.json | 1 + fixtures/adam_heatpump_cooling/data.json | 1 + fixtures/adam_onoff_cooling_fake_firmware/data.json | 1 + fixtures/anna_elga_no_cooling/data.json | 1 + fixtures/anna_heatpump_heating/data.json | 1 + fixtures/anna_loria_cooling_active/data.json | 1 + fixtures/anna_loria_driessens/data.json | 1 + fixtures/anna_loria_heating_idle/data.json | 1 + fixtures/m_anna_heatpump_cooling/data.json | 1 + fixtures/m_anna_heatpump_idle/data.json | 1 + tests/data/adam/adam_onoff_cooling_fake_firmware.json | 1 + tests/data/anna/anna_elga_no_cooling.json | 1 + tests/data/anna/anna_heatpump_heating.json | 1 + tests/data/anna/anna_loria_cooling_active.json | 1 + tests/data/anna/anna_loria_driessens.json | 1 + tests/data/anna/anna_loria_heating_idle.json | 1 + tests/test_adam.py | 2 +- tests/test_anna.py | 10 +++++----- 18 files changed, 22 insertions(+), 6 deletions(-) diff --git a/fixtures/adam_bad_thermostat/data.json b/fixtures/adam_bad_thermostat/data.json index 9c768485e..1f1554832 100644 --- a/fixtures/adam_bad_thermostat/data.json +++ b/fixtures/adam_bad_thermostat/data.json @@ -31,6 +31,7 @@ "model_id": "1.1", "name": "OpenTherm", "sensors": { + "dhw_temperature": 49.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.6, diff --git a/fixtures/adam_heatpump_cooling/data.json b/fixtures/adam_heatpump_cooling/data.json index b75f0fe4d..7e0c0f849 100644 --- a/fixtures/adam_heatpump_cooling/data.json +++ b/fixtures/adam_heatpump_cooling/data.json @@ -79,6 +79,7 @@ "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, diff --git a/fixtures/adam_onoff_cooling_fake_firmware/data.json b/fixtures/adam_onoff_cooling_fake_firmware/data.json index a674140d2..f0100393d 100644 --- a/fixtures/adam_onoff_cooling_fake_firmware/data.json +++ b/fixtures/adam_onoff_cooling_fake_firmware/data.json @@ -31,6 +31,7 @@ "model": "Unknown", "name": "OnOff", "sensors": { + "dhw_temperature": 63.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.5, diff --git a/fixtures/anna_elga_no_cooling/data.json b/fixtures/anna_elga_no_cooling/data.json index 08666fb01..8f7a49383 100644 --- a/fixtures/anna_elga_no_cooling/data.json +++ b/fixtures/anna_elga_no_cooling/data.json @@ -50,6 +50,7 @@ "model": "Generic heater", "name": "OpenTherm", "sensors": { + "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, diff --git a/fixtures/anna_heatpump_heating/data.json b/fixtures/anna_heatpump_heating/data.json index 12db9c1f6..91040f4d4 100644 --- a/fixtures/anna_heatpump_heating/data.json +++ b/fixtures/anna_heatpump_heating/data.json @@ -52,6 +52,7 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { + "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, diff --git a/fixtures/anna_loria_cooling_active/data.json b/fixtures/anna_loria_cooling_active/data.json index d690d1fec..db44a078b 100644 --- a/fixtures/anna_loria_cooling_active/data.json +++ b/fixtures/anna_loria_cooling_active/data.json @@ -98,6 +98,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 100, "outdoor_air_temperature": 17.2, diff --git a/fixtures/anna_loria_driessens/data.json b/fixtures/anna_loria_driessens/data.json index a1eb54217..07db02be6 100644 --- a/fixtures/anna_loria_driessens/data.json +++ b/fixtures/anna_loria_driessens/data.json @@ -100,6 +100,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 49.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 7.5, diff --git a/fixtures/anna_loria_heating_idle/data.json b/fixtures/anna_loria_heating_idle/data.json index c3bd260c4..d21b672c4 100644 --- a/fixtures/anna_loria_heating_idle/data.json +++ b/fixtures/anna_loria_heating_idle/data.json @@ -98,6 +98,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 17.2, diff --git a/fixtures/m_anna_heatpump_cooling/data.json b/fixtures/m_anna_heatpump_cooling/data.json index 0c846804d..2caf94cca 100644 --- a/fixtures/m_anna_heatpump_cooling/data.json +++ b/fixtures/m_anna_heatpump_cooling/data.json @@ -52,6 +52,7 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { + "dhw_temperature": 46.3, "intended_boiler_temperature": 0.0, "modulation_level": 40, "outdoor_air_temperature": 28.0, diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index 329e502b3..c41b5b7d7 100644 --- a/fixtures/m_anna_heatpump_idle/data.json +++ b/fixtures/m_anna_heatpump_idle/data.json @@ -52,6 +52,7 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { + "dhw_temperature": 46.3, "intended_boiler_temperature": 18.0, "modulation_level": 0, "outdoor_air_temperature": 28.2, diff --git a/tests/data/adam/adam_onoff_cooling_fake_firmware.json b/tests/data/adam/adam_onoff_cooling_fake_firmware.json index a674140d2..f0100393d 100644 --- a/tests/data/adam/adam_onoff_cooling_fake_firmware.json +++ b/tests/data/adam/adam_onoff_cooling_fake_firmware.json @@ -31,6 +31,7 @@ "model": "Unknown", "name": "OnOff", "sensors": { + "dhw_temperature": 63.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 13.5, diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index 08666fb01..8f7a49383 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -50,6 +50,7 @@ "model": "Generic heater", "name": "OpenTherm", "sensors": { + "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index 12db9c1f6..91040f4d4 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -52,6 +52,7 @@ "model": "Generic heater/cooler", "name": "OpenTherm", "sensors": { + "dhw_temperature": 46.3, "intended_boiler_temperature": 35.0, "modulation_level": 52, "outdoor_air_temperature": 3.0, diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index d690d1fec..db44a078b 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -98,6 +98,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 100, "outdoor_air_temperature": 17.2, diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index a1eb54217..07db02be6 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -100,6 +100,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 49.5, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 7.5, diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index c3bd260c4..d21b672c4 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -98,6 +98,7 @@ "model_id": "173", "name": "OpenTherm", "sensors": { + "dhw_temperature": 52.9, "intended_boiler_temperature": 0.0, "modulation_level": 0.0, "outdoor_air_temperature": 17.2, diff --git a/tests/test_adam.py b/tests/test_adam.py index 6c483d14d..bb32bf2a8 100644 --- a/tests/test_adam.py +++ b/tests/test_adam.py @@ -375,7 +375,7 @@ async def test_connect_adam_onoff_cooling_fake_firmware(self): ) test_items = await self.device_test(api, "2022-01-02 00:00:01", testdata) - assert self.entity_items == 73 + assert self.entity_items == 74 assert test_items == self.entity_items assert self.cooling_present # assert self._cooling_enabled - no cooling_enabled indication present diff --git a/tests/test_anna.py b/tests/test_anna.py index f702f8b0b..ff390da68 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -186,7 +186,7 @@ async def test_connect_anna_heatpump_heating(self): await self.device_test(api, "2020-04-12 00:00:01", testdata) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - assert self.entity_items == 72 + assert self.entity_items == 73 assert not self.notifications assert self.cooling_present assert not self._cooling_enabled @@ -313,7 +313,7 @@ async def test_connect_anna_elga_no_cooling(self): await self.device_test(api, "2020-04-12 00:00:01", testdata) assert api.gateway_id == "015ae9ea3f964e668e490fa39da3870b" - assert self.entity_items == 68 + assert self.entity_items == 69 assert not self.notifications assert not self.cooling_present @@ -440,7 +440,7 @@ async def test_connect_anna_loria_heating_idle(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 69 + assert self.entity_items == 70 assert self.cooling_present assert not self._cooling_enabled @@ -509,7 +509,7 @@ async def test_connect_anna_loria_cooling_active(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 69 + assert self.entity_items == 70 assert self.cooling_present assert self._cooling_enabled @@ -532,7 +532,7 @@ async def test_connect_anna_loria_driessens(self): ) await self.device_test(api, "2022-05-16 00:00:01", testdata) - assert self.entity_items == 69 + assert self.entity_items == 70 assert self.cooling_present assert not self._cooling_enabled From f877fc5419be8fee1614761f02898dae0864c71d Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 13 Jul 2026 19:15:34 +0200 Subject: [PATCH 52/52] Set to v1.14.0 release-version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index eb37a14bc..ff5146d20 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "plugwise" -version = "1.14.0a0" +version = "1.14.0" license = "MIT" description = "Plugwise Smile (Adam/Anna/P1) and Stretch module for Python 3." readme = "README.md"