From 1595ff32a2e561e0ab4eeffc423359ea2564b37d Mon Sep 17 00:00:00 2001 From: Jean-Marc Collin Date: Sun, 31 Mar 2024 20:47:04 +0200 Subject: [PATCH] [#432] - Use valve number max value instead of 100 (#434) Co-authored-by: Jean-Marc Collin --- .../versatile_thermostat/underlyings.py | 2 +- tests/test_valve.py | 28 +++++++------------ 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/custom_components/versatile_thermostat/underlyings.py b/custom_components/versatile_thermostat/underlyings.py index 3b41962..2b3580c 100644 --- a/custom_components/versatile_thermostat/underlyings.py +++ b/custom_components/versatile_thermostat/underlyings.py @@ -861,7 +861,7 @@ class UnderlyingValve(UnderlyingEntity): min_val = valve_state.attributes["min"] max_val = valve_state.attributes["max"] - new_value = round(max(min_val, min(value, max_val))) + new_value = round(max(min_val, min(value / 100 * max_val, max_val))) else: _LOGGER.debug("%s - no min and max attributes on underlying", self) new_value = value diff --git a/tests/test_valve.py b/tests/test_valve.py index cbf1271..96b8d9e 100644 --- a/tests/test_valve.py +++ b/tests/test_valve.py @@ -74,22 +74,12 @@ async def test_over_valve_full_start( tz = get_tz(hass) # pylint: disable=invalid-name now: datetime = datetime.now(tz=tz) + # 1. create the entity with patch( "custom_components.versatile_thermostat.base_thermostat.BaseThermostat.send_event" ) as mock_send_event: - entry.add_to_hass(hass) - await hass.config_entries.async_setup(entry.entry_id) - assert entry.state is ConfigEntryState.LOADED - def find_my_entity(entity_id) -> ClimateEntity: - """Find my new entity""" - component: EntityComponent[ClimateEntity] = hass.data[CLIMATE_DOMAIN] - for entity in component.entities: - if entity.entity_id == entity_id: - return entity - - # The name is in the CONF and not the title of the entry - entity: ThermostatOverValve = find_my_entity("climate.theovervalvemockname") + entity = await create_thermostat(hass, entry, "climate.theovervalvemockname") assert entity assert isinstance(entity, ThermostatOverValve) @@ -130,7 +120,7 @@ async def test_over_valve_full_start( ] ) - # Set the HVACMode to HEAT, with manual preset and target_temp to 18 before receiving temperature + # 2. Set the HVACMode to HEAT, with manual preset and target_temp to 18 before receiving temperature with patch( "custom_components.versatile_thermostat.base_thermostat.BaseThermostat.send_event" ) as mock_send_event: @@ -158,7 +148,7 @@ async def test_over_valve_full_start( # Nothing have changed cause we don't have room and external temperature assert mock_send_event.call_count == 1 - # Set temperature and external temperature + # 3. Set temperature and external temperature with patch( "custom_components.versatile_thermostat.base_thermostat.BaseThermostat.send_event" ) as mock_send_event, patch( @@ -220,7 +210,7 @@ async def test_over_valve_full_start( assert entity.is_device_active is True assert entity.hvac_action == HVACAction.HEATING - # Change internal temperature + # 4. Change internal temperature expected_state = State( entity_id="number.mock_valve", state="0", attributes={"min": 10, "max": 50} ) @@ -267,7 +257,9 @@ async def test_over_valve_full_start( call.async_call( domain="number", service="set_value", - service_data={"value": 50}, # the min allowed value + service_data={ + "value": 34 + }, # 34 is 50 x open_percent (69%) and is the max allowed value target={"entity_id": "number.mock_valve"}, ), ] @@ -287,9 +279,9 @@ async def test_over_valve_full_start( assert entity.is_device_active is True assert entity.hvac_action == HVACAction.HEATING - # Test window open/close (with a normal min/max so that is_device_active is False when open_percent is 0) + # 5. Test window open/close (with a normal min/max so that is_device_active is False when open_percent is 0) expected_state = State( - entity_id="number.mock_valve", state="0", attributes={"min": 0, "max": 99} + entity_id="number.mock_valve", state="0", attributes={"min": 0, "max": 255} ) with patch(