Add required_features to WaterHeater entity service registrations (#141873)

This commit is contained in:
David Bonnes 2025-06-03 11:51:46 +01:00 committed by GitHub
parent 7f8b782e95
commit c254548a64
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 29 additions and 13 deletions

View File

@ -6,6 +6,7 @@ from homeassistant.components.water_heater import (
STATE_ECO, STATE_ECO,
STATE_PERFORMANCE, STATE_PERFORMANCE,
WaterHeaterEntity, WaterHeaterEntity,
WaterHeaterEntityFeature,
) )
from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, Platform, UnitOfTemperature from homeassistant.const import ATTR_TEMPERATURE, STATE_OFF, Platform, UnitOfTemperature
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
@ -32,6 +33,7 @@ class AtagWaterHeater(AtagEntity, WaterHeaterEntity):
"""Representation of an ATAG water heater.""" """Representation of an ATAG water heater."""
_attr_operation_list = OPERATION_LIST _attr_operation_list = OPERATION_LIST
_attr_supported_features = WaterHeaterEntityFeature.TARGET_TEMPERATURE
_attr_temperature_unit = UnitOfTemperature.CELSIUS _attr_temperature_unit = UnitOfTemperature.CELSIUS
@property @property

View File

@ -71,6 +71,11 @@ class EvoDHW(EvoChild, WaterHeaterEntity):
_attr_name = "DHW controller" _attr_name = "DHW controller"
_attr_icon = "mdi:thermometer-lines" _attr_icon = "mdi:thermometer-lines"
_attr_operation_list = list(HA_STATE_TO_EVO) _attr_operation_list = list(HA_STATE_TO_EVO)
_attr_supported_features = (
WaterHeaterEntityFeature.AWAY_MODE
| WaterHeaterEntityFeature.ON_OFF
| WaterHeaterEntityFeature.OPERATION_MODE
)
_attr_temperature_unit = UnitOfTemperature.CELSIUS _attr_temperature_unit = UnitOfTemperature.CELSIUS
_evo_device: evo.HotWater _evo_device: evo.HotWater
@ -91,9 +96,6 @@ class EvoDHW(EvoChild, WaterHeaterEntity):
self._attr_precision = ( self._attr_precision = (
PRECISION_TENTHS if coordinator.client_v1 else PRECISION_WHOLE PRECISION_TENTHS if coordinator.client_v1 else PRECISION_WHOLE
) )
self._attr_supported_features = (
WaterHeaterEntityFeature.AWAY_MODE | WaterHeaterEntityFeature.OPERATION_MODE
)
@property @property
def current_operation(self) -> str | None: def current_operation(self) -> str | None:

View File

@ -73,7 +73,9 @@ async def async_setup_entry(
class HiveWaterHeater(HiveEntity, WaterHeaterEntity): class HiveWaterHeater(HiveEntity, WaterHeaterEntity):
"""Hive Water Heater Device.""" """Hive Water Heater Device."""
_attr_supported_features = WaterHeaterEntityFeature.OPERATION_MODE _attr_supported_features = (
WaterHeaterEntityFeature.ON_OFF | WaterHeaterEntityFeature.OPERATION_MODE
)
_attr_temperature_unit = UnitOfTemperature.CELSIUS _attr_temperature_unit = UnitOfTemperature.CELSIUS
_attr_operation_list = SUPPORT_WATER_HEATER _attr_operation_list = SUPPORT_WATER_HEATER

View File

@ -112,15 +112,22 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
SERVICE_TURN_OFF, None, "async_turn_off", [WaterHeaterEntityFeature.ON_OFF] SERVICE_TURN_OFF, None, "async_turn_off", [WaterHeaterEntityFeature.ON_OFF]
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_SET_AWAY_MODE, SET_AWAY_MODE_SCHEMA, async_service_away_mode SERVICE_SET_AWAY_MODE,
SET_AWAY_MODE_SCHEMA,
async_service_away_mode,
[WaterHeaterEntityFeature.AWAY_MODE],
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_SET_TEMPERATURE, SET_TEMPERATURE_SCHEMA, async_service_temperature_set SERVICE_SET_TEMPERATURE,
SET_TEMPERATURE_SCHEMA,
async_service_temperature_set,
[WaterHeaterEntityFeature.TARGET_TEMPERATURE],
) )
component.async_register_entity_service( component.async_register_entity_service(
SERVICE_SET_OPERATION_MODE, SERVICE_SET_OPERATION_MODE,
SET_OPERATION_MODE_SCHEMA, SET_OPERATION_MODE_SCHEMA,
"async_handle_set_operation_mode", "async_handle_set_operation_mode",
[WaterHeaterEntityFeature.OPERATION_MODE],
) )
return True return True

