home-assistant/core · error · InputValidationError

old_firmware

old_firmware

Error message

old_firmware

What it means

Raised in the Bond config flow after a successful connection: BondHub.setup() completed, but hub.bond_id is empty/falsy. The connection worked, yet the hub never reported an identifier, which on Bond hubs indicates firmware too old to expose the required v2 API identifier. Home Assistant cannot build a unique config entry ID from it.

Source

Thrown at homeassistant/components/bond/config_flow.py:71

        session=async_get_clientsession(hass),
        requestor_uuid=RequestorUUID.HOME_ASSISTANT,
    )
    try:
        hub = BondHub(bond, data[CONF_HOST])
        await hub.setup(max_devices=1)
    except ClientConnectionError as error:
        raise InputValidationError("cannot_connect") from error
    except ClientResponseError as error:
        if error.status == HTTPStatus.UNAUTHORIZED:
            raise InputValidationError("invalid_auth") from error
        raise InputValidationError("unknown") from error
    except Exception as error:
        _LOGGER.exception("Unexpected exception")
        raise InputValidationError("unknown") from error

    # Return unique ID from the hub to be stored in the config entry.
    if not hub.bond_id:
        raise InputValidationError("old_firmware")

    return hub.bond_id, hub.name


class BondConfigFlow(ConfigFlow, domain=DOMAIN):
    """Handle a config flow for Bond."""

    VERSION = 1

    def __init__(self) -> None:
        """Initialize config flow."""
        self._discovered: dict[str, str] = {}

    async def _async_try_automatic_configure(self) -> None:
        """Try to auto configure the device.

        Failure is acceptable here since the device may have been
        online longer then the allowed setup period, and we will

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Open the Bond app and update the hub to the latest firmware (Settings > Hub > Firmware).
  2. Reboot the hub after the update and rerun the Home Assistant config flow.
  3. If firmware is current and the error persists, capture http://<host>:30001/v2/devices and report to the bond-homeassistant issue tracker.
Defensive patterns

Strategy: validation

Validate before calling

async def hub_reports_id(host: str, token: str, session) -> str | None:
    resp = await session.get(
        f"http://{host}:30001/v2/devices", headers={"BOND-Token": token}
    )
    data = await resp.json()
    return data.get("_id") or None  # falsy id => old firmware

Try / catch

hub = BondHub(bond, host)
await hub.setup(max_devices=1)
if not hub.bond_id:
    # instruct user to update firmware instead of retrying connection

Prevention

When it happens

Trigger: Connecting to a Bond hub running early/old firmware that predates the v2 device-info endpoint fields; some non-Bond HTTP devices that answer with empty JSON 200 can also reach this path.

Common situations: First-generation Bond hub never updated, hub kept offline from the Bond cloud so firmware never auto-updated.

Related errors


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