home-assistant/core · warning · ServiceValidationError
Heat/Cool is not supported in this mode
Error message
Heat/Cool is not supported in this mode
What it means
ServiceValidationError thrown by AdvantageAirClimate.async_set_hvac_mode when the user requests HVACMode.HEAT_COOL while the unit's current preset_mode is not ADVANTAGE_AIR_MYAUTO. On this platform, heat/cool (auto) mode is only reachable through the 'myAuto' preset; any other active preset makes the combination invalid, so HA surfaces a user-correctable validation error instead of sending a doomed API command.
Source
Thrown at homeassistant/components/advantage_air/climate.py:242
await self.async_update_ac({"state": ADVANTAGE_AIR_STATE_ON})
@override
async def async_turn_off(self) -> None:
"""Set the HVAC State to off."""
await self.async_update_ac(
{
"state": ADVANTAGE_AIR_STATE_OFF,
}
)
@override
async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:
"""Set the HVAC Mode and State."""
if hvac_mode == HVACMode.OFF:
await self.async_turn_off()
return
if hvac_mode == HVACMode.HEAT_COOL and self.preset_mode != ADVANTAGE_AIR_MYAUTO:
raise ServiceValidationError("Heat/Cool is not supported in this mode")
await self.async_update_ac(
{
"state": ADVANTAGE_AIR_STATE_ON,
"mode": HASS_HVAC_MODES.get(hvac_mode),
}
)
@override
async def async_set_fan_mode(self, fan_mode: str) -> None:
"""Set the Fan Mode."""
if fan_mode == FAN_AUTO and self._ac.get(ADVANTAGE_AIR_AUTOFAN_ENABLED):
mode = ADVANTAGE_AIR_MYFAN
else:
mode = fan_mode
await self.async_update_ac({"fan": mode})
@override
async def async_set_temperature(self, **kwargs: Any) -> None:View on GitHub (pinned to 58a3fdb3ea)
Solutions
- First switch the preset to myAuto (climate.set_preset_mode with preset_mode: myAuto), then set hvac_mode to heat_cool.
- Update automations/scripts to do the two-step sequence instead of calling set_hvac_mode directly.
- In lovelace, use a preset-aware climate card or template the mode buttons so heat_cool is only exposed when preset is myAuto.
- If the error persists, check coordinator freshness — a stale preset_mode value can make the guard reject a valid request; refresh and retry.
Example fix
// before
await climate.async_set_hvac_mode(ACMode.HEAT_COOL)
// after
if preset_mode != "myAuto":
await climate.async_set_preset_mode("myAuto")
await climate.async_set_hvac_mode(ACMode.HEAT_COOL) Defensive patterns
Strategy: validation
Validate before calling
async def set_heat_cool(climate) -> None:
"""Guarded heat/cool: only valid when preset is myAuto."""
if climate.preset_mode != "myAuto":
await climate.async_set_preset_mode("myAuto")
await climate.async_set_hvac_mode(ACMode.HEAT_COOL) Type guard
def supports_heat_cool_now(climate) -> bool:
"""Heat/cool is selectable only under the myAuto preset."""
return climate.preset_mode == "myAuto" Try / catch
from homeassistant.exceptions import ServiceValidationError
try:
await climate.async_set_hvac_mode(ACMode.HEAT_COOL)
except ServiceValidationError as err:
# user-correctable: switch preset first
await climate.async_set_preset_mode("myAuto")
await climate.async_set_hvac_mode(ACMode.HEAT_COOL) Prevention
- Automations should always set preset myAuto before requesting heat_cool.
- Hide the heat_cool chip in dashboards unless the preset matches.
- Keep the coordinator data fresh so preset_mode reflects the controller's real state.
When it happens
Trigger: Calling climate.set_hvac_mode with hvac_mode: heat_cool (or a UI tap on the heat_cool mode) on an Advantage Air AC/zoned entity whose preset_mode is anything other than myAuto (e.g. myFan, night mode, economy presets).
Common situations: Dashboards or automations hardcoding heat_cool as the setpoint-hold mode; Google Home / Alexa voice commands that map 'automatic' to heat_cool; switching presets in the vendor app out of sync with HA's last known state.
Related errors
- update_failed
- {err}
- No entity_id provided and no preferred entity set
- AI Task entity {entity_id} not found
- AI Task entity {entity_id} does not support generating data
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/7e12e3ddab38b749.
Report an issue: GitHub.