Osoenergy holiday mode services (#149430)

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
This commit is contained in:
osohotwateriot 2025-07-28 17:00:22 +03:00 committed by GitHub
parent d088fccb88
commit 386f709fd3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 59 additions and 4 deletions

View File

@ -164,7 +164,9 @@ class OSOEnergyWaterHeater(
_attr_name = None
_attr_supported_features = (
WaterHeaterEntityFeature.TARGET_TEMPERATURE | WaterHeaterEntityFeature.ON_OFF
WaterHeaterEntityFeature.TARGET_TEMPERATURE
| WaterHeaterEntityFeature.AWAY_MODE
| WaterHeaterEntityFeature.ON_OFF
)
_attr_temperature_unit = UnitOfTemperature.CELSIUS
@ -203,6 +205,11 @@ class OSOEnergyWaterHeater(
"""Return the current temperature of the heater."""
return self.entity_data.current_temperature
@property
def is_away_mode_on(self) -> bool:
"""Return if the heater is in away mode."""
return self.entity_data.isInPowerSave
@property
def target_temperature(self) -> float:
"""Return the temperature we try to reach."""
@ -228,6 +235,14 @@ class OSOEnergyWaterHeater(
"""Return the maximum temperature."""
return self.entity_data.max_temperature
async def async_turn_away_mode_on(self) -> None:
"""Turn on away mode."""
await self.osoenergy.hotwater.enable_holiday_mode(self.entity_data)
async def async_turn_away_mode_off(self) -> None:
"""Turn off away mode."""
await self.osoenergy.hotwater.disable_holiday_mode(self.entity_data)
async def async_turn_on(self, **kwargs) -> None:
"""Turn on hotwater."""
await self.osoenergy.hotwater.turn_on(self.entity_data, True)

View File

@ -74,6 +74,8 @@ async def mock_osoenergy_client(mock_water_heater) -> Generator[AsyncMock]:
mock_client().session = mock_session
mock_hotwater = MagicMock()
mock_hotwater.enable_holiday_mode = AsyncMock(return_value=True)
mock_hotwater.disable_holiday_mode = AsyncMock(return_value=True)
mock_hotwater.get_water_heater = AsyncMock(return_value=mock_water_heater)
mock_hotwater.set_profile = AsyncMock(return_value=True)
mock_hotwater.set_v40_min = AsyncMock(return_value=True)

View File

@ -16,5 +16,6 @@
"profile": [
10, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
60, 60, 60, 60, 60
]
],
"isInPowerSave": false
}

View File

@ -31,7 +31,7 @@
'platform': 'osoenergy',
'previous_unique_id': None,
'suggested_object_id': None,
'supported_features': <WaterHeaterEntityFeature: 9>,
'supported_features': <WaterHeaterEntityFeature: 13>,
'translation_key': None,
'unique_id': 'osoenergy_water_heater',
'unit_of_measurement': None,
@ -40,11 +40,12 @@
# name: test_water_heater[water_heater.test_device-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'away_mode': 'off',
'current_temperature': 60,
'friendly_name': 'TEST DEVICE',
'max_temp': 75,
'min_temp': 10,
'supported_features': <WaterHeaterEntityFeature: 9>,
'supported_features': <WaterHeaterEntityFeature: 13>,
'target_temp_high': 63,
'target_temp_low': 57,
'temperature': 60,

View File

@ -14,7 +14,9 @@ from homeassistant.components.osoenergy.water_heater import (
SERVICE_SET_V40MIN,
)
from homeassistant.components.water_heater import (
ATTR_AWAY_MODE,
DOMAIN as WATER_HEATER_DOMAIN,
SERVICE_SET_AWAY_MODE,
SERVICE_SET_TEMPERATURE,
)
from homeassistant.config_entries import ConfigEntry
@ -274,3 +276,37 @@ async def test_oso_turn_off(
)
mock_osoenergy_client().hotwater.turn_off.assert_called_once_with(ANY, False)
async def test_turn_away_mode_on(
hass: HomeAssistant,
mock_osoenergy_client: MagicMock,
mock_config_entry: ConfigEntry,
) -> None:
"""Test turning the heater away mode on."""
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.services.async_call(
WATER_HEATER_DOMAIN,
SERVICE_SET_AWAY_MODE,
{ATTR_ENTITY_ID: "water_heater.test_device", ATTR_AWAY_MODE: "on"},
blocking=True,
)
mock_osoenergy_client().hotwater.enable_holiday_mode.assert_called_once_with(ANY)
async def test_turn_away_mode_off(
hass: HomeAssistant,
mock_osoenergy_client: MagicMock,
mock_config_entry: ConfigEntry,
) -> None:
"""Test turning the heater away mode off."""
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.services.async_call(
WATER_HEATER_DOMAIN,
SERVICE_SET_AWAY_MODE,
{ATTR_ENTITY_ID: "water_heater.test_device", ATTR_AWAY_MODE: "off"},
blocking=True,
)
mock_osoenergy_client().hotwater.disable_holiday_mode.assert_called_once_with(ANY)