From e01ebbba621341aaf1153cc48d9c988a36bbfe5f Mon Sep 17 00:00:00 2001 From: Raphael Biland Date: Sun, 9 Nov 2025 11:28:40 +0100 Subject: [PATCH] fix multizone flow temperatures --- src/pymelcloud/atw_device.py | 14 ++++++++++++-- tests/samples/atw_1zone_listdevice.json | 8 ++++---- tests/samples/atw_2zone_listdevice.json | 8 ++++---- tests/test_atw_properties.py | 20 ++++++++++---------- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/pymelcloud/atw_device.py b/src/pymelcloud/atw_device.py index f4a2fd0..79ce0a5 100644 --- a/src/pymelcloud/atw_device.py +++ b/src/pymelcloud/atw_device.py @@ -161,7 +161,12 @@ def flow_temperature(self) -> float: This value is not available in the standard state poll response. The poll update frequency can be a little bit lower that expected. """ - return self._device_conf()["Device"]["FlowTemperature"] + temp = self._device_conf()["Device"].get(f"FlowTemperatureZone{self.zone_index}") + + if temp is None: + return self._device_conf()["Device"]["FlowTemperature"] # backward compatibility if it is needed + + return temp @property def return_temperature(self) -> float: @@ -170,7 +175,12 @@ def return_temperature(self) -> float: This value is not available in the standard state poll response. The poll update frequency can be a little bit lower that expected. """ - return self._device_conf()["Device"]["ReturnTemperature"] + temp = self._device_conf()["Device"].get(f"ReturnTemperatureZone{self.zone_index}") + + if temp is None: + return self._device_conf()["Device"]["ReturnTemperature"] # backward compatibility if it is needed + + return temp @property def target_flow_temperature(self) -> Optional[float]: diff --git a/tests/samples/atw_1zone_listdevice.json b/tests/samples/atw_1zone_listdevice.json index 9c4043c..e9b0a0a 100644 --- a/tests/samples/atw_1zone_listdevice.json +++ b/tests/samples/atw_1zone_listdevice.json @@ -61,12 +61,12 @@ "RoomTemperatureZone2": -39, "OutdoorTemperature": 13, "FlowTemperature": 57.5, - "FlowTemperatureZone1": 25, - "FlowTemperatureZone2": 25, + "FlowTemperatureZone1": 28, + "FlowTemperatureZone2": 29, "FlowTemperatureBoiler": 25, "ReturnTemperature": 53, - "ReturnTemperatureZone1": 25, - "ReturnTemperatureZone2": 25, + "ReturnTemperatureZone1": 26, + "ReturnTemperatureZone2": 27, "ReturnTemperatureBoiler": 25, "BoilerStatus": false, "BoosterHeater1Status": false, diff --git a/tests/samples/atw_2zone_listdevice.json b/tests/samples/atw_2zone_listdevice.json index 473f791..800d180 100644 --- a/tests/samples/atw_2zone_listdevice.json +++ b/tests/samples/atw_2zone_listdevice.json @@ -97,12 +97,12 @@ "RoomTemperatureZone2": 19.5, "OutdoorTemperature": 4.0, "FlowTemperature": 36.0, - "FlowTemperatureZone1": 25.0, - "FlowTemperatureZone2": 25.0, + "FlowTemperatureZone1": 29.0, + "FlowTemperatureZone2": 28.0, "FlowTemperatureBoiler": 25.0, "ReturnTemperature": 30.0, - "ReturnTemperatureZone1": 25.0, - "ReturnTemperatureZone2": 25.0, + "ReturnTemperatureZone1": 27.0, + "ReturnTemperatureZone2": 26.0, "ReturnTemperatureBoiler": 25.0, "BoilerStatus": false, "BoosterHeater1Status": false, diff --git a/tests/test_atw_properties.py b/tests/test_atw_properties.py index 6ae3a0a..c2b9518 100644 --- a/tests/test_atw_properties.py +++ b/tests/test_atw_properties.py @@ -60,8 +60,8 @@ async def test_1zone(): assert zones[0].zone_index == 1 assert zones[0].room_temperature is None assert zones[0].target_temperature is None - assert zones[0].flow_temperature == 57.5 - assert zones[0].return_temperature == 53.0 + assert zones[0].flow_temperature == 28.0 + assert zones[0].return_temperature == 26.0 assert zones[0].target_flow_temperature is None assert zones[0].operation_mode is None assert zones[0].operation_modes == [ @@ -130,8 +130,8 @@ async def test_2zone(): assert zones[0].zone_index == 1 assert zones[0].room_temperature is None assert zones[0].target_temperature is None - assert zones[0].flow_temperature == 36.0 - assert zones[0].return_temperature == 30.0 + assert zones[0].flow_temperature == 29.0 + assert zones[0].return_temperature == 27.0 assert zones[0].target_flow_temperature is None assert zones[0].operation_mode is None assert zones[0].operation_modes == [ @@ -145,8 +145,8 @@ async def test_2zone(): assert zones[1].zone_index == 2 assert zones[1].room_temperature is None assert zones[1].target_temperature is None - assert zones[1].flow_temperature == 36.0 - assert zones[1].return_temperature == 30.0 + assert zones[1].flow_temperature == 28.0 + assert zones[1].return_temperature == 26.0 assert zones[1].target_flow_temperature is None assert zones[1].operation_mode is None assert zones[1].operation_modes == [ @@ -228,8 +228,8 @@ async def test_2zone_cancool(): assert zones[0].zone_index == 1 assert zones[0].room_temperature is None assert zones[0].target_temperature is None - assert zones[0].flow_temperature == 50.5 - assert zones[0].return_temperature == 50.5 + assert zones[0].flow_temperature == 22.0 + assert zones[0].return_temperature == 21.0 assert zones[0].target_flow_temperature is None assert zones[0].operation_mode is None assert zones[0].operation_modes == [ @@ -245,8 +245,8 @@ async def test_2zone_cancool(): assert zones[1].zone_index == 2 assert zones[1].room_temperature is None assert zones[1].target_temperature is None - assert zones[1].flow_temperature == 50.5 - assert zones[1].return_temperature == 50.5 + assert zones[1].flow_temperature == 21.0 + assert zones[1].return_temperature == 21.0 assert zones[1].target_flow_temperature is None assert zones[1].operation_mode is None assert zones[1].operation_modes == [