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'}) ] )