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 willView on GitHub (pinned to 58a3fdb3ea)
Solutions
- Open the Bond app and update the hub to the latest firmware (Settings > Hub > Firmware).
- Reboot the hub after the update and rerun the Home Assistant config flow.
- 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
- Update Bond hub firmware during initial install, before adding it to Home Assistant.
- Leave the hub connected to the Bond cloud so firmware stays current.
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.