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

  1. First switch the preset to myAuto (climate.set_preset_mode with preset_mode: myAuto), then set hvac_mode to heat_cool.
  2. Update automations/scripts to do the two-step sequence instead of calling set_hvac_mode directly.
  3. In lovelace, use a preset-aware climate card or template the mode buttons so heat_cool is only exposed when preset is myAuto.
  4. 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

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


AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14). Data as JSON: /api/errors/7e12e3ddab38b749. Report an issue: GitHub.