From d532e13b4622ea42b90b84b39fa111879ecbc057 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Fri, 10 Oct 2025 17:16:00 +0200 Subject: [PATCH 1/9] Add ThermoZone for Anna --- plugwise/data.py | 37 ++++++------------------------------- plugwise/helper.py | 20 ++++++++++++++------ plugwise/smile.py | 4 +--- 3 files changed, 21 insertions(+), 40 deletions(-) diff --git a/plugwise/data.py b/plugwise/data.py index 1e84bb3b9..18a7fb89d 100644 --- a/plugwise/data.py +++ b/plugwise/data.py @@ -35,7 +35,7 @@ def _all_entity_data(self) -> None: Collect data for each entity and add to self.gw_entities. """ self._update_gw_entities() - if self.check_name(ADAM): + if self._is_thermostat: self._update_zones() self.gw_entities.update(self._zones) @@ -48,6 +48,8 @@ def _update_zones(self) -> None: data = self._get_location_data(location_id) zone.update(data) + self._update_for_cooling(zone) + def _update_gw_entities(self) -> None: """Helper-function for _all_entities_data() and async_update(). @@ -76,8 +78,6 @@ def _update_gw_entities(self) -> None: if is_battery_low: entity["binary_sensors"]["low_battery"] = True - self._update_for_cooling(entity) - remove_empty_platform_dicts(entity) def _detect_low_batteries(self) -> list[str]: @@ -126,7 +126,7 @@ def _update_for_cooling(self, entity: GwEntityData) -> None: if ( self.check_name(ANNA) and self._cooling_present - and entity["dev_class"] == "thermostat" + and entity["dev_class"] == "climate" ): thermostat = entity["thermostat"] sensors = entity["sensors"] @@ -142,11 +142,9 @@ def _update_for_cooling(self, entity: GwEntityData) -> None: thermostat.pop("setpoint") temp_dict.update(thermostat) entity["thermostat"] = temp_dict - if "setpoint" in sensors: - sensors.pop("setpoint") sensors["setpoint_low"] = temp_dict["setpoint_low"] sensors["setpoint_high"] = temp_dict["setpoint_high"] - self._count += 2 # add 4, remove 2 + self._count += 3 # add 4, remove 1 def _get_location_data(self, loc_id: str) -> GwEntityData: """Helper-function for _all_entity_data() and async_update(). @@ -197,11 +195,6 @@ def _get_entity_data(self, entity_id: str) -> GwEntityData: if self.check_name(ADAM): self._get_adam_data(entity, data) - # Thermostat data for Anna (presets, temperatures etc) - if self.check_name(ANNA) and entity["dev_class"] == "thermostat": - self._climate_data(entity_id, entity, data) - self._get_anna_control_state(data) - return data def _check_availability( @@ -249,16 +242,12 @@ def _get_adam_data(self, entity: GwEntityData, data: GwEntityData) -> None: self._count += 1 def _climate_data( - self, location_id: str, entity: GwEntityData, data: GwEntityData + self, loc_id: str, entity: GwEntityData, data: GwEntityData ) -> None: """Helper-function for _get_entity_data(). Determine climate-control entity data. """ - loc_id = location_id - if entity.get("location") is not None: - loc_id = entity["location"] - # Presets data["preset_modes"] = None data["active_preset"] = None @@ -301,20 +290,6 @@ def check_reg_mode(self, mode: str) -> bool: "regulation_modes" in gateway and gateway["select_regulation_mode"] == mode ) - def _get_anna_control_state(self, data: GwEntityData) -> None: - """Set the thermostat control_state based on the opentherm/onoff device state.""" - data["control_state"] = "idle" - self._count += 1 - for entity in self.gw_entities.values(): - if entity["dev_class"] != "heater_central": - continue - - binary_sensors = entity["binary_sensors"] - if binary_sensors["heating_state"]: - data["control_state"] = "heating" - if binary_sensors.get("cooling_state"): - data["control_state"] = "cooling" - def _get_schedule_states_with_off( self, location: str, schedules: list[str], selected: str, data: GwEntityData ) -> None: diff --git a/plugwise/helper.py b/plugwise/helper.py index 7ebb4738b..776902d40 100644 --- a/plugwise/helper.py +++ b/plugwise/helper.py @@ -468,7 +468,7 @@ def _get_actuator_functionalities( item == "thermostat" and ( entity["dev_class"] != "climate" - if self.check_name(ADAM) + if self._is_thermostat else entity["dev_class"] != "thermostat" ) ): @@ -773,9 +773,9 @@ def _rank_thermostat( thermo_loc["secondary"].append(appliance_id) def _control_state(self, data: GwEntityData, loc_id: str) -> str | bool: - """Helper-function for _get_adam_data(). + """Helper-function for _get_location_data(). - Adam: find the thermostat control_state of a location, from DOMAIN_OBJECTS. + Adam & Anna: find the thermostat control_state of a location, from DOMAIN_OBJECTS. Represents the heating/cooling demand-state of the local primary thermostat. Note: heating or cooling can still be active when the setpoint has been reached. """ @@ -783,9 +783,9 @@ def _control_state(self, data: GwEntityData, loc_id: str) -> str | bool: if (ctrl_state := self._domain_objects.find(locator)) is not None: return str(ctrl_state.text) - # Handle missing control_state in regulation_mode off for firmware >= 3.2.0 (issue #776) + # Adam: handle missing control_state in regulation_mode off for firmware >= 3.2.0 (issue #776) # In newer firmware versions, default to "off" when control_state is not present - if self.smile.version != version.Version("0.0.0"): + if self.check_name(ADAM) and self.smile.version != version.Version("0.0.0"): if self.smile.version >= version.parse("3.2.0"): return "off" @@ -794,7 +794,15 @@ def _control_state(self, data: GwEntityData, loc_id: str) -> str | bool: setpoint = data["sensors"]["setpoint"] temperature = data["sensors"]["temperature"] # No cooling available in older firmware - return "heating" if temperature < setpoint else "off" + return "heating" if temperature < setpoint else "idle" + + if self.check_name(ANNA): + # Older Anna firmware does not have the control_state xml-key + # Work around this by comparing the reported temperature and setpoint for a location + setpoint = data["sensors"]["setpoint"] + temperature = data["sensors"]["temperature"] + # No cooling available in older firmware + return "heating" if temperature < setpoint else "idle" return False # pragma: no cover diff --git a/plugwise/smile.py b/plugwise/smile.py index 970181ca1..1970b357b 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -10,7 +10,6 @@ from typing import Any, cast from plugwise.constants import ( - ADAM, ANNA, APPLIANCES, DOMAIN_OBJECTS, @@ -113,8 +112,7 @@ def get_all_gateway_entities(self) -> None: self.therms_with_offset_func = ( self._get_appliances_with_offset_functionality() ) - if self.check_name(ADAM): - self._scan_thermostats() + self._scan_thermostats() if group_data := self._get_group_switches(): self.gw_entities.update(group_data) From 699b6b6777500c8a4b2b97a772538a58dfa5117a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Fri, 10 Oct 2025 17:17:02 +0200 Subject: [PATCH 2/9] Update test_anna.py --- tests/test_anna.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/tests/test_anna.py b/tests/test_anna.py index ced0a22ff..bebd7ff0d 100644 --- a/tests/test_anna.py +++ b/tests/test_anna.py @@ -30,7 +30,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 api._last_active["eb5309212bf5407bb143e5bfa3b18aee"] == "Standaard" - assert self.entity_items == 60 + assert self.entity_items == 66 assert not self.notifications assert not self.cooling_present @@ -103,7 +103,7 @@ async def test_connect_anna_v4_dhw(self): await self.device_test(api, "2020-04-05 00:00:01", testdata) assert api._last_active["eb5309212bf5407bb143e5bfa3b18aee"] == "Standaard" - assert self.entity_items == 60 + assert self.entity_items == 66 assert not self.notifications result = await self.tinker_thermostat( @@ -132,7 +132,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 == 60 + assert self.entity_items == 66 result = await self.tinker_thermostat( api, @@ -161,7 +161,7 @@ async def test_connect_anna_without_boiler_fw441(self): await self.device_test(api, "2022-05-16 00:00:01", testdata) assert api._last_active["c34c6864216446528e95d88985e714cc"] == "Normaal" - assert self.entity_items == 41 + assert self.entity_items == 47 assert not self.notifications result = await self.tinker_thermostat( @@ -190,7 +190,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 api._last_active["c784ee9fdab44e1395b8dee7d7a497d5"] == "standaard" - assert self.entity_items == 69 + assert self.entity_items == 76 assert not self.notifications assert self.cooling_present assert not self._cooling_enabled @@ -220,7 +220,6 @@ 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 == 66 await api.close_connection() await self.disconnect(server, client) @@ -246,7 +245,7 @@ async def test_connect_anna_heatpump_cooling(self): await self.device_test(api, "2020-04-19 00:00:01", testdata) assert api._last_active["c784ee9fdab44e1395b8dee7d7a497d5"] == "standaard" - assert self.entity_items == 66 + assert self.entity_items == 73 assert self.cooling_present assert not self.notifications @@ -292,7 +291,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 == 66 + assert self.entity_items == 73 assert self.cooling_present assert self._cooling_enabled assert self._cooling_active @@ -319,7 +318,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 api._last_active["c784ee9fdab44e1395b8dee7d7a497d5"] == "standaard" - assert self.entity_items == 65 + assert self.entity_items == 71 assert not self.notifications assert not self.cooling_present @@ -345,7 +344,7 @@ async def test_connect_anna_elga_2(self): assert ( api._last_active["d3ce834534114348be628b61b26d9220"] == THERMOSTAT_SCHEDULE ) - assert self.entity_items == 61 + assert self.entity_items == 68 assert api.gateway_id == "fb49af122f6e4b0f91267e1cf7666d6f" assert self.cooling_present assert not self._cooling_enabled @@ -369,7 +368,7 @@ async def test_connect_anna_elga_2_schedule_off(self): ) assert self.cooling_present assert not self._cooling_enabled - assert self.entity_items == 65 + assert self.entity_items == 72 await api.close_connection() await self.disconnect(server, client) @@ -397,7 +396,7 @@ async def test_connect_anna_elga_2_cooling(self): assert ( api._last_active["d3ce834534114348be628b61b26d9220"] == THERMOSTAT_SCHEDULE ) - assert self.entity_items == 65 + assert self.entity_items == 72 assert not self.notifications assert self.cooling_present @@ -451,7 +450,7 @@ async def test_connect_anna_loria_heating_idle(self): await self.device_test(api, "2022-05-16 00:00:01", testdata) assert api._last_active["15da035090b847e7a21f93e08c015ebc"] == "Winter" - assert self.entity_items == 68 + assert self.entity_items == 75 assert self.cooling_present assert not self._cooling_enabled @@ -517,7 +516,7 @@ async def test_connect_anna_loria_cooling_active(self): await self.device_test(api, "2022-05-16 00:00:01", testdata) assert api._last_active["15da035090b847e7a21f93e08c015ebc"] == "Winter" - assert self.entity_items == 68 + assert self.entity_items == 75 assert self.cooling_present assert self._cooling_enabled @@ -540,7 +539,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 == 68 + assert self.entity_items == 75 assert self.cooling_present assert not self._cooling_enabled From b35ae9f5fb6d05761d7627e3f77a6ffccd4cd157 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Fri, 10 Oct 2025 17:18:00 +0200 Subject: [PATCH 3/9] Update anna test-jsons --- tests/data/anna/anna_elga_2.json | 40 ++++++++----- tests/data/anna/anna_elga_2_cooling.json | 40 ++++++++----- .../anna_elga_2_cooling_UPDATED_DATA.json | 27 ++++++--- tests/data/anna/anna_elga_2_schedule_off.json | 38 +++++++++---- tests/data/anna/anna_elga_no_cooling.json | 25 +++++++-- tests/data/anna/anna_heatpump_cooling.json | 30 +++++++--- .../anna_heatpump_cooling_fake_firmware.json | 30 +++++++--- tests/data/anna/anna_heatpump_heating.json | 30 +++++++--- .../data/anna/anna_loria_cooling_active.json | 40 ++++++++----- tests/data/anna/anna_loria_driessens.json | 56 ++++++++++++------- tests/data/anna/anna_loria_heating_idle.json | 38 +++++++++---- tests/data/anna/anna_v4.json | 37 ++++++++---- tests/data/anna/anna_v4_UPDATED_DATA.json | 20 +++---- tests/data/anna/anna_v4_dhw.json | 37 ++++++++---- tests/data/anna/anna_v4_no_tag.json | 37 ++++++++---- .../data/anna/anna_without_boiler_fw441.json | 37 ++++++++---- 16 files changed, 381 insertions(+), 181 deletions(-) diff --git a/tests/data/anna/anna_elga_2.json b/tests/data/anna/anna_elga_2.json index 30e96f68a..5ca836525 100644 --- a/tests/data/anna/anna_elga_2.json +++ b/tests/data/anna/anna_elga_2.json @@ -29,25 +29,46 @@ }, "vendor": "Techneco" }, - "ebd90df1ab334565b5895f37590ccff4": { + "d3ce834534114348be628b61b26d9220": { "active_preset": "home", "available_schedules": ["Thermostat schedule", "off"], "climate_mode": "auto", - "control_state": "heating", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "select_schedule": "Thermostat schedule", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "temperature": 19.2 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["ebd90df1ab334565b5895f37590ccff4"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "ebd90df1ab334565b5895f37590ccff4": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "select_schedule": "Thermostat schedule", "sensors": { "cooling_activation_outdoor_temperature": 24.0, "cooling_deactivation_threshold": 2.0, "illuminance": 0.5, - "setpoint_high": 30.0, - "setpoint_low": 19.5, + "setpoint": 19.5, "temperature": 19.2 }, "temperature_offset": { @@ -56,13 +77,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 19.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/tests/data/anna/anna_elga_2_cooling.json b/tests/data/anna/anna_elga_2_cooling.json index fe46b6d0a..0cf0debfd 100644 --- a/tests/data/anna/anna_elga_2_cooling.json +++ b/tests/data/anna/anna_elga_2_cooling.json @@ -35,25 +35,46 @@ }, "vendor": "Techneco" }, - "ebd90df1ab334565b5895f37590ccff4": { + "d3ce834534114348be628b61b26d9220": { "active_preset": "home", "available_schedules": ["Thermostat schedule", "off"], "climate_mode": "auto", - "control_state": "cooling", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "select_schedule": "Thermostat schedule", + "sensors": { + "setpoint_high": 23.0, + "setpoint_low": 4.0, + "temperature": 24.9 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 23.0, + "setpoint_low": 4.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["ebd90df1ab334565b5895f37590ccff4"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "ebd90df1ab334565b5895f37590ccff4": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "select_schedule": "Thermostat schedule", "sensors": { "cooling_activation_outdoor_temperature": 26.0, "cooling_deactivation_threshold": 3.0, "illuminance": 0.5, - "setpoint_high": 23.0, - "setpoint_low": 4.0, + "setpoint": 23.0, "temperature": 24.9 }, "temperature_offset": { @@ -62,13 +83,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 23.0, - "setpoint_low": 4.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { 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 a3088586b..e04010699 100644 --- a/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json +++ b/tests/data/anna/anna_elga_2_cooling_UPDATED_DATA.json @@ -36,24 +36,16 @@ "vendor": "Techneco" }, "ebd90df1ab334565b5895f37590ccff4": { - "active_preset": "home", - "available_schedules": ["Thermostat schedule", "off"], - "climate_mode": "auto", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "select_schedule": "Thermostat schedule", "sensors": { "cooling_activation_outdoor_temperature": 26.0, "cooling_deactivation_threshold": 3.0, "illuminance": 0.5, - "setpoint_high": 30.0, - "setpoint_low": 19.5, "temperature": 18.9 }, "temperature_offset": { @@ -62,6 +54,21 @@ "setpoint": 0.0, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "d3ce834534114348be628b61b26d9220": { + "active_preset": "home", + "available_schedules": ["Thermostat schedule", "off"], + "climate_mode": "auto", + "control_state": "heating", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "select_schedule": "Thermostat schedule", + "sensors": { + "temperature": 18.9 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -69,6 +76,10 @@ "setpoint_low": 19.5, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["ebd90df1ab334565b5895f37590ccff4"], + "secondary": [] + }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/tests/data/anna/anna_elga_2_schedule_off.json b/tests/data/anna/anna_elga_2_schedule_off.json index 4876a4416..1dcff555e 100644 --- a/tests/data/anna/anna_elga_2_schedule_off.json +++ b/tests/data/anna/anna_elga_2_schedule_off.json @@ -35,25 +35,46 @@ }, "vendor": "Techneco" }, - "ebd90df1ab334565b5895f37590ccff4": { + "d3ce834534114348be628b61b26d9220": { "active_preset": "home", "available_schedules": ["Thermostat schedule", "off"], "climate_mode": "heat_cool", "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "select_schedule": "off", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "temperature": 20.9 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["ebd90df1ab334565b5895f37590ccff4"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "ebd90df1ab334565b5895f37590ccff4": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 26.0, "cooling_deactivation_threshold": 3.0, "illuminance": 0.5, - "setpoint_high": 30.0, - "setpoint_low": 19.5, + "setpoint": 19.5, "temperature": 20.9 }, "temperature_offset": { @@ -62,13 +83,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 19.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/tests/data/anna/anna_elga_no_cooling.json b/tests/data/anna/anna_elga_no_cooling.json index aa775140f..e51ec7507 100644 --- a/tests/data/anna/anna_elga_no_cooling.json +++ b/tests/data/anna/anna_elga_no_cooling.json @@ -58,18 +58,12 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "auto", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 4.0, @@ -83,12 +77,31 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "auto", + "control_state": "heating", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "standaard", + "sensors": { + "temperature": 19.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, "setpoint": 20.5, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/tests/data/anna/anna_heatpump_cooling.json b/tests/data/anna/anna_heatpump_cooling.json index 80cf40202..76a5f2077 100644 --- a/tests/data/anna/anna_heatpump_cooling.json +++ b/tests/data/anna/anna_heatpump_cooling.json @@ -55,24 +55,17 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "heat_cool", - "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 6.0, "illuminance": 24.5, - "setpoint_high": 22.0, - "setpoint_low": 4.0, + "setpoint": 22.0, "temperature": 22.3 }, "temperature_offset": { @@ -81,6 +74,23 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "heat_cool", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "off", + "sensors": { + "setpoint_high": 22.0, + "setpoint_low": 4.0, + "temperature": 22.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -88,6 +98,10 @@ "setpoint_low": 4.0, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json index b80a30493..84b71fc1f 100644 --- a/tests/data/anna/anna_heatpump_cooling_fake_firmware.json +++ b/tests/data/anna/anna_heatpump_cooling_fake_firmware.json @@ -55,24 +55,17 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "heat_cool", - "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 6.0, "illuminance": 24.5, - "setpoint_high": 22.0, - "setpoint_low": 4.0, + "setpoint": 22.0, "temperature": 22.3 }, "temperature_offset": { @@ -81,6 +74,23 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "heat_cool", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "off", + "sensors": { + "setpoint_high": 22.0, + "setpoint_low": 4.0, + "temperature": 22.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -88,6 +98,10 @@ "setpoint_low": 4.0, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/tests/data/anna/anna_heatpump_heating.json b/tests/data/anna/anna_heatpump_heating.json index 8fc5771b6..250978738 100644 --- a/tests/data/anna/anna_heatpump_heating.json +++ b/tests/data/anna/anna_heatpump_heating.json @@ -60,24 +60,17 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "auto", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 4.0, "illuminance": 86.0, - "setpoint_high": 30.0, - "setpoint_low": 20.5, + "setpoint": 20.5, "temperature": 19.3 }, "temperature_offset": { @@ -86,6 +79,23 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "standaard", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "temperature": 23.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -93,6 +103,10 @@ "setpoint_low": 20.5, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/tests/data/anna/anna_loria_cooling_active.json b/tests/data/anna/anna_loria_cooling_active.json index bd46b01b6..9e9376fa8 100644 --- a/tests/data/anna/anna_loria_cooling_active.json +++ b/tests/data/anna/anna_loria_cooling_active.json @@ -1,22 +1,43 @@ { "devices": { - "582dfbdace4d4aeb832923ce7d1ddda0": { + "15da035090b847e7a21f93e08c015ebc": { "active_preset": "home", "available_schedules": ["Winter", "Test ", "off"], "climate_mode": "auto", - "control_state": "cooling", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], + "select_schedule": "Winter", + "sensors": { + "setpoint_high": 20.5, + "setpoint_low": 4.0, + "temperature": 22.1 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 20.5, + "setpoint_low": 4.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["582dfbdace4d4aeb832923ce7d1ddda0"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "582dfbdace4d4aeb832923ce7d1ddda0": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "15da035090b847e7a21f93e08c015ebc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], - "select_schedule": "Winter", "sensors": { "illuminance": 45.0, - "setpoint_high": 23.5, - "setpoint_low": 4.0, + "setpoint": 23.5, "temperature": 24.1 }, "temperature_offset": { @@ -25,13 +46,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 23.5, - "setpoint_low": 4.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "9ff0569b4984459fb243af64c0901894": { diff --git a/tests/data/anna/anna_loria_driessens.json b/tests/data/anna/anna_loria_driessens.json index 54f6d0fb7..8b632bc5f 100644 --- a/tests/data/anna/anna_loria_driessens.json +++ b/tests/data/anna/anna_loria_driessens.json @@ -19,28 +19,15 @@ "vendor": "Plugwise" }, "9fb768d699e44c7fb5cc50309dc4e7d4": { - "active_preset": "home", - "available_schedules": [ - "Verwarmen@9-23u", - "VAKANTIE (winter)", - "VERWARMEN", - "KOELEN", - "off" - ], - "climate_mode": "auto", - "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "fa70e08550c94de3a34feb27ecf31421", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "asleep", "vacation", "away", "home"], - "select_schedule": "Verwarmen@9-23u", "sensors": { "illuminance": 5.5, - "setpoint_high": 30.0, - "setpoint_low": 20.0, + "setpoint": 20.0, "temperature": 21.2 }, "temperature_offset": { @@ -49,13 +36,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 20.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "a449cbc334ae4a5bb7f89064984b2906": { @@ -99,6 +79,40 @@ "dhw_cm_switch": true }, "vendor": "Atlantic" + }, + "fa70e08550c94de3a34feb27ecf31421": { + "active_preset": "home", + "available_schedules": [ + "Verwarmen@9-23u", + "VAKANTIE (winter)", + "VERWARMEN", + "KOELEN", + "off" + ], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "asleep", "vacation", "away", "home"], + "select_schedule": "Verwarmen@9-23u", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 20.0, + "temperature": 21.2 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 20.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["9fb768d699e44c7fb5cc50309dc4e7d4"], + "secondary": [] + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/anna_loria_heating_idle.json b/tests/data/anna/anna_loria_heating_idle.json index 8eaee922f..ef1152e4d 100644 --- a/tests/data/anna/anna_loria_heating_idle.json +++ b/tests/data/anna/anna_loria_heating_idle.json @@ -1,22 +1,43 @@ { "devices": { - "582dfbdace4d4aeb832923ce7d1ddda0": { + "15da035090b847e7a21f93e08c015ebc": { "active_preset": "home", "available_schedules": ["Winter", "Test ", "off"], "climate_mode": "auto", "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], + "select_schedule": "Winter", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "temperature": 22.1 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["582dfbdace4d4aeb832923ce7d1ddda0"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "582dfbdace4d4aeb832923ce7d1ddda0": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "15da035090b847e7a21f93e08c015ebc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], - "select_schedule": "Winter", "sensors": { "illuminance": 45.0, - "setpoint_high": 30.0, - "setpoint_low": 20.5, + "setpoint": 20.5, "temperature": 22.1 }, "temperature_offset": { @@ -25,13 +46,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 20.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "9ff0569b4984459fb243af64c0901894": { diff --git a/tests/data/anna/anna_v4.json b/tests/data/anna/anna_v4.json index 8cd59b72e..e3360d317 100644 --- a/tests/data/anna/anna_v4.json +++ b/tests/data/anna/anna_v4.json @@ -1,18 +1,12 @@ { "devices": { "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], - "climate_mode": "heat", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], - "select_schedule": "off", "sensors": { "illuminance": 60.0, "setpoint": 20.5, @@ -24,12 +18,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint": 20.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { @@ -85,6 +73,31 @@ "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." + }, + "eb5309212bf5407bb143e5bfa3b18aee": { + "active_preset": "home", + "available_schedules": ["Standaard", "Thuiswerken", "off"], + "climate_mode": "heat", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "select_schedule": "off", + "sensors": { + "temperature": 20.6 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["01b85360fdd243d0aaad4d6ac2a5ba7e"], + "secondary": [] + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/anna_v4_UPDATED_DATA.json b/tests/data/anna/anna_v4_UPDATED_DATA.json index 331a4b623..c2229db04 100644 --- a/tests/data/anna/anna_v4_UPDATED_DATA.json +++ b/tests/data/anna/anna_v4_UPDATED_DATA.json @@ -29,21 +29,19 @@ "dhw_cm_switch": true } }, - "01b85360fdd243d0aaad4d6ac2a5ba7e": { + "eb5309212bf5407bb143e5bfa3b18aee": { "thermostat": { - "setpoint": 19.5, "lower_bound": 4.0, - "upper_bound": 30.0, - "resolution": 0.1 - }, - "active_preset": "away", - "select_schedule": "Standaard", - "climate_mode": "auto", - "control_state": "idle", + "resolution": 0.1, + "setpoint": 19.5, + "upper_bound": 30.0 + } + }, + "01b85360fdd243d0aaad4d6ac2a5ba7e": { "sensors": { - "temperature": 19.5, + "illuminance": 39.5, "setpoint": 19.5, - "illuminance": 39.5 + "temperature": 19.5 } }, "0466eae8520144c78afb29628384edeb": { diff --git a/tests/data/anna/anna_v4_dhw.json b/tests/data/anna/anna_v4_dhw.json index 08488701c..f89257a86 100644 --- a/tests/data/anna/anna_v4_dhw.json +++ b/tests/data/anna/anna_v4_dhw.json @@ -1,18 +1,12 @@ { "devices": { "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], - "climate_mode": "heat", - "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], - "select_schedule": "off", "sensors": { "illuminance": 60.0, "setpoint": 20.5, @@ -24,12 +18,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint": 20.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { @@ -85,6 +73,31 @@ "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." + }, + "eb5309212bf5407bb143e5bfa3b18aee": { + "active_preset": "home", + "available_schedules": ["Standaard", "Thuiswerken", "off"], + "climate_mode": "heat", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "select_schedule": "off", + "sensors": { + "temperature": 20.6 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["01b85360fdd243d0aaad4d6ac2a5ba7e"], + "secondary": [] + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/anna_v4_no_tag.json b/tests/data/anna/anna_v4_no_tag.json index 7a4a80705..7710e6556 100644 --- a/tests/data/anna/anna_v4_no_tag.json +++ b/tests/data/anna/anna_v4_no_tag.json @@ -1,18 +1,12 @@ { "devices": { "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], - "climate_mode": "auto", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], - "select_schedule": "Thuiswerken", "sensors": { "illuminance": 60.0, "setpoint": 20.5, @@ -24,12 +18,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint": 20.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { @@ -85,6 +73,31 @@ "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." + }, + "eb5309212bf5407bb143e5bfa3b18aee": { + "active_preset": "home", + "available_schedules": ["Standaard", "Thuiswerken", "off"], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "select_schedule": "Thuiswerken", + "sensors": { + "temperature": 20.6 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["01b85360fdd243d0aaad4d6ac2a5ba7e"], + "secondary": [] + }, + "vendor": "Plugwise" } } } diff --git a/tests/data/anna/anna_without_boiler_fw441.json b/tests/data/anna/anna_without_boiler_fw441.json index 89d3dc41e..5bcd1f9f9 100644 --- a/tests/data/anna/anna_without_boiler_fw441.json +++ b/tests/data/anna/anna_without_boiler_fw441.json @@ -1,18 +1,12 @@ { "devices": { "7ffbb3ab4b6c4ab2915d7510f7bf8fe9": { - "active_preset": "home", - "available_schedules": ["Test", "Normaal", "off"], - "climate_mode": "auto", - "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c34c6864216446528e95d88985e714cc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "asleep", "away", "vacation", "home"], - "select_schedule": "Normaal", "sensors": { "illuminance": 0.25, "setpoint": 19.0, @@ -24,12 +18,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint": 19.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "a270735e4ccd45239424badc0578a2b1": { @@ -50,6 +38,31 @@ }, "vendor": "Plugwise" }, + "c34c6864216446528e95d88985e714cc": { + "active_preset": "home", + "available_schedules": ["Test", "Normaal", "off"], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "asleep", "away", "vacation", "home"], + "select_schedule": "Normaal", + "sensors": { + "temperature": 19.1 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["7ffbb3ab4b6c4ab2915d7510f7bf8fe9"], + "secondary": [] + }, + "vendor": "Plugwise" + }, "c46b4794d28149699eacf053deedd003": { "binary_sensors": { "heating_state": false From b516f73a9f86ec9cde2b96d9216cc04973d8d811 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Fri, 10 Oct 2025 17:19:28 +0200 Subject: [PATCH 4/9] Update manual_fixtures script --- scripts/manual_fixtures.py | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) mode change 100755 => 100644 scripts/manual_fixtures.py diff --git a/scripts/manual_fixtures.py b/scripts/manual_fixtures.py old mode 100755 new mode 100644 index c303c7eb1..93719cf28 --- a/scripts/manual_fixtures.py +++ b/scripts/manual_fixtures.py @@ -235,22 +235,22 @@ def json_writer(manual_name: str, output: dict) -> None: "outdoor_temperature" ] = 28.2 -# Go for 3cb7 -m_anna_heatpump_cooling["3cb70739631c4d17a86b8b12e8a5161b"]["control_state"] = "cooling" -m_anna_heatpump_cooling["3cb70739631c4d17a86b8b12e8a5161b"]["thermostat"][ +# Go for c784 +m_anna_heatpump_cooling["c784ee9fdab44e1395b8dee7d7a497d5"]["control_state"] = "cooling" +m_anna_heatpump_cooling["c784ee9fdab44e1395b8dee7d7a497d5"]["thermostat"][ "setpoint_low" ] = 20.5 -m_anna_heatpump_cooling["3cb70739631c4d17a86b8b12e8a5161b"]["thermostat"][ +m_anna_heatpump_cooling["c784ee9fdab44e1395b8dee7d7a497d5"]["thermostat"][ "setpoint_high" ] = 30.0 -m_anna_heatpump_cooling["3cb70739631c4d17a86b8b12e8a5161b"]["sensors"][ +m_anna_heatpump_cooling["c784ee9fdab44e1395b8dee7d7a497d5"]["sensors"][ "temperature" ] = 26.3 -m_anna_heatpump_cooling["3cb70739631c4d17a86b8b12e8a5161b"]["sensors"][ +m_anna_heatpump_cooling["c784ee9fdab44e1395b8dee7d7a497d5"]["sensors"][ "setpoint_low" ] = 20.5 -m_anna_heatpump_cooling["3cb70739631c4d17a86b8b12e8a5161b"]["sensors"][ +m_anna_heatpump_cooling["c784ee9fdab44e1395b8dee7d7a497d5"]["sensors"][ "setpoint_high" ] = 30.0 @@ -287,13 +287,12 @@ def json_writer(manual_name: str, output: dict) -> None: "outdoor_air_temperature" ] = 28.2 - -# Go for 3cb7 -m_anna_heatpump_idle["3cb70739631c4d17a86b8b12e8a5161b"]["control_state"] = "idle" -m_anna_heatpump_idle["3cb70739631c4d17a86b8b12e8a5161b"]["sensors"]["temperature"] = ( +# Go for c784 +m_anna_heatpump_idle["c784ee9fdab44e1395b8dee7d7a497d5"]["control_state"] = "idle" +m_anna_heatpump_idle["c784ee9fdab44e1395b8dee7d7a497d5"]["sensors"]["temperature"] = ( 23.0 ) -m_anna_heatpump_idle["3cb70739631c4d17a86b8b12e8a5161b"]["sensors"][ +m_anna_heatpump_idle["c784ee9fdab44e1395b8dee7d7a497d5"]["sensors"][ "cooling_activation_outdoor_temperature" ] = 25.0 From 60cd98b8e76c603b2d16883bff70187b93cd831e Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Fri, 10 Oct 2025 17:25:13 +0200 Subject: [PATCH 5/9] Correct updated anna_v4 userdata --- userdata/updated/anna_v4/core.domain_objects.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/userdata/updated/anna_v4/core.domain_objects.xml b/userdata/updated/anna_v4/core.domain_objects.xml index ad45fd1c6..7bc55e899 100644 --- a/userdata/updated/anna_v4/core.domain_objects.xml +++ b/userdata/updated/anna_v4/core.domain_objects.xml @@ -647,7 +647,7 @@ C 2020-04-01T08:04:13.351+02:00 - 20.50 + 19.50 @@ -664,7 +664,7 @@ 2020-04-02T08:33:05.069+02:00 thermostat - 20.5 + 19.5 4 30 0.1 From dd53b9b116156d9cff05824940379ca6342d8f1b Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 8 Oct 2025 20:29:04 +0200 Subject: [PATCH 6/9] Fix typo in xml-file --- .../updated/anna_elga_2_switch_heating/core.domain_objects.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/userdata/updated/anna_elga_2_switch_heating/core.domain_objects.xml b/userdata/updated/anna_elga_2_switch_heating/core.domain_objects.xml index b74fc6b68..63ad2aaf4 100644 --- a/userdata/updated/anna_elga_2_switch_heating/core.domain_objects.xml +++ b/userdata/updated/anna_elga_2_switch_heating/core.domain_objects.xml @@ -1868,7 +1868,7 @@ 2022-03-10T06:45:00.348+01:00 thermostat - 19.5.0 + 19.50 4 30 0.1 From 26f8e0fb05bb30cf0f6617602572f03ddc23a4f7 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Fri, 10 Oct 2025 17:26:50 +0200 Subject: [PATCH 7/9] Save updated fixture files --- fixtures/anna_elga_2/data.json | 40 ++++++++----- fixtures/anna_elga_2_cooling/data.json | 40 ++++++++----- fixtures/anna_elga_2_schedule_off/data.json | 38 +++++++++---- fixtures/anna_elga_no_cooling/data.json | 25 +++++++-- fixtures/anna_heatpump_cooling/data.json | 30 +++++++--- .../data.json | 30 +++++++--- fixtures/anna_heatpump_heating/data.json | 30 +++++++--- fixtures/anna_loria_cooling_active/data.json | 40 ++++++++----- fixtures/anna_loria_driessens/data.json | 56 ++++++++++++------- fixtures/anna_loria_heating_idle/data.json | 38 +++++++++---- fixtures/anna_v4/data.json | 37 ++++++++---- fixtures/anna_v4_dhw/data.json | 37 ++++++++---- fixtures/anna_v4_no_tag/data.json | 37 ++++++++---- fixtures/anna_without_boiler_fw441/data.json | 37 ++++++++---- fixtures/m_anna_heatpump_cooling/data.json | 32 ++++++++--- fixtures/m_anna_heatpump_idle/data.json | 35 ++++++++---- 16 files changed, 401 insertions(+), 181 deletions(-) diff --git a/fixtures/anna_elga_2/data.json b/fixtures/anna_elga_2/data.json index e417927a2..45010d8fb 100644 --- a/fixtures/anna_elga_2/data.json +++ b/fixtures/anna_elga_2/data.json @@ -28,25 +28,46 @@ }, "vendor": "Techneco" }, - "ebd90df1ab334565b5895f37590ccff4": { + "d3ce834534114348be628b61b26d9220": { "active_preset": "home", "available_schedules": ["Thermostat schedule", "off"], "climate_mode": "auto", - "control_state": "heating", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "select_schedule": "Thermostat schedule", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "temperature": 19.2 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["ebd90df1ab334565b5895f37590ccff4"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "ebd90df1ab334565b5895f37590ccff4": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "select_schedule": "Thermostat schedule", "sensors": { "cooling_activation_outdoor_temperature": 24.0, "cooling_deactivation_threshold": 2.0, "illuminance": 0.5, - "setpoint_high": 30.0, - "setpoint_low": 19.5, + "setpoint": 19.5, "temperature": 19.2 }, "temperature_offset": { @@ -55,13 +76,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 19.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/fixtures/anna_elga_2_cooling/data.json b/fixtures/anna_elga_2_cooling/data.json index 0c417702b..a9521b6f3 100644 --- a/fixtures/anna_elga_2_cooling/data.json +++ b/fixtures/anna_elga_2_cooling/data.json @@ -34,25 +34,46 @@ }, "vendor": "Techneco" }, - "ebd90df1ab334565b5895f37590ccff4": { + "d3ce834534114348be628b61b26d9220": { "active_preset": "home", "available_schedules": ["Thermostat schedule", "off"], "climate_mode": "auto", - "control_state": "cooling", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "select_schedule": "Thermostat schedule", + "sensors": { + "setpoint_high": 23.0, + "setpoint_low": 4.0, + "temperature": 24.9 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 23.0, + "setpoint_low": 4.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["ebd90df1ab334565b5895f37590ccff4"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "ebd90df1ab334565b5895f37590ccff4": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "select_schedule": "Thermostat schedule", "sensors": { "cooling_activation_outdoor_temperature": 26.0, "cooling_deactivation_threshold": 3.0, "illuminance": 0.5, - "setpoint_high": 23.0, - "setpoint_low": 4.0, + "setpoint": 23.0, "temperature": 24.9 }, "temperature_offset": { @@ -61,13 +82,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 23.0, - "setpoint_low": 4.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/fixtures/anna_elga_2_schedule_off/data.json b/fixtures/anna_elga_2_schedule_off/data.json index 064a483d8..5655c3f73 100644 --- a/fixtures/anna_elga_2_schedule_off/data.json +++ b/fixtures/anna_elga_2_schedule_off/data.json @@ -34,25 +34,46 @@ }, "vendor": "Techneco" }, - "ebd90df1ab334565b5895f37590ccff4": { + "d3ce834534114348be628b61b26d9220": { "active_preset": "home", "available_schedules": ["Thermostat schedule", "off"], "climate_mode": "heat_cool", "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], + "select_schedule": "off", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "temperature": 20.9 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 19.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["ebd90df1ab334565b5895f37590ccff4"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "ebd90df1ab334565b5895f37590ccff4": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "d3ce834534114348be628b61b26d9220", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "no_frost", "vacation", "home", "asleep"], - "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 26.0, "cooling_deactivation_threshold": 3.0, "illuminance": 0.5, - "setpoint_high": 30.0, - "setpoint_low": 19.5, + "setpoint": 19.5, "temperature": 20.9 }, "temperature_offset": { @@ -61,13 +82,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 19.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "fb49af122f6e4b0f91267e1cf7666d6f": { diff --git a/fixtures/anna_elga_no_cooling/data.json b/fixtures/anna_elga_no_cooling/data.json index 23ec151d4..b12c2f8e2 100644 --- a/fixtures/anna_elga_no_cooling/data.json +++ b/fixtures/anna_elga_no_cooling/data.json @@ -57,18 +57,12 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "auto", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 4.0, @@ -82,12 +76,31 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "auto", + "control_state": "heating", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "standaard", + "sensors": { + "temperature": 19.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, "setpoint": 20.5, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/fixtures/anna_heatpump_cooling/data.json b/fixtures/anna_heatpump_cooling/data.json index c722045a2..652a4ea62 100644 --- a/fixtures/anna_heatpump_cooling/data.json +++ b/fixtures/anna_heatpump_cooling/data.json @@ -54,24 +54,17 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "heat_cool", - "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 6.0, "illuminance": 24.5, - "setpoint_high": 22.0, - "setpoint_low": 4.0, + "setpoint": 22.0, "temperature": 22.3 }, "temperature_offset": { @@ -80,6 +73,23 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "heat_cool", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "off", + "sensors": { + "setpoint_high": 22.0, + "setpoint_low": 4.0, + "temperature": 22.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -87,6 +97,10 @@ "setpoint_low": 4.0, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/fixtures/anna_heatpump_cooling_fake_firmware/data.json b/fixtures/anna_heatpump_cooling_fake_firmware/data.json index 4218240cb..1c8bac86c 100644 --- a/fixtures/anna_heatpump_cooling_fake_firmware/data.json +++ b/fixtures/anna_heatpump_cooling_fake_firmware/data.json @@ -54,24 +54,17 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "heat_cool", - "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "off", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 6.0, "illuminance": 24.5, - "setpoint_high": 22.0, - "setpoint_low": 4.0, + "setpoint": 22.0, "temperature": 22.3 }, "temperature_offset": { @@ -80,6 +73,23 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "heat_cool", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "off", + "sensors": { + "setpoint_high": 22.0, + "setpoint_low": 4.0, + "temperature": 22.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -87,6 +97,10 @@ "setpoint_low": 4.0, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/fixtures/anna_heatpump_heating/data.json b/fixtures/anna_heatpump_heating/data.json index ab6bdf08e..b729e63be 100644 --- a/fixtures/anna_heatpump_heating/data.json +++ b/fixtures/anna_heatpump_heating/data.json @@ -59,24 +59,17 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "auto", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 4.0, "illuminance": 86.0, - "setpoint_high": 30.0, - "setpoint_low": 20.5, + "setpoint": 20.5, "temperature": 19.3 }, "temperature_offset": { @@ -85,6 +78,23 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "standaard", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "temperature": 23.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -92,6 +102,10 @@ "setpoint_low": 20.5, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/fixtures/anna_loria_cooling_active/data.json b/fixtures/anna_loria_cooling_active/data.json index 8b6c7341e..40e2a5bbe 100644 --- a/fixtures/anna_loria_cooling_active/data.json +++ b/fixtures/anna_loria_cooling_active/data.json @@ -1,21 +1,42 @@ { - "582dfbdace4d4aeb832923ce7d1ddda0": { + "15da035090b847e7a21f93e08c015ebc": { "active_preset": "home", "available_schedules": ["Winter", "Test ", "off"], "climate_mode": "auto", - "control_state": "cooling", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], + "select_schedule": "Winter", + "sensors": { + "setpoint_high": 20.5, + "setpoint_low": 4.0, + "temperature": 22.1 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 20.5, + "setpoint_low": 4.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["582dfbdace4d4aeb832923ce7d1ddda0"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "582dfbdace4d4aeb832923ce7d1ddda0": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "15da035090b847e7a21f93e08c015ebc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], - "select_schedule": "Winter", "sensors": { "illuminance": 45.0, - "setpoint_high": 23.5, - "setpoint_low": 4.0, + "setpoint": 23.5, "temperature": 24.1 }, "temperature_offset": { @@ -24,13 +45,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 23.5, - "setpoint_low": 4.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "9ff0569b4984459fb243af64c0901894": { diff --git a/fixtures/anna_loria_driessens/data.json b/fixtures/anna_loria_driessens/data.json index 2519d1f45..9897a5a59 100644 --- a/fixtures/anna_loria_driessens/data.json +++ b/fixtures/anna_loria_driessens/data.json @@ -18,28 +18,15 @@ "vendor": "Plugwise" }, "9fb768d699e44c7fb5cc50309dc4e7d4": { - "active_preset": "home", - "available_schedules": [ - "Verwarmen@9-23u", - "VAKANTIE (winter)", - "VERWARMEN", - "KOELEN", - "off" - ], - "climate_mode": "auto", - "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "fa70e08550c94de3a34feb27ecf31421", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "asleep", "vacation", "away", "home"], - "select_schedule": "Verwarmen@9-23u", "sensors": { "illuminance": 5.5, - "setpoint_high": 30.0, - "setpoint_low": 20.0, + "setpoint": 20.0, "temperature": 21.2 }, "temperature_offset": { @@ -48,13 +35,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 20.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "a449cbc334ae4a5bb7f89064984b2906": { @@ -98,5 +78,39 @@ "dhw_cm_switch": true }, "vendor": "Atlantic" + }, + "fa70e08550c94de3a34feb27ecf31421": { + "active_preset": "home", + "available_schedules": [ + "Verwarmen@9-23u", + "VAKANTIE (winter)", + "VERWARMEN", + "KOELEN", + "off" + ], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "asleep", "vacation", "away", "home"], + "select_schedule": "Verwarmen@9-23u", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 20.0, + "temperature": 21.2 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 20.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["9fb768d699e44c7fb5cc50309dc4e7d4"], + "secondary": [] + }, + "vendor": "Plugwise" } } diff --git a/fixtures/anna_loria_heating_idle/data.json b/fixtures/anna_loria_heating_idle/data.json index d1b640345..9de69d275 100644 --- a/fixtures/anna_loria_heating_idle/data.json +++ b/fixtures/anna_loria_heating_idle/data.json @@ -1,21 +1,42 @@ { - "582dfbdace4d4aeb832923ce7d1ddda0": { + "15da035090b847e7a21f93e08c015ebc": { "active_preset": "home", "available_schedules": ["Winter", "Test ", "off"], "climate_mode": "auto", "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], + "select_schedule": "Winter", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "temperature": 22.1 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["582dfbdace4d4aeb832923ce7d1ddda0"], + "secondary": [] + }, + "vendor": "Plugwise" + }, + "582dfbdace4d4aeb832923ce7d1ddda0": { "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "15da035090b847e7a21f93e08c015ebc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["away", "vacation", "no_frost", "home", "asleep"], - "select_schedule": "Winter", "sensors": { "illuminance": 45.0, - "setpoint_high": 30.0, - "setpoint_low": 20.5, + "setpoint": 20.5, "temperature": 22.1 }, "temperature_offset": { @@ -24,13 +45,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint_high": 30.0, - "setpoint_low": 20.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "9ff0569b4984459fb243af64c0901894": { diff --git a/fixtures/anna_v4/data.json b/fixtures/anna_v4/data.json index 7e6f138be..5efedb918 100644 --- a/fixtures/anna_v4/data.json +++ b/fixtures/anna_v4/data.json @@ -1,17 +1,11 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], - "climate_mode": "heat", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], - "select_schedule": "off", "sensors": { "illuminance": 60.0, "setpoint": 20.5, @@ -23,12 +17,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint": 20.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { @@ -84,5 +72,30 @@ "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." + }, + "eb5309212bf5407bb143e5bfa3b18aee": { + "active_preset": "home", + "available_schedules": ["Standaard", "Thuiswerken", "off"], + "climate_mode": "heat", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "select_schedule": "off", + "sensors": { + "temperature": 20.6 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["01b85360fdd243d0aaad4d6ac2a5ba7e"], + "secondary": [] + }, + "vendor": "Plugwise" } } diff --git a/fixtures/anna_v4_dhw/data.json b/fixtures/anna_v4_dhw/data.json index a560de161..9125a0152 100644 --- a/fixtures/anna_v4_dhw/data.json +++ b/fixtures/anna_v4_dhw/data.json @@ -1,17 +1,11 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], - "climate_mode": "heat", - "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], - "select_schedule": "off", "sensors": { "illuminance": 60.0, "setpoint": 20.5, @@ -23,12 +17,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint": 20.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { @@ -84,5 +72,30 @@ "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." + }, + "eb5309212bf5407bb143e5bfa3b18aee": { + "active_preset": "home", + "available_schedules": ["Standaard", "Thuiswerken", "off"], + "climate_mode": "heat", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "select_schedule": "off", + "sensors": { + "temperature": 20.6 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["01b85360fdd243d0aaad4d6ac2a5ba7e"], + "secondary": [] + }, + "vendor": "Plugwise" } } diff --git a/fixtures/anna_v4_no_tag/data.json b/fixtures/anna_v4_no_tag/data.json index 513e7ce20..1d1a282fa 100644 --- a/fixtures/anna_v4_no_tag/data.json +++ b/fixtures/anna_v4_no_tag/data.json @@ -1,17 +1,11 @@ { "01b85360fdd243d0aaad4d6ac2a5ba7e": { - "active_preset": "home", - "available_schedules": ["Standaard", "Thuiswerken", "off"], - "climate_mode": "auto", - "control_state": "heating", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "eb5309212bf5407bb143e5bfa3b18aee", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], - "select_schedule": "Thuiswerken", "sensors": { "illuminance": 60.0, "setpoint": 20.5, @@ -23,12 +17,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint": 20.5, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "0466eae8520144c78afb29628384edeb": { @@ -84,5 +72,30 @@ "dhw_cm_switch": false }, "vendor": "Bosch Thermotechniek B.V." + }, + "eb5309212bf5407bb143e5bfa3b18aee": { + "active_preset": "home", + "available_schedules": ["Standaard", "Thuiswerken", "off"], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["vacation", "no_frost", "away", "asleep", "home"], + "select_schedule": "Thuiswerken", + "sensors": { + "temperature": 20.6 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 20.5, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["01b85360fdd243d0aaad4d6ac2a5ba7e"], + "secondary": [] + }, + "vendor": "Plugwise" } } diff --git a/fixtures/anna_without_boiler_fw441/data.json b/fixtures/anna_without_boiler_fw441/data.json index 7e0b7cc4f..01c83aca6 100644 --- a/fixtures/anna_without_boiler_fw441/data.json +++ b/fixtures/anna_without_boiler_fw441/data.json @@ -1,17 +1,11 @@ { "7ffbb3ab4b6c4ab2915d7510f7bf8fe9": { - "active_preset": "home", - "available_schedules": ["Test", "Normaal", "off"], - "climate_mode": "auto", - "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c34c6864216446528e95d88985e714cc", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "asleep", "away", "vacation", "home"], - "select_schedule": "Normaal", "sensors": { "illuminance": 0.25, "setpoint": 19.0, @@ -23,12 +17,6 @@ "setpoint": 0.0, "upper_bound": 2.0 }, - "thermostat": { - "lower_bound": 4.0, - "resolution": 0.1, - "setpoint": 19.0, - "upper_bound": 30.0 - }, "vendor": "Plugwise" }, "a270735e4ccd45239424badc0578a2b1": { @@ -49,6 +37,31 @@ }, "vendor": "Plugwise" }, + "c34c6864216446528e95d88985e714cc": { + "active_preset": "home", + "available_schedules": ["Test", "Normaal", "off"], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "asleep", "away", "vacation", "home"], + "select_schedule": "Normaal", + "sensors": { + "temperature": 19.1 + }, + "thermostat": { + "lower_bound": 4.0, + "resolution": 0.1, + "setpoint": 19.0, + "upper_bound": 30.0 + }, + "thermostats": { + "primary": ["7ffbb3ab4b6c4ab2915d7510f7bf8fe9"], + "secondary": [] + }, + "vendor": "Plugwise" + }, "c46b4794d28149699eacf053deedd003": { "binary_sensors": { "heating_state": false diff --git a/fixtures/m_anna_heatpump_cooling/data.json b/fixtures/m_anna_heatpump_cooling/data.json index ccfd816ff..9e827540e 100644 --- a/fixtures/m_anna_heatpump_cooling/data.json +++ b/fixtures/m_anna_heatpump_cooling/data.json @@ -59,25 +59,18 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "auto", - "control_state": "cooling", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "standaard", "sensors": { "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 4.0, "illuminance": 86.0, - "setpoint_high": 30.0, - "setpoint_low": 20.5, - "temperature": 26.3 + "setpoint": 20.5, + "temperature": 19.3 }, "temperature_offset": { "lower_bound": -2.0, @@ -85,6 +78,23 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "auto", + "control_state": "cooling", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "standaard", + "sensors": { + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "temperature": 26.3 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -92,6 +102,10 @@ "setpoint_low": 20.5, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } diff --git a/fixtures/m_anna_heatpump_idle/data.json b/fixtures/m_anna_heatpump_idle/data.json index 5a1cdebd3..8fc72b612 100644 --- a/fixtures/m_anna_heatpump_idle/data.json +++ b/fixtures/m_anna_heatpump_idle/data.json @@ -59,25 +59,18 @@ "vendor": "Techneco" }, "3cb70739631c4d17a86b8b12e8a5161b": { - "active_preset": "home", - "available_schedules": ["standaard", "off"], - "climate_mode": "auto", - "control_state": "idle", "dev_class": "thermostat", "firmware": "2018-02-08T11:15:53+01:00", "hardware": "6539-1301-5002", "location": "c784ee9fdab44e1395b8dee7d7a497d5", "model": "ThermoTouch", "name": "Anna", - "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], - "select_schedule": "standaard", "sensors": { - "cooling_activation_outdoor_temperature": 25.0, + "cooling_activation_outdoor_temperature": 21.0, "cooling_deactivation_threshold": 4.0, "illuminance": 86.0, - "setpoint_high": 30.0, - "setpoint_low": 20.5, - "temperature": 23.0 + "setpoint": 20.5, + "temperature": 19.3 }, "temperature_offset": { "lower_bound": -2.0, @@ -85,6 +78,24 @@ "setpoint": -0.5, "upper_bound": 2.0 }, + "vendor": "Plugwise" + }, + "c784ee9fdab44e1395b8dee7d7a497d5": { + "active_preset": "home", + "available_schedules": ["standaard", "off"], + "climate_mode": "auto", + "control_state": "idle", + "dev_class": "climate", + "model": "ThermoZone", + "name": "Living room", + "preset_modes": ["no_frost", "home", "away", "asleep", "vacation"], + "select_schedule": "standaard", + "sensors": { + "cooling_activation_outdoor_temperature": 25.0, + "setpoint_high": 30.0, + "setpoint_low": 20.5, + "temperature": 23.0 + }, "thermostat": { "lower_bound": 4.0, "resolution": 0.1, @@ -92,6 +103,10 @@ "setpoint_low": 20.5, "upper_bound": 30.0 }, + "thermostats": { + "primary": ["3cb70739631c4d17a86b8b12e8a5161b"], + "secondary": [] + }, "vendor": "Plugwise" } } From 0a36be48015e4f7645f780929e072cb363d3449c Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Fri, 10 Oct 2025 17:30:35 +0200 Subject: [PATCH 8/9] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46cb72d9a..0949e07d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Test/validate for Python 3.14 - Fix entity_item counting, refresh/complete test-data-json files via [#794](https://github.com/plugwise/python-plugwise/pull/794) +- Add ThermoZone for Anna ## v1.7.8 From 72018b4fc1bcad5c76450ade61cecc345558fb21 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Fri, 10 Oct 2025 17:32:50 +0200 Subject: [PATCH 9/9] Bump to v1.8.0a0 for testing --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 05c85198d..f8f14a831 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "plugwise" -version = "1.7.8" +version = "1.8.0a0" license = "MIT" description = "Plugwise Smile (Adam/Anna/P1) and Stretch module for Python 3." readme = "README.md"