mirror of
https://github.com/home-assistant/core.git
synced 2025-07-30 16:57:19 +00:00
Osoenergy holiday mode services (#149430)
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
This commit is contained in:
parent
d088fccb88
commit
386f709fd3
@ -164,7 +164,9 @@ class OSOEnergyWaterHeater(
|
|||||||
|
|
||||||
_attr_name = None
|
_attr_name = None
|
||||||
_attr_supported_features = (
|
_attr_supported_features = (
|
||||||
WaterHeaterEntityFeature.TARGET_TEMPERATURE | WaterHeaterEntityFeature.ON_OFF
|
WaterHeaterEntityFeature.TARGET_TEMPERATURE
|
||||||
|
| WaterHeaterEntityFeature.AWAY_MODE
|
||||||
|
| WaterHeaterEntityFeature.ON_OFF
|
||||||
)
|
)
|
||||||
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
_attr_temperature_unit = UnitOfTemperature.CELSIUS
|
||||||
|
|
||||||
@ -203,6 +205,11 @@ class OSOEnergyWaterHeater(
|
|||||||
"""Return the current temperature of the heater."""
|
"""Return the current temperature of the heater."""
|
||||||
return self.entity_data.current_temperature
|
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
|
@property
|
||||||
def target_temperature(self) -> float:
|
def target_temperature(self) -> float:
|
||||||
"""Return the temperature we try to reach."""
|
"""Return the temperature we try to reach."""
|
||||||
@ -228,6 +235,14 @@ class OSOEnergyWaterHeater(
|
|||||||
"""Return the maximum temperature."""
|
"""Return the maximum temperature."""
|
||||||
return self.entity_data.max_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:
|
async def async_turn_on(self, **kwargs) -> None:
|
||||||
"""Turn on hotwater."""
|
"""Turn on hotwater."""
|
||||||
await self.osoenergy.hotwater.turn_on(self.entity_data, True)
|
await self.osoenergy.hotwater.turn_on(self.entity_data, True)
|
||||||
|
@ -74,6 +74,8 @@ async def mock_osoenergy_client(mock_water_heater) -> Generator[AsyncMock]:
|
|||||||
mock_client().session = mock_session
|
mock_client().session = mock_session
|
||||||
|
|
||||||
mock_hotwater = MagicMock()
|
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.get_water_heater = AsyncMock(return_value=mock_water_heater)
|
||||||
mock_hotwater.set_profile = AsyncMock(return_value=True)
|
mock_hotwater.set_profile = AsyncMock(return_value=True)
|
||||||
mock_hotwater.set_v40_min = AsyncMock(return_value=True)
|
mock_hotwater.set_v40_min = AsyncMock(return_value=True)
|
||||||
|
@ -16,5 +16,6 @@
|
|||||||
"profile": [
|
"profile": [
|
||||||
10, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
|
10, 60, 60, 60, 60, 60, 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
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
'platform': 'osoenergy',
|
'platform': 'osoenergy',
|
||||||
'previous_unique_id': None,
|
'previous_unique_id': None,
|
||||||
'suggested_object_id': None,
|
'suggested_object_id': None,
|
||||||
'supported_features': <WaterHeaterEntityFeature: 9>,
|
'supported_features': <WaterHeaterEntityFeature: 13>,
|
||||||
'translation_key': None,
|
'translation_key': None,
|
||||||
'unique_id': 'osoenergy_water_heater',
|
'unique_id': 'osoenergy_water_heater',
|
||||||
'unit_of_measurement': None,
|
'unit_of_measurement': None,
|
||||||
@ -40,11 +40,12 @@
|
|||||||
# name: test_water_heater[water_heater.test_device-state]
|
# name: test_water_heater[water_heater.test_device-state]
|
||||||
StateSnapshot({
|
StateSnapshot({
|
||||||
'attributes': ReadOnlyDict({
|
'attributes': ReadOnlyDict({
|
||||||
|
'away_mode': 'off',
|
||||||
'current_temperature': 60,
|
'current_temperature': 60,
|
||||||
'friendly_name': 'TEST DEVICE',
|
'friendly_name': 'TEST DEVICE',
|
||||||
'max_temp': 75,
|
'max_temp': 75,
|
||||||
'min_temp': 10,
|
'min_temp': 10,
|
||||||
'supported_features': <WaterHeaterEntityFeature: 9>,
|
'supported_features': <WaterHeaterEntityFeature: 13>,
|
||||||
'target_temp_high': 63,
|
'target_temp_high': 63,
|
||||||
'target_temp_low': 57,
|
'target_temp_low': 57,
|
||||||
'temperature': 60,
|
'temperature': 60,
|
||||||
|
@ -14,7 +14,9 @@ from homeassistant.components.osoenergy.water_heater import (
|
|||||||
SERVICE_SET_V40MIN,
|
SERVICE_SET_V40MIN,
|
||||||
)
|
)
|
||||||
from homeassistant.components.water_heater import (
|
from homeassistant.components.water_heater import (
|
||||||
|
ATTR_AWAY_MODE,
|
||||||
DOMAIN as WATER_HEATER_DOMAIN,
|
DOMAIN as WATER_HEATER_DOMAIN,
|
||||||
|
SERVICE_SET_AWAY_MODE,
|
||||||
SERVICE_SET_TEMPERATURE,
|
SERVICE_SET_TEMPERATURE,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
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)
|
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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user