mirror of
https://github.com/home-assistant/core.git
synced 2025-07-08 22:07:10 +00:00
Remove deprecated aux_heat from ecobee (#125246)
This commit is contained in:
parent
6976a66758
commit
e58cf00a96
@ -36,7 +36,6 @@ from homeassistant.helpers import entity_platform
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.device_registry import DeviceInfo
|
||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
|
||||
from homeassistant.util.unit_conversion import TemperatureConverter
|
||||
|
||||
from . import EcobeeData
|
||||
@ -387,8 +386,6 @@ class Thermostat(ClimateEntity):
|
||||
supported = SUPPORT_FLAGS
|
||||
if self.has_humidifier_control:
|
||||
supported = supported | ClimateEntityFeature.TARGET_HUMIDITY
|
||||
if self.has_aux_heat:
|
||||
supported = supported | ClimateEntityFeature.AUX_HEAT
|
||||
if len(self.hvac_modes) > 1 and HVACMode.OFF in self.hvac_modes:
|
||||
supported = (
|
||||
supported | ClimateEntityFeature.TURN_OFF | ClimateEntityFeature.TURN_ON
|
||||
@ -449,11 +446,6 @@ class Thermostat(ClimateEntity):
|
||||
and self.settings.get("humidifierMode") == HUMIDIFIER_MANUAL_MODE
|
||||
)
|
||||
|
||||
@property
|
||||
def has_aux_heat(self) -> bool:
|
||||
"""Return true if the ecobee has a heat pump."""
|
||||
return bool(self.settings.get(HAS_HEAT_PUMP))
|
||||
|
||||
@property
|
||||
def target_humidity(self) -> int | None:
|
||||
"""Return the desired humidity set point."""
|
||||
@ -573,46 +565,6 @@ class Thermostat(ClimateEntity):
|
||||
"fan_min_on_time": self.settings["fanMinOnTime"],
|
||||
}
|
||||
|
||||
@property
|
||||
def is_aux_heat(self) -> bool:
|
||||
"""Return true if aux heater."""
|
||||
return self.settings["hvacMode"] == ECOBEE_AUX_HEAT_ONLY
|
||||
|
||||
async def async_turn_aux_heat_on(self) -> None:
|
||||
"""Turn auxiliary heater on."""
|
||||
async_create_issue(
|
||||
self.hass,
|
||||
DOMAIN,
|
||||
"migrate_aux_heat",
|
||||
breaks_in_ha_version="2024.10.0",
|
||||
is_fixable=True,
|
||||
is_persistent=True,
|
||||
translation_key="migrate_aux_heat",
|
||||
severity=IssueSeverity.WARNING,
|
||||
)
|
||||
_LOGGER.debug("Setting HVAC mode to auxHeatOnly to turn on aux heat")
|
||||
self._last_hvac_mode_before_aux_heat = self.hvac_mode
|
||||
await self.hass.async_add_executor_job(
|
||||
self.data.ecobee.set_hvac_mode, self.thermostat_index, ECOBEE_AUX_HEAT_ONLY
|
||||
)
|
||||
self.update_without_throttle = True
|
||||
|
||||
async def async_turn_aux_heat_off(self) -> None:
|
||||
"""Turn auxiliary heater off."""
|
||||
async_create_issue(
|
||||
self.hass,
|
||||
DOMAIN,
|
||||
"migrate_aux_heat",
|
||||
breaks_in_ha_version="2024.10.0",
|
||||
is_fixable=True,
|
||||
is_persistent=True,
|
||||
translation_key="migrate_aux_heat",
|
||||
severity=IssueSeverity.WARNING,
|
||||
)
|
||||
_LOGGER.debug("Setting HVAC mode to last mode to disable aux heat")
|
||||
await self.async_set_hvac_mode(self._last_hvac_mode_before_aux_heat)
|
||||
self.update_without_throttle = True
|
||||
|
||||
def set_preset_mode(self, preset_mode: str) -> None:
|
||||
"""Activate a preset."""
|
||||
preset_mode = HASS_TO_ECOBEE_PRESET.get(preset_mode, preset_mode)
|
||||
|
@ -1,24 +1,16 @@
|
||||
"""The test for the Ecobee thermostat module."""
|
||||
|
||||
import copy
|
||||
from http import HTTPStatus
|
||||
from unittest import mock
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant import const
|
||||
from homeassistant.components import climate
|
||||
from homeassistant.components.climate import ClimateEntityFeature
|
||||
from homeassistant.components.ecobee.climate import (
|
||||
ECOBEE_AUX_HEAT_ONLY,
|
||||
PRESET_AWAY_INDEFINITELY,
|
||||
Thermostat,
|
||||
)
|
||||
from homeassistant.const import ATTR_ENTITY_ID, ATTR_SUPPORTED_FEATURES, STATE_OFF
|
||||
from homeassistant.components.ecobee.climate import PRESET_AWAY_INDEFINITELY, Thermostat
|
||||
from homeassistant.const import ATTR_SUPPORTED_FEATURES, STATE_OFF
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from . import GENERIC_THERMOSTAT_INFO_WITH_HEATPUMP
|
||||
from .common import setup_platform
|
||||
|
||||
ENTITY_ID = "climate.ecobee"
|
||||
@ -111,25 +103,6 @@ async def test_aux_heat_not_supported_by_default(hass: HomeAssistant) -> None:
|
||||
)
|
||||
|
||||
|
||||
async def test_aux_heat_supported_with_heat_pump(hass: HomeAssistant) -> None:
|
||||
"""Aux Heat should be supported if thermostat has heatpump."""
|
||||
mock_get_thermostat = mock.Mock()
|
||||
mock_get_thermostat.return_value = GENERIC_THERMOSTAT_INFO_WITH_HEATPUMP
|
||||
with mock.patch("pyecobee.Ecobee.get_thermostat", mock_get_thermostat):
|
||||
await setup_platform(hass, const.Platform.CLIMATE)
|
||||
state = hass.states.get(ENTITY_ID)
|
||||
assert (
|
||||
state.attributes.get(ATTR_SUPPORTED_FEATURES)
|
||||
== ClimateEntityFeature.PRESET_MODE
|
||||
| ClimateEntityFeature.FAN_MODE
|
||||
| ClimateEntityFeature.TARGET_TEMPERATURE_RANGE
|
||||
| ClimateEntityFeature.TARGET_TEMPERATURE
|
||||
| ClimateEntityFeature.AUX_HEAT
|
||||
| ClimateEntityFeature.TURN_OFF
|
||||
| ClimateEntityFeature.TURN_ON
|
||||
)
|
||||
|
||||
|
||||
async def test_current_temperature(ecobee_fixture, thermostat) -> None:
|
||||
"""Test current temperature."""
|
||||
assert thermostat.current_temperature == 30
|
||||
@ -255,29 +228,6 @@ async def test_extra_state_attributes(ecobee_fixture, thermostat) -> None:
|
||||
}
|
||||
|
||||
|
||||
async def test_is_aux_heat_on(hass: HomeAssistant) -> None:
|
||||
"""Test aux heat property is only enabled for auxHeatOnly."""
|
||||
mock_get_thermostat = mock.Mock()
|
||||
mock_get_thermostat.return_value = copy.deepcopy(
|
||||
GENERIC_THERMOSTAT_INFO_WITH_HEATPUMP
|
||||
)
|
||||
mock_get_thermostat.return_value["settings"]["hvacMode"] = "auxHeatOnly"
|
||||
with mock.patch("pyecobee.Ecobee.get_thermostat", mock_get_thermostat):
|
||||
await setup_platform(hass, const.Platform.CLIMATE)
|
||||
state = hass.states.get(ENTITY_ID)
|
||||
assert state.attributes[climate.ATTR_AUX_HEAT] == "on"
|
||||
|
||||
|
||||
async def test_is_aux_heat_off(hass: HomeAssistant) -> None:
|
||||
"""Test aux heat property is only enabled for auxHeatOnly."""
|
||||
mock_get_thermostat = mock.Mock()
|
||||
mock_get_thermostat.return_value = GENERIC_THERMOSTAT_INFO_WITH_HEATPUMP
|
||||
with mock.patch("pyecobee.Ecobee.get_thermostat", mock_get_thermostat):
|
||||
await setup_platform(hass, const.Platform.CLIMATE)
|
||||
state = hass.states.get(ENTITY_ID)
|
||||
assert state.attributes[climate.ATTR_AUX_HEAT] == "off"
|
||||
|
||||
|
||||
async def test_set_temperature(ecobee_fixture, thermostat, data) -> None:
|
||||
"""Test set temperature."""
|
||||
# Auto -> Auto
|
||||
@ -400,36 +350,6 @@ async def test_set_fan_mode_auto(thermostat, data) -> None:
|
||||
)
|
||||
|
||||
|
||||
async def test_turn_aux_heat_on(hass: HomeAssistant, mock_ecobee: MagicMock) -> None:
|
||||
"""Test when aux heat is set on. This must change the HVAC mode."""
|
||||
mock_ecobee.get_thermostat.return_value = GENERIC_THERMOSTAT_INFO_WITH_HEATPUMP
|
||||
mock_ecobee.thermostats = [GENERIC_THERMOSTAT_INFO_WITH_HEATPUMP]
|
||||
await setup_platform(hass, const.Platform.CLIMATE)
|
||||
await hass.services.async_call(
|
||||
climate.DOMAIN,
|
||||
climate.SERVICE_SET_AUX_HEAT,
|
||||
{ATTR_ENTITY_ID: ENTITY_ID, climate.ATTR_AUX_HEAT: True},
|
||||
blocking=True,
|
||||
)
|
||||
assert mock_ecobee.set_hvac_mode.call_count == 1
|
||||
assert mock_ecobee.set_hvac_mode.call_args == mock.call(0, ECOBEE_AUX_HEAT_ONLY)
|
||||
|
||||
|
||||
async def test_turn_aux_heat_off(hass: HomeAssistant, mock_ecobee: MagicMock) -> None:
|
||||
"""Test when aux heat is tuned off. Must change HVAC mode back to last used."""
|
||||
mock_ecobee.get_thermostat.return_value = GENERIC_THERMOSTAT_INFO_WITH_HEATPUMP
|
||||
mock_ecobee.thermostats = [GENERIC_THERMOSTAT_INFO_WITH_HEATPUMP]
|
||||
await setup_platform(hass, const.Platform.CLIMATE)
|
||||
await hass.services.async_call(
|
||||
climate.DOMAIN,
|
||||
climate.SERVICE_SET_AUX_HEAT,
|
||||
{ATTR_ENTITY_ID: ENTITY_ID, climate.ATTR_AUX_HEAT: False},
|
||||
blocking=True,
|
||||
)
|
||||
assert mock_ecobee.set_hvac_mode.call_count == 1
|
||||
assert mock_ecobee.set_hvac_mode.call_args == mock.call(0, "auto")
|
||||
|
||||
|
||||
async def test_preset_indefinite_away(ecobee_fixture, thermostat) -> None:
|
||||
"""Test indefinite away showing correctly, and not as temporary away."""
|
||||
ecobee_fixture["program"]["currentClimateRef"] = "away"
|
||||
|
@ -3,11 +3,6 @@
|
||||
from http import HTTPStatus
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from homeassistant.components.climate import (
|
||||
ATTR_AUX_HEAT,
|
||||
DOMAIN as CLIMATE_DOMAIN,
|
||||
SERVICE_SET_AUX_HEAT,
|
||||
)
|
||||
from homeassistant.components.ecobee import DOMAIN
|
||||
from homeassistant.components.notify import DOMAIN as NOTIFY_DOMAIN
|
||||
from homeassistant.components.repairs.issue_handler import (
|
||||
@ -17,7 +12,6 @@ from homeassistant.components.repairs.websocket_api import (
|
||||
RepairsFlowIndexView,
|
||||
RepairsFlowResourceView,
|
||||
)
|
||||
from homeassistant.const import ATTR_ENTITY_ID
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import issue_registry as ir
|
||||
|
||||
@ -83,32 +77,3 @@ async def test_ecobee_notify_repair_flow(
|
||||
issue_id=f"migrate_notify_{DOMAIN}_{DOMAIN}",
|
||||
)
|
||||
assert len(issue_registry.issues) == 0
|
||||
|
||||
|
||||
async def test_ecobee_aux_heat_repair_flow(
|
||||
hass: HomeAssistant,
|
||||
mock_ecobee: MagicMock,
|
||||
hass_client: ClientSessionGenerator,
|
||||
issue_registry: ir.IssueRegistry,
|
||||
) -> None:
|
||||
"""Test the ecobee aux_heat service repair flow is triggered."""
|
||||
await setup_platform(hass, CLIMATE_DOMAIN)
|
||||
await async_process_repairs_platforms(hass)
|
||||
|
||||
ENTITY_ID = "climate.ecobee2"
|
||||
|
||||
# Simulate legacy service being used
|
||||
assert hass.services.has_service(CLIMATE_DOMAIN, SERVICE_SET_AUX_HEAT)
|
||||
await hass.services.async_call(
|
||||
CLIMATE_DOMAIN,
|
||||
SERVICE_SET_AUX_HEAT,
|
||||
{ATTR_ENTITY_ID: ENTITY_ID, ATTR_AUX_HEAT: True},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
# Assert the issue is present
|
||||
assert issue_registry.async_get_issue(
|
||||
domain="ecobee",
|
||||
issue_id="migrate_aux_heat",
|
||||
)
|
||||
assert len(issue_registry.issues) == 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user