View File

@ -53,7 +53,7 @@
'temperature': 23.0, 'temperature': 23.0,
}), }),
}), }),
'supported_features': <WaterHeaterEntityFeature: 6>, 'supported_features': <WaterHeaterEntityFeature: 14>,
'target_temp_high': None, 'target_temp_high': None,
'target_temp_low': None, 'target_temp_low': None,
'temperature': None, 'temperature': None,
@ -100,7 +100,7 @@
'temperature': 23.0, 'temperature': 23.0,
}), }),
}), }),
'supported_features': <WaterHeaterEntityFeature: 6>, 'supported_features': <WaterHeaterEntityFeature: 14>,
'target_temp_high': None, 'target_temp_high': None,
'target_temp_low': None, 'target_temp_low': None,
'temperature': None, 'temperature': None,

View File

@ -25,7 +25,6 @@ from homeassistant.const import (
Platform, Platform,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError
from .conftest import setup_evohome from .conftest import setup_evohome
from .const import TEST_INSTALLS_WITH_DHW from .const import TEST_INSTALLS_WITH_DHW
@ -160,8 +159,8 @@ async def test_set_away_mode(hass: HomeAssistant, evohome: EvohomeClient) -> Non
async def test_turn_off(hass: HomeAssistant, evohome: EvohomeClient) -> None: async def test_turn_off(hass: HomeAssistant, evohome: EvohomeClient) -> None:
"""Test SERVICE_TURN_OFF of an evohome DHW zone.""" """Test SERVICE_TURN_OFF of an evohome DHW zone."""
# Entity water_heater.xxx does not support this service # turn_off
with pytest.raises(HomeAssistantError): with patch("evohomeasync2.hotwater.HotWater.off") as mock_fcn:
await hass.services.async_call( await hass.services.async_call(
Platform.WATER_HEATER, Platform.WATER_HEATER,
SERVICE_TURN_OFF, SERVICE_TURN_OFF,
@ -171,13 +170,15 @@ async def test_turn_off(hass: HomeAssistant, evohome: EvohomeClient) -> None:
blocking=True, blocking=True,
) )
mock_fcn.assert_awaited_once_with()
@pytest.mark.parametrize("install", TEST_INSTALLS_WITH_DHW) @pytest.mark.parametrize("install", TEST_INSTALLS_WITH_DHW)
async def test_turn_on(hass: HomeAssistant, evohome: EvohomeClient) -> None: async def test_turn_on(hass: HomeAssistant, evohome: EvohomeClient) -> None:
"""Test SERVICE_TURN_ON of an evohome DHW zone.""" """Test SERVICE_TURN_ON of an evohome DHW zone."""
# Entity water_heater.xxx does not support this service # turn_on
with pytest.raises(HomeAssistantError): with patch("evohomeasync2.hotwater.HotWater.on") as mock_fcn:
await hass.services.async_call( await hass.services.async_call(
Platform.WATER_HEATER, Platform.WATER_HEATER,
SERVICE_TURN_ON, SERVICE_TURN_ON,
@ -186,3 +187,5 @@ async def test_turn_on(hass: HomeAssistant, evohome: EvohomeClient) -> None:
}, },
blocking=True, blocking=True,
) )
mock_fcn.assert_awaited_once_with()