From 0bd5cfddd4a364e8a8bafd6c34fd7866d914e6cc Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 19:43:52 +0200 Subject: [PATCH 01/12] Integrate set_temp_offset() in set_number_setpoint() --- plugwise/smile.py | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/plugwise/smile.py b/plugwise/smile.py index eb913fb5a..d4e03feb3 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -182,8 +182,17 @@ async def set_gateway_mode(self, mode: str) -> None: await self._request(uri, method="put", data=data) - async def set_number_setpoint(self, key: str, temperature: float) -> None: + async def set_number_setpoint( + self, + key: str, + temperature: float, + dev_id: str | None = None, + ) -> None: """Set the max. Boiler or DHW setpoint on the Central Heating boiler.""" + if dev_id is not None: + await set_temperature_offset(dev_id, temperature) + return + temp = str(temperature) thermostat_id: str | None = None locator = f'appliance[@id="{self._heater_id}"]/actuator_functionalities/thermostat_functionality' @@ -199,6 +208,19 @@ async def set_number_setpoint(self, key: str, temperature: float) -> None: data = f"{temp}" await self._request(uri, method="put", data=data) + async def set_temperature_offset(self, dev_id: str, offset: float) -> None: + """Set the Temperature offset for thermostats that support this feature.""" + if dev_id not in self.therms_with_offset_func: + raise PlugwiseError( + "Plugwise: this device does not have temperature-offset capability." + ) + + value = str(offset) + uri = f"{APPLIANCES};id={dev_id}/offset;type=temperature_offset" + data = f"{value}" + + await self._request(uri, method="put", data=data) + async def set_preset(self, loc_id: str, preset: str) -> None: """Set the given Preset on the relevant Thermostat - from LOCATIONS.""" if (presets := self._presets(loc_id)) is None: @@ -410,16 +432,3 @@ async def set_temperature(self, loc_id: str, items: dict[str, float]) -> None: ) await self._request(uri, method="put", data=data) - - async def set_temperature_offset(self, dev_id: str, offset: float) -> None: - """Set the Temperature offset for thermostats that support this feature.""" - if dev_id not in self.therms_with_offset_func: - raise PlugwiseError( - "Plugwise: this device does not have temperature-offset capability." - ) - - value = str(offset) - uri = f"{APPLIANCES};id={dev_id}/offset;type=temperature_offset" - data = f"{value}" - - await self._request(uri, method="put", data=data) From 7fc703d68f27e1fd475beffa6548d56d03ec1014 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 19:46:18 +0200 Subject: [PATCH 02/12] Adapt relevant testcases --- tests/test_init.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/test_init.py b/tests/test_init.py index a7c7d8f14..bba4b32a2 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -873,11 +873,10 @@ async def tinker_regulation_mode(smile): async def tinker_max_boiler_temp(smile): """Change max boiler temp setpoint to test functionality.""" new_temp = 60.0 - dev_id = None _LOGGER.info("- Adjusting temperature to %s", new_temp) for test in ["maximum_boiler_temperature", "bogus_temperature"]: try: - await smile.set_number_setpoint(test, dev_id, new_temp) + await smile.set_number_setpoint(test, new_temp) _LOGGER.info(" + tinker_max_boiler_temp worked as intended") except pw_exceptions.PlugwiseError: _LOGGER.info(" + tinker_max_boiler_temp failed as intended") @@ -888,7 +887,7 @@ async def tinker_temp_offset(smile, dev_id): new_offset = 1.0 _LOGGER.info("- Adjusting temperature offset to %s", new_offset) try: - await smile.set_temperature_offset("dummy", dev_id, new_offset) + await smile.set_number_setpoint("dummy", new_offset, dev_id) _LOGGER.info(" + tinker_temp_offset worked as intended") return True except pw_exceptions.PlugwiseError: From aa1682b755084b0c4fc69fc7ec5bf6af5463530c Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 19:53:08 +0200 Subject: [PATCH 03/12] Fix --- tests/test_init.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_init.py b/tests/test_init.py index bba4b32a2..cc66f2e6b 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -887,7 +887,7 @@ async def tinker_temp_offset(smile, dev_id): new_offset = 1.0 _LOGGER.info("- Adjusting temperature offset to %s", new_offset) try: - await smile.set_number_setpoint("dummy", new_offset, dev_id) + await smile.set_number_setpoint("dummy", new_offset, dev_id=dev_id) _LOGGER.info(" + tinker_temp_offset worked as intended") return True except pw_exceptions.PlugwiseError: From 037c0e126beb255ce232419f7bbe59084d5247d6 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 19:56:11 +0200 Subject: [PATCH 04/12] Fix at higher level --- plugwise/__init__.py | 9 +++++++-- plugwise/smile.py | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/plugwise/__init__.py b/plugwise/__init__.py index 2f209ceed..e4d78e2b2 100644 --- a/plugwise/__init__.py +++ b/plugwise/__init__.py @@ -323,9 +323,14 @@ async def set_temperature(self, loc_id: str, items: dict[str, float]) -> None: """Set the given Temperature on the relevant Thermostat.""" await self._smile_api.set_temperature(loc_id, items) - async def set_number_setpoint(self, key: str, _: str, temperature: float) -> None: + async def set_number_setpoint( + self, + key: str, + temperature: float, + dev_id: str | None = None, + ) -> None: """Set the max. Boiler or DHW setpoint on the Central Heating boiler.""" - await self._smile_api.set_number_setpoint(key, temperature) + await self._smile_api.set_number_setpoint(key, temperature, dev_id) async def set_temperature_offset(self, _: str, dev_id: str, offset: float) -> None: """Set the Temperature offset for thermostats that support this feature.""" diff --git a/plugwise/smile.py b/plugwise/smile.py index d4e03feb3..e3433f2c0 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -186,7 +186,7 @@ async def set_number_setpoint( self, key: str, temperature: float, - dev_id: str | None = None, + dev_id: str | None, ) -> None: """Set the max. Boiler or DHW setpoint on the Central Heating boiler.""" if dev_id is not None: From 87948084766bf0125c8e8c9d05439684d04c70df Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 19:58:01 +0200 Subject: [PATCH 05/12] Fix 2 --- plugwise/smile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise/smile.py b/plugwise/smile.py index e3433f2c0..4f8b881e3 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -190,7 +190,7 @@ async def set_number_setpoint( ) -> None: """Set the max. Boiler or DHW setpoint on the Central Heating boiler.""" if dev_id is not None: - await set_temperature_offset(dev_id, temperature) + await self.set_temperature_offset(dev_id, temperature) return temp = str(temperature) From afb21e3e9fc7af1da897b25745939d085ed4b5ec Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 20:00:49 +0200 Subject: [PATCH 06/12] Update ruff syntax --- .github/workflows/verify.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 3cb21ec73..edc10bb31 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -102,7 +102,7 @@ jobs: if: failure() run: | . venv/bin/activate - ruff --fix plugwise/*py tests/*py + ruff check --fix plugwise/*py tests/*py git config --global user.name 'autoruff' git config --global user.email 'plugwise@users.noreply.github.com' git remote set-url origin https://x-access-token:${{ secrets.PAT_CT }}@github.com/$GITHUB_REPOSITORY From d2f24f5605ea45a093c9fa3c2a755d4c2bc569f8 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 20:02:36 +0200 Subject: [PATCH 07/12] Update also in script --- scripts/tests_and_coverage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/tests_and_coverage.sh b/scripts/tests_and_coverage.sh index 135b8bc49..3b9eca688 100755 --- a/scripts/tests_and_coverage.sh +++ b/scripts/tests_and_coverage.sh @@ -36,7 +36,7 @@ fi if [ -z "${GITHUB_ACTIONS}" ] || [ "$1" == "linting" ] ; then # Black first to ensure nothings roughing up ruff echo "... ruff-ing ..." - ruff plugwise/ tests/ + ruff check plugwise/ tests/ echo "... pylint-ing ..." pylint plugwise/ tests/ From 7238b2817e948daba03bebcbf621b986f269beab Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 20:03:37 +0200 Subject: [PATCH 08/12] Clean-up --- plugwise/__init__.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugwise/__init__.py b/plugwise/__init__.py index e4d78e2b2..3df09d522 100644 --- a/plugwise/__init__.py +++ b/plugwise/__init__.py @@ -332,10 +332,6 @@ async def set_number_setpoint( """Set the max. Boiler or DHW setpoint on the Central Heating boiler.""" await self._smile_api.set_number_setpoint(key, temperature, dev_id) - async def set_temperature_offset(self, _: str, dev_id: str, offset: float) -> None: - """Set the Temperature offset for thermostats that support this feature.""" - await self._smile_api.set_temperature_offset(dev_id, offset) - async def set_switch_state( self, appl_id: str, members: list[str] | None, model: str, state: str ) -> None: From c6378887968528910464e22cf218b2905b6577c2 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 20:12:36 +0200 Subject: [PATCH 09/12] Shorten function-names, clean-up --- plugwise/__init__.py | 4 ++-- plugwise/legacy/smile.py | 5 +---- plugwise/smile.py | 10 ++++++---- tests/test_init.py | 4 ++-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/plugwise/__init__.py b/plugwise/__init__.py index 3df09d522..cc886c27d 100644 --- a/plugwise/__init__.py +++ b/plugwise/__init__.py @@ -323,14 +323,14 @@ async def set_temperature(self, loc_id: str, items: dict[str, float]) -> None: """Set the given Temperature on the relevant Thermostat.""" await self._smile_api.set_temperature(loc_id, items) - async def set_number_setpoint( + async def set_number( self, key: str, temperature: float, dev_id: str | None = None, ) -> None: """Set the max. Boiler or DHW setpoint on the Central Heating boiler.""" - await self._smile_api.set_number_setpoint(key, temperature, dev_id) + await self._smile_api.set_number(key, temperature, dev_id) async def set_switch_state( self, appl_id: str, members: list[str] | None, model: str, state: str diff --git a/plugwise/legacy/smile.py b/plugwise/legacy/smile.py index 42c35ad5a..7f1e64531 100644 --- a/plugwise/legacy/smile.py +++ b/plugwise/legacy/smile.py @@ -154,7 +154,7 @@ async def set_dhw_mode(self, mode: str) -> None: async def set_gateway_mode(self, mode: str) -> None: """Set-function placeholder for legacy devices.""" - async def set_number_setpoint(self, key: str, temperature: float) -> None: + async def set_number(self, key: str, temperature: float, dev_id: str) -> None: """Set-function placeholder for legacy devices.""" async def set_preset(self, _: str, preset: str) -> None: @@ -268,6 +268,3 @@ async def set_temperature(self, _: str, items: dict[str, float]) -> None: ) await self._request(uri, method="put", data=data) - - async def set_temperature_offset(self, dev_id: str, offset: float) -> None: - """Set-function placeholder for legacy devices.""" diff --git a/plugwise/smile.py b/plugwise/smile.py index 4f8b881e3..413e85325 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -182,15 +182,17 @@ async def set_gateway_mode(self, mode: str) -> None: await self._request(uri, method="put", data=data) - async def set_number_setpoint( + async def set_number( self, key: str, temperature: float, dev_id: str | None, ) -> None: - """Set the max. Boiler or DHW setpoint on the Central Heating boiler.""" + """Set the maximum boiler- or DHW-setpoint on the Central Heating boiler, + or the temperature-offset on a Thermostat. + """ if dev_id is not None: - await self.set_temperature_offset(dev_id, temperature) + await self.set_offset(dev_id, temperature) return temp = str(temperature) @@ -208,7 +210,7 @@ async def set_number_setpoint( data = f"{temp}" await self._request(uri, method="put", data=data) - async def set_temperature_offset(self, dev_id: str, offset: float) -> None: + async def set_offset(self, dev_id: str, offset: float) -> None: """Set the Temperature offset for thermostats that support this feature.""" if dev_id not in self.therms_with_offset_func: raise PlugwiseError( diff --git a/tests/test_init.py b/tests/test_init.py index cc66f2e6b..94e489248 100644 --- a/tests/test_init.py +++ b/tests/test_init.py @@ -876,7 +876,7 @@ async def tinker_max_boiler_temp(smile): _LOGGER.info("- Adjusting temperature to %s", new_temp) for test in ["maximum_boiler_temperature", "bogus_temperature"]: try: - await smile.set_number_setpoint(test, new_temp) + await smile.set_number(test, new_temp) _LOGGER.info(" + tinker_max_boiler_temp worked as intended") except pw_exceptions.PlugwiseError: _LOGGER.info(" + tinker_max_boiler_temp failed as intended") @@ -887,7 +887,7 @@ async def tinker_temp_offset(smile, dev_id): new_offset = 1.0 _LOGGER.info("- Adjusting temperature offset to %s", new_offset) try: - await smile.set_number_setpoint("dummy", new_offset, dev_id=dev_id) + await smile.set_number("dummy", new_offset, dev_id=dev_id) _LOGGER.info(" + tinker_temp_offset worked as intended") return True except pw_exceptions.PlugwiseError: From 0b1237e073a71de36edc694656efe9e8edd928dd Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 20:14:16 +0200 Subject: [PATCH 10/12] Correct description --- plugwise/smile.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugwise/smile.py b/plugwise/smile.py index 413e85325..6437ba47e 100644 --- a/plugwise/smile.py +++ b/plugwise/smile.py @@ -188,9 +188,7 @@ async def set_number( temperature: float, dev_id: str | None, ) -> None: - """Set the maximum boiler- or DHW-setpoint on the Central Heating boiler, - or the temperature-offset on a Thermostat. - """ + """Set the maximum boiler- or DHW-setpoint on the Central Heating boiler or the temperature-offset on a Thermostat.""" if dev_id is not None: await self.set_offset(dev_id, temperature) return From 93cb8a9d9ee62f146ea407210231181eb583ce2a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 20:17:59 +0200 Subject: [PATCH 11/12] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 89ddfe092..533862cb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Ongoing +- Combine set_temperature_offset() with set_number() - Fix typo in manual_fixtures.py script ## v0.37.3 From 0d2f7b69cdad3e824ce2ceae2af0403c953cfee0 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Sun, 12 May 2024 20:26:06 +0200 Subject: [PATCH 12/12] Fix mypy error --- plugwise/legacy/smile.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugwise/legacy/smile.py b/plugwise/legacy/smile.py index 7f1e64531..d3277ed04 100644 --- a/plugwise/legacy/smile.py +++ b/plugwise/legacy/smile.py @@ -154,7 +154,12 @@ async def set_dhw_mode(self, mode: str) -> None: async def set_gateway_mode(self, mode: str) -> None: """Set-function placeholder for legacy devices.""" - async def set_number(self, key: str, temperature: float, dev_id: str) -> None: + async def set_number( + self, + key: str, + temperature: float, + dev_id: str | None, + ) -> None: """Set-function placeholder for legacy devices.""" async def set_preset(self, _: str, preset: str) -> None: