From 68e05bef31c620272f3360ca1b3cac45a390a057 Mon Sep 17 00:00:00 2001 From: zepala <46625678+zepala@users.noreply.github.com> Date: Sat, 4 Jan 2025 08:33:04 +0100 Subject: [PATCH] Change percent_open calculation method (#772) * Change percent_open calculation method Modified 'percent_open' calculation method : - Before : If < min_opening_degree then =min_opening_degree - Now : Each % step is calculated (100 - min_opening_degree)/100 * Code aesthetics * Code aesthetics * Updated test_overclimate_valve.py --- .../versatile_thermostat/underlyings.py | 13 ++++++++++--- tests/test_overclimate_valve.py | 8 ++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/custom_components/versatile_thermostat/underlyings.py b/custom_components/versatile_thermostat/underlyings.py index a79a918..47f8bf5 100644 --- a/custom_components/versatile_thermostat/underlyings.py +++ b/custom_components/versatile_thermostat/underlyings.py @@ -1080,10 +1080,17 @@ class UnderlyingValveRegulation(UnderlyingValve): ) return - # Send opening_degree - if 0 < self._percent_open < self._min_opening_degree: - self._percent_open = self._min_opening_degree + # Caclulate percent_open + if self._percent_open >= 1: + self._percent_open = round( + self._min_opening_degree + + (self._percent_open + * (100 - self._min_opening_degree) / 100) + ) + else: + self._percent_open = 0 + # Send opening_degree await super().send_percent_open() # Send closing_degree if set diff --git a/tests/test_overclimate_valve.py b/tests/test_overclimate_valve.py index cbfcbd9..a29cd4c 100644 --- a/tests/test_overclimate_valve.py +++ b/tests/test_overclimate_valve.py @@ -627,11 +627,11 @@ async def test_over_climate_valve_multi_min_opening_degrees( assert mock_service_call.call_count == 6 mock_service_call.assert_has_calls([ # min is 60 - call(domain='number', service='set_value', service_data={'value': 60}, target={'entity_id': 'number.mock_opening_degree1'}), - call(domain='number', service='set_value', service_data={'value': 40}, target={'entity_id': 'number.mock_closing_degree1'}), + call(domain='number', service='set_value', service_data={'value': 68}, target={'entity_id': 'number.mock_opening_degree1'}), + call(domain='number', service='set_value', service_data={'value': 32}, target={'entity_id': 'number.mock_closing_degree1'}), call(domain='number', service='set_value', service_data={'value': 3.0}, target={'entity_id': 'number.mock_offset_calibration1'}), - call(domain='number', service='set_value', service_data={'value': 70}, target={'entity_id': 'number.mock_opening_degree2'}), - call(domain='number', service='set_value', service_data={'value': 30}, target={'entity_id': 'number.mock_closing_degree2'}), + call(domain='number', service='set_value', service_data={'value': 76}, target={'entity_id': 'number.mock_opening_degree2'}), + call(domain='number', service='set_value', service_data={'value': 24}, target={'entity_id': 'number.mock_closing_degree2'}), call(domain='number', service='set_value', service_data={'value': 12}, target={'entity_id': 'number.mock_offset_calibration2'}) ] )