Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 50 additions & 15 deletions PyViCare/PyViCareHeatingDevice.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from contextlib import suppress
from typing import Any

from deprecated import deprecated

from PyViCare.PyViCareDevice import Device
from PyViCare.PyViCareHeatCurveCalculation import (
heat_curve_formular_variant1,
Expand Down Expand Up @@ -440,6 +442,26 @@ def setMode(self, mode):
f"heating.circuits.{self.circuit}.operating.modes.active", "setMode", {'mode': mode})
return r

@handleNotSupported
def getProgramTemperature(self, program: str):
feature = self.getProperty(f"heating.circuits.{self.circuit}.operating.programs.{program}")
return feature["properties"]["temperature"]["value"]

@handleNotSupported
def getReducedTemperature(self):
program = "reducedHeating" if "reducedHeating" in self.getPrograms() else "reduced"
return self.getProgramTemperature(program)

@handleNotSupported
def getComfortTemperature(self):
program = "comfortHeating" if "comfortHeating" in self.getPrograms() else "comfort"
return self.getProgramTemperature(program)

@handleNotSupported
def getNormalTemperature(self):
program = "normalHeating" if "normalHeating" in self.getPrograms() else "normal"
return self.getProgramTemperature(program)

def setProgramTemperature(self, program: str, temperature: float):
# Works for normal, reduced, comfort
# active has no action
Expand All @@ -463,13 +485,16 @@ def setProgramTemperature(self, program: str, temperature: float):
"setTemperature", {'targetTemperature': float(temperature)})

def setReducedTemperature(self, temperature):
return self.setProgramTemperature("reduced", temperature)
program = "reducedHeating" if "reducedHeating" in self.getPrograms() else "reduced"
return self.setProgramTemperature(program, temperature)

def setComfortTemperature(self, temperature):
return self.setProgramTemperature("comfort", temperature)
program = "comfortHeating" if "comfortHeating" in self.getPrograms() else "comfort"
return self.setProgramTemperature(program, temperature)

def setNormalTemperature(self, temperature):
return self.setProgramTemperature("normal", temperature)
program = "normalHeating" if "normalHeating" in self.getPrograms() else "normal"
return self.setProgramTemperature(program, temperature)

@handleNotSupported
def getActive(self):
Expand All @@ -483,6 +508,20 @@ def getName(self):
def getType(self):
return self.getProperty(f"heating.circuits.{self.circuit}")["properties"]["type"]["value"]

@handleNotSupported
def getActiveProgramTemperature(self):
active_program = self.getActiveProgram()
try:
feature = self.getProperty(f"heating.circuits.{self.circuit}.operating.programs.{active_program}")
return feature["properties"]["temperature"]["value"]
except (PyViCareNotSupportedFeatureError, KeyError):
match active_program:
case "standby":
return None
case "holiday":
return self.getReducedTemperature()
raise

@handleNotSupported
def getActiveProgramMinTemperature(self):
active_program = self.getActiveProgram()
Expand Down Expand Up @@ -542,7 +581,8 @@ def activateProgram(self, program):
{})

def activateComfort(self):
return self.activateProgram("comfort")
program = "comfortHeating" if "comfortHeating" in self.getPrograms() else "comfort"
return self.activateProgram(program)

def deactivateProgram(self, program):
""" Deactivate a program
Expand All @@ -560,7 +600,8 @@ def deactivateProgram(self, program):
"deactivate", {})

def deactivateComfort(self):
return self.deactivateProgram("comfort")
program = "comfortHeating" if "comfortHeating" in self.getPrograms() else "comfort"
return self.deactivateProgram(program)

@handleNotSupported
def getSupplyTemperature(self):
Expand Down Expand Up @@ -659,19 +700,13 @@ def getPrograms(self):

return available_programs

@handleNotSupported
@deprecated(reason="renamed, use getProgramTemperature", version="2.64.0")
def getDesiredTemperatureForProgram(self, program):
return \
self.getProperty(f"heating.circuits.{self.circuit}.operating.programs.{program}")["properties"][
"temperature"]["value"]
return self.getProgramTemperature(program)

@handleNotSupported
@deprecated(reason="renamed, use getActiveProgramTemperature", version="2.64.0")
def getCurrentDesiredTemperature(self):
active_program = self.getActiveProgram()
if active_program in ['standby']:
return None
return self.getProperty(f"heating.circuits.{self.circuit}.operating.programs.{active_program}")[
"properties"]["temperature"]["value"]
return self.getActiveProgramTemperature()

@handleNotSupported
def getFrostProtectionActive(self):
Expand Down
7 changes: 3 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,11 @@ print(circuit.getHeatingCurveSlope())
print(circuit.getActiveProgram())
print(circuit.getPrograms())

print(circuit.getCurrentDesiredTemperature())
print(circuit.getDesiredTemperatureForProgram("comfort"))
print(circuit.getActiveProgramTemperature())
print(circuit.getProgramTemperature("comfort"))
print(circuit.getActiveMode())

print(circuit.getDesiredTemperatureForProgram("comfort"))
print(circuit.setProgramTemperature("comfort",21))
print(circuit.setProgramTemperature("comfort", 21))
print(circuit.activateProgram("comfort"))
print(circuit.deactivateComfort())

Expand Down