mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Add boost preset to AVM Fritz!SmartHome climate entities (#141802)
* add boost preset to climate entities * add set boost preset test
This commit is contained in:
parent
629c0087f4
commit
6fe158836e
@ -6,6 +6,7 @@ from typing import Any
|
|||||||
|
|
||||||
from homeassistant.components.climate import (
|
from homeassistant.components.climate import (
|
||||||
ATTR_HVAC_MODE,
|
ATTR_HVAC_MODE,
|
||||||
|
PRESET_BOOST,
|
||||||
PRESET_COMFORT,
|
PRESET_COMFORT,
|
||||||
PRESET_ECO,
|
PRESET_ECO,
|
||||||
ClimateEntity,
|
ClimateEntity,
|
||||||
@ -38,7 +39,7 @@ from .sensor import value_scheduled_preset
|
|||||||
HVAC_MODES = [HVACMode.HEAT, HVACMode.OFF]
|
HVAC_MODES = [HVACMode.HEAT, HVACMode.OFF]
|
||||||
PRESET_HOLIDAY = "holiday"
|
PRESET_HOLIDAY = "holiday"
|
||||||
PRESET_SUMMER = "summer"
|
PRESET_SUMMER = "summer"
|
||||||
PRESET_MODES = [PRESET_ECO, PRESET_COMFORT]
|
PRESET_MODES = [PRESET_ECO, PRESET_COMFORT, PRESET_BOOST]
|
||||||
SUPPORTED_FEATURES = (
|
SUPPORTED_FEATURES = (
|
||||||
ClimateEntityFeature.TARGET_TEMPERATURE
|
ClimateEntityFeature.TARGET_TEMPERATURE
|
||||||
| ClimateEntityFeature.PRESET_MODE
|
| ClimateEntityFeature.PRESET_MODE
|
||||||
@ -194,6 +195,8 @@ class FritzboxThermostat(FritzBoxDeviceEntity, ClimateEntity):
|
|||||||
return PRESET_HOLIDAY
|
return PRESET_HOLIDAY
|
||||||
if self.data.summer_active:
|
if self.data.summer_active:
|
||||||
return PRESET_SUMMER
|
return PRESET_SUMMER
|
||||||
|
if self.data.target_temperature == ON_API_TEMPERATURE:
|
||||||
|
return PRESET_BOOST
|
||||||
if self.data.target_temperature == self.data.comfort_temperature:
|
if self.data.target_temperature == self.data.comfort_temperature:
|
||||||
return PRESET_COMFORT
|
return PRESET_COMFORT
|
||||||
if self.data.target_temperature == self.data.eco_temperature:
|
if self.data.target_temperature == self.data.eco_temperature:
|
||||||
@ -211,6 +214,8 @@ class FritzboxThermostat(FritzBoxDeviceEntity, ClimateEntity):
|
|||||||
await self.async_set_temperature(temperature=self.data.comfort_temperature)
|
await self.async_set_temperature(temperature=self.data.comfort_temperature)
|
||||||
elif preset_mode == PRESET_ECO:
|
elif preset_mode == PRESET_ECO:
|
||||||
await self.async_set_temperature(temperature=self.data.eco_temperature)
|
await self.async_set_temperature(temperature=self.data.eco_temperature)
|
||||||
|
elif preset_mode == PRESET_BOOST:
|
||||||
|
await self.async_set_temperature(temperature=ON_REPORT_SET_TEMPERATURE)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def extra_state_attributes(self) -> ClimateExtraAttributes:
|
def extra_state_attributes(self) -> ClimateExtraAttributes:
|
||||||
|
@ -16,6 +16,7 @@ from homeassistant.components.climate import (
|
|||||||
ATTR_PRESET_MODE,
|
ATTR_PRESET_MODE,
|
||||||
ATTR_PRESET_MODES,
|
ATTR_PRESET_MODES,
|
||||||
DOMAIN as CLIMATE_DOMAIN,
|
DOMAIN as CLIMATE_DOMAIN,
|
||||||
|
PRESET_BOOST,
|
||||||
PRESET_COMFORT,
|
PRESET_COMFORT,
|
||||||
PRESET_ECO,
|
PRESET_ECO,
|
||||||
SERVICE_SET_HVAC_MODE,
|
SERVICE_SET_HVAC_MODE,
|
||||||
@ -80,7 +81,11 @@ async def test_setup(hass: HomeAssistant, fritz: Mock) -> None:
|
|||||||
assert state.attributes[ATTR_MAX_TEMP] == 28
|
assert state.attributes[ATTR_MAX_TEMP] == 28
|
||||||
assert state.attributes[ATTR_MIN_TEMP] == 8
|
assert state.attributes[ATTR_MIN_TEMP] == 8
|
||||||
assert state.attributes[ATTR_PRESET_MODE] is None
|
assert state.attributes[ATTR_PRESET_MODE] is None
|
||||||
assert state.attributes[ATTR_PRESET_MODES] == [PRESET_ECO, PRESET_COMFORT]
|
assert state.attributes[ATTR_PRESET_MODES] == [
|
||||||
|
PRESET_ECO,
|
||||||
|
PRESET_COMFORT,
|
||||||
|
PRESET_BOOST,
|
||||||
|
]
|
||||||
assert state.attributes[ATTR_STATE_BATTERY_LOW] is True
|
assert state.attributes[ATTR_STATE_BATTERY_LOW] is True
|
||||||
assert state.attributes[ATTR_STATE_HOLIDAY_MODE] is False
|
assert state.attributes[ATTR_STATE_HOLIDAY_MODE] is False
|
||||||
assert state.attributes[ATTR_STATE_SUMMER_MODE] is False
|
assert state.attributes[ATTR_STATE_SUMMER_MODE] is False
|
||||||
@ -434,11 +439,31 @@ async def test_set_preset_mode_eco(
|
|||||||
assert device.set_target_temperature.call_args_list == expected_call_args
|
assert device.set_target_temperature.call_args_list == expected_call_args
|
||||||
|
|
||||||
|
|
||||||
|
async def test_set_preset_mode_boost(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
fritz: Mock,
|
||||||
|
) -> None:
|
||||||
|
"""Test setting preset mode."""
|
||||||
|
device = FritzDeviceClimateMock()
|
||||||
|
assert await setup_config_entry(
|
||||||
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.services.async_call(
|
||||||
|
CLIMATE_DOMAIN,
|
||||||
|
SERVICE_SET_PRESET_MODE,
|
||||||
|
{ATTR_ENTITY_ID: ENTITY_ID, ATTR_PRESET_MODE: PRESET_BOOST},
|
||||||
|
True,
|
||||||
|
)
|
||||||
|
assert device.set_target_temperature.call_count == 1
|
||||||
|
assert device.set_target_temperature.call_args_list == [call(30, True)]
|
||||||
|
|
||||||
|
|
||||||
async def test_preset_mode_update(hass: HomeAssistant, fritz: Mock) -> None:
|
async def test_preset_mode_update(hass: HomeAssistant, fritz: Mock) -> None:
|
||||||
"""Test preset mode."""
|
"""Test preset mode."""
|
||||||
device = FritzDeviceClimateMock()
|
device = FritzDeviceClimateMock()
|
||||||
device.comfort_temperature = 98
|
device.comfort_temperature = 23
|
||||||
device.eco_temperature = 99
|
device.eco_temperature = 20
|
||||||
assert await setup_config_entry(
|
assert await setup_config_entry(
|
||||||
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], ENTITY_ID, device, fritz
|
||||||
)
|
)
|
||||||
@ -447,8 +472,8 @@ async def test_preset_mode_update(hass: HomeAssistant, fritz: Mock) -> None:
|
|||||||
assert state
|
assert state
|
||||||
assert state.attributes[ATTR_PRESET_MODE] is None
|
assert state.attributes[ATTR_PRESET_MODE] is None
|
||||||
|
|
||||||
device.target_temperature = 98
|
# test comfort preset
|
||||||
|
device.target_temperature = 23
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done(wait_background_tasks=True)
|
await hass.async_block_till_done(wait_background_tasks=True)
|
||||||
@ -458,8 +483,8 @@ async def test_preset_mode_update(hass: HomeAssistant, fritz: Mock) -> None:
|
|||||||
assert state
|
assert state
|
||||||
assert state.attributes[ATTR_PRESET_MODE] == PRESET_COMFORT
|
assert state.attributes[ATTR_PRESET_MODE] == PRESET_COMFORT
|
||||||
|
|
||||||
device.target_temperature = 99
|
# test eco preset
|
||||||
|
device.target_temperature = 20
|
||||||
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
async_fire_time_changed(hass, next_update)
|
async_fire_time_changed(hass, next_update)
|
||||||
await hass.async_block_till_done(wait_background_tasks=True)
|
await hass.async_block_till_done(wait_background_tasks=True)
|
||||||
@ -469,6 +494,17 @@ async def test_preset_mode_update(hass: HomeAssistant, fritz: Mock) -> None:
|
|||||||
assert state
|
assert state
|
||||||
assert state.attributes[ATTR_PRESET_MODE] == PRESET_ECO
|
assert state.attributes[ATTR_PRESET_MODE] == PRESET_ECO
|
||||||
|
|
||||||
|
# test boost preset
|
||||||
|
device.target_temperature = 127 # special temp from the api
|
||||||
|
next_update = dt_util.utcnow() + timedelta(seconds=200)
|
||||||
|
async_fire_time_changed(hass, next_update)
|
||||||
|
await hass.async_block_till_done(wait_background_tasks=True)
|
||||||
|
state = hass.states.get(ENTITY_ID)
|
||||||
|
|
||||||
|
assert fritz().update_devices.call_count == 4
|
||||||
|
assert state
|
||||||
|
assert state.attributes[ATTR_PRESET_MODE] == PRESET_BOOST
|
||||||
|
|
||||||
|
|
||||||
async def test_discover_new_device(hass: HomeAssistant, fritz: Mock) -> None:
|
async def test_discover_new_device(hass: HomeAssistant, fritz: Mock) -> None:
|
||||||
"""Test adding new discovered devices during runtime."""
|
"""Test adding new discovered devices during runtime."""
|
||||||
@ -509,7 +545,11 @@ async def test_holidy_summer_mode(
|
|||||||
assert state.attributes[ATTR_STATE_SUMMER_MODE] is False
|
assert state.attributes[ATTR_STATE_SUMMER_MODE] is False
|
||||||
assert state.attributes[ATTR_HVAC_MODES] == [HVACMode.HEAT, HVACMode.OFF]
|
assert state.attributes[ATTR_HVAC_MODES] == [HVACMode.HEAT, HVACMode.OFF]
|
||||||
assert state.attributes[ATTR_PRESET_MODE] is None
|
assert state.attributes[ATTR_PRESET_MODE] is None
|
||||||
assert state.attributes[ATTR_PRESET_MODES] == [PRESET_ECO, PRESET_COMFORT]
|
assert state.attributes[ATTR_PRESET_MODES] == [
|
||||||
|
PRESET_ECO,
|
||||||
|
PRESET_COMFORT,
|
||||||
|
PRESET_BOOST,
|
||||||
|
]
|
||||||
|
|
||||||
# test holiday mode
|
# test holiday mode
|
||||||
device.holiday_active = True
|
device.holiday_active = True
|
||||||
@ -596,4 +636,8 @@ async def test_holidy_summer_mode(
|
|||||||
assert state.attributes[ATTR_STATE_SUMMER_MODE] is False
|
assert state.attributes[ATTR_STATE_SUMMER_MODE] is False
|
||||||
assert state.attributes[ATTR_HVAC_MODES] == [HVACMode.HEAT, HVACMode.OFF]
|
assert state.attributes[ATTR_HVAC_MODES] == [HVACMode.HEAT, HVACMode.OFF]
|
||||||
assert state.attributes[ATTR_PRESET_MODE] is None
|
assert state.attributes[ATTR_PRESET_MODE] is None
|
||||||
assert state.attributes[ATTR_PRESET_MODES] == [PRESET_ECO, PRESET_COMFORT]
|
assert state.attributes[ATTR_PRESET_MODES] == [
|
||||||
|
PRESET_ECO,
|
||||||
|
PRESET_COMFORT,
|
||||||
|
PRESET_BOOST,
|
||||||
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user