home-assistant/core · error · HomeAssistantError

failed_to_read_hvac_mode

failed_to_read_hvac_mode

Error message

Failed to read current HVAC mode

What it means

HomeAssistantError with translation_key 'failed_to_read_hvac_mode', raised in _read_hvac_mode when the Evolution client's read_hvac_mode() returns a falsy value — the gateway did not return the expected S30/Bryant gateway mode register. This is a communications/parse failure with the Bryant Evolution gateway, not a user-input problem.

Source

Thrown at homeassistant/components/bryant_evolution/climate.py:149

                self._attr_target_temperature_high = (
                    await self._client.read_cooling_setpoint()
                )
                self._attr_target_temperature_low = (
                    await self._client.read_heating_setpoint()
                )
            case HVACMode.OFF:
                pass
            case _:
                _LOGGER.error("Unknown HVAC mode %s", self._attr_hvac_mode)

        # Note: depends on current temperature and target temperature low read
        # above.
        self._attr_hvac_action = await self._read_hvac_action()

    async def _read_hvac_mode(self) -> HVACMode:
        mode_and_active = await self._client.read_hvac_mode()
        if not mode_and_active:
            raise HomeAssistantError(
                translation_domain=DOMAIN, translation_key="failed_to_read_hvac_mode"
            )
        mode = mode_and_active[0]
        mode_enum = {
            "HEAT": HVACMode.HEAT,
            "COOL": HVACMode.COOL,
            "AUTO": HVACMode.HEAT_COOL,
            "OFF": HVACMode.OFF,
        }.get(mode.upper())
        if mode_enum is None:
            raise HomeAssistantError(
                translation_domain=DOMAIN,
                translation_key="failed_to_parse_hvac_mode",
                translation_placeholders={"mode": mode},
            )
        return mode_enum

    async def _read_hvac_action(self) -> HVACAction:

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Verify the Bryant/Carrier Evolution gateway is powered and reachable on the network
  2. Reload the bryant_evolution integration to re-establish the client connection
  3. Update the integration / evolutionhttp library if a firmware change altered responses
  4. Retry the climate entity action after connectivity returns
Defensive patterns

Strategy: retry

Validate before calling

# Only act when the entity has fresh data
if climate.available and climate.hvac_mode is not None:
    # gateway session healthy; proceed

Try / catch

try:
    await climate.async_update_hvac_mode()  # or entity service call
except HomeAssistantError as err:
    if 'failed_to_read_hvac_mode' in str(err):
        # gateway not answering; reload integration or wait for reconnect

Prevention

When it happens

Trigger: The Evolution gateway is offline or the websocket/SAM session dropped so read_hvac_mode returns None/empty; firmware returning an unexpected payload that the client library cannot decode into (mode, is_active).

Common situations: Power outage or router reboot taking the gateway down; HA restarted before the gateway connection re-established; gateway firmware update changing response format.

Related errors


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