From 0e75f2d29416c84a636742658afe90acf6e7c27a Mon Sep 17 00:00:00 2001 From: Christian Lackas Date: Tue, 3 Feb 2026 09:45:01 +0100 Subject: [PATCH] Add setHeatingSchedule and getHeatingScheduleModes methods Adds ability to set heating circuit schedules via the API, complementing the existing getHeatingSchedule() method. Fixes #539 --- PyViCare/PyViCareHeatingDevice.py | 10 ++++++++++ tests/test_Vitocal300G.py | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/PyViCare/PyViCareHeatingDevice.py b/PyViCare/PyViCareHeatingDevice.py index de31df05..660ac5ae 100644 --- a/PyViCare/PyViCareHeatingDevice.py +++ b/PyViCare/PyViCareHeatingDevice.py @@ -699,6 +699,16 @@ def getHeatingSchedule(self): "sun": properties["entries"]["value"]["sun"] } + @handleAPICommandErrors + def setHeatingSchedule(self, schedule: dict) -> None: + self.service.setProperty(f"heating.circuits.{self.circuit}.heating.schedule", + "setSchedule", {'newSchedule': schedule}) + + @handleNotSupported + def getHeatingScheduleModes(self) -> list: # type: ignore[type-arg] + return list(self.getProperty(f"heating.circuits.{self.circuit}.heating.schedule" + )["commands"]["setSchedule"]["params"]["newSchedule"]["constraints"]["modes"]) + # Calculates target supply temperature based on data from Viessmann # See: https://www.viessmann-community.com/t5/Gas/Mathematische-Formel-fuer-Vorlauftemperatur-aus-den-vier/m-p/68890#M27556 def getTargetSupplyTemperature(self) -> Optional[float]: diff --git a/tests/test_Vitocal300G.py b/tests/test_Vitocal300G.py index e603e6a5..e7277d97 100644 --- a/tests/test_Vitocal300G.py +++ b/tests/test_Vitocal300G.py @@ -262,3 +262,8 @@ def test_coolingCircuit_getType(self): def test_coolingCircuit_getReverseActive(self): self.assertEqual( self.device.coolingCircuits[0].getReverseActive(), False) + + def test_getHeatingScheduleModes(self): + expected_modes = {'reduced', 'normal', 'fixed'} + self.assertSetEqual( + set(self.device.circuits[0].getHeatingScheduleModes()), expected_modes)