From ea236d17af77435577d4873445937a103367f0ca Mon Sep 17 00:00:00 2001 From: magnuselden Date: Wed, 6 Nov 2024 13:26:07 +0100 Subject: [PATCH] #137 --- .../peaqhvac/service/hub/hubsensors.py | 20 ++++++++++++---- .../hvac/house_heater/temperature_helper.py | 16 ++++++++----- .../peaqhvac/test/test_temperature_helpers.py | 24 ++++++++++++------- 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/custom_components/peaqhvac/service/hub/hubsensors.py b/custom_components/peaqhvac/service/hub/hubsensors.py index e8e6387..f62e7b7 100644 --- a/custom_components/peaqhvac/service/hub/hubsensors.py +++ b/custom_components/peaqhvac/service/hub/hubsensors.py @@ -66,15 +66,25 @@ def tolerances(self) -> Tuple[float, float]: return self.set_temp_indoors.min_tolerance, self.set_temp_indoors.max_tolerance def get_tempdiff(self) -> float: - _indoors = getattr(self.average_temp_indoors, "value", 0) + _indoors = self._get_indoors() _set_temp = getattr(self.set_temp_indoors, "adjusted_temp", 0) if _indoors == 0 and _set_temp != 0: return 0 return _indoors - _set_temp def get_tempdiff_in_out(self) -> float: - _indoors = min([getattr(self.average_temp_indoors, "median",0), - getattr(self.average_temp_indoors, "value", 0) - ]) + _indoors = self._get_indoors() _outdoors = getattr(self.average_temp_outdoors, "value", 0) - return _indoors - _outdoors \ No newline at end of file + return _indoors - _outdoors + + def _get_indoors(self) -> float: + return min( + [ + getattr(self.average_temp_indoors, "median", 0), + getattr(self.average_temp_indoors, "value", 0) + ] + ) + + def get_min_indoors_diff(self): + min_temp = getattr(self.average_temp_indoors, "min", getattr(self.average_temp_indoors, "value", 0)) + return getattr(self.set_temp_indoors, "adjusted_temp", 0) - min_temp \ No newline at end of file diff --git a/custom_components/peaqhvac/service/hvac/house_heater/temperature_helper.py b/custom_components/peaqhvac/service/hvac/house_heater/temperature_helper.py index caabf82..c0e1a93 100644 --- a/custom_components/peaqhvac/service/hvac/house_heater/temperature_helper.py +++ b/custom_components/peaqhvac/service/hvac/house_heater/temperature_helper.py @@ -5,14 +5,18 @@ _LOGGER = logging.getLogger(__name__) -def get_tempdiff_inverted(current_offset: int, temp_diff: float, determine_tolerance: callable) -> int: +def get_tempdiff_inverted(current_offset: int, temp_diff: float, min_temp_diff: float, determine_tolerance: callable) -> int: diff = temp_diff + 0.00001 - if abs(diff) < 0.2: + min_diff_influence = min_temp_diff * 0.5 + combined_diff = diff + min_diff_influence + + if abs(combined_diff) < 0.2: return 0 - """get the inverted tolerance in this case""" - _tolerance = determine_tolerance(diff * -1, current_offset) - ret = floor(abs(diff) / _tolerance) * -1 - if diff > 0: + + _tolerance = determine_tolerance(combined_diff * -1, current_offset) + ret = floor(abs(combined_diff) / _tolerance) * -1 + + if combined_diff > 0: return ret return ret * -1 diff --git a/custom_components/peaqhvac/test/test_temperature_helpers.py b/custom_components/peaqhvac/test/test_temperature_helpers.py index dd32b2a..3e4256e 100644 --- a/custom_components/peaqhvac/test/test_temperature_helpers.py +++ b/custom_components/peaqhvac/test/test_temperature_helpers.py @@ -14,27 +14,35 @@ def _current_tolerances(determinator: bool, current_offset: int, adjust_toleranc return tolerances[0] if (determinator > 0 or determinator is True) else tolerances[1] +def test_tempdiff_one_room_cold(): + tempdiff = 0.5 + ret1 = get_tempdiff_inverted(0, tempdiff, 0, _current_tolerances) + assert ret1 == -1 + ret2 = get_tempdiff_inverted(0, tempdiff, -1.5, _current_tolerances) + assert ret2 == 1 + + def test_tempdiff_cold(): tempdiff = -0.5 - ret1 = get_tempdiff_inverted(0, tempdiff, _current_tolerances) + ret1 = get_tempdiff_inverted(0, tempdiff,0, _current_tolerances) assert ret1 == 2 - ret2 = get_tempdiff_inverted(-1, tempdiff, _current_tolerances) + ret2 = get_tempdiff_inverted(-1, tempdiff, 0,_current_tolerances) assert ret2 == 2 - ret3 = get_tempdiff_inverted(-2, tempdiff, _current_tolerances) + ret3 = get_tempdiff_inverted(-2, tempdiff, 0,_current_tolerances) assert ret3 == 2 - ret4 = get_tempdiff_inverted(-3, tempdiff, _current_tolerances) + ret4 = get_tempdiff_inverted(-3, tempdiff, 0,_current_tolerances) assert ret4 == 2 def test_tempdiff_hot(): tempdiff = 0.5 - ret1 = get_tempdiff_inverted(0, tempdiff, _current_tolerances) + ret1 = get_tempdiff_inverted(0, tempdiff,0, _current_tolerances) assert ret1 == -1 - ret2 = get_tempdiff_inverted(-1, tempdiff, _current_tolerances) + ret2 = get_tempdiff_inverted(-1, tempdiff, 0,_current_tolerances) assert ret2 == -1 - ret3 = get_tempdiff_inverted(-2, tempdiff, _current_tolerances) + ret3 = get_tempdiff_inverted(-2, tempdiff,0, _current_tolerances) assert ret3 == -1 - ret4 = get_tempdiff_inverted(-3, tempdiff, _current_tolerances) + ret4 = get_tempdiff_inverted(-3, tempdiff,0, _current_tolerances) assert ret4 == -1