Remove deprecated aux_heat from ecobee (#125246)

This commit is contained in:
G Johansson 2024-09-06 16:18:24 +02:00 committed by GitHub
parent 6976a66758
commit e58cf00a96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 2 additions and 165 deletions

View File

@ -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)

View File

@ -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"

View File

@ -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