home-assistant/core · warning · ConfigEntryNotReady

Protocol(s) {missing_protocols_str} not yet found for {name}

Error message

Protocol(s) {missing_protocols_str} not yet found for {name}, waiting for discovery.

What it means

ConfigEntryNotReady raised when the config entry stores credentials for protocols (e.g. Companion, AirPlay) that were not yet found on the device at the time of connection setup. Credentials in the entry are keyed by protocol; if the device's discovered services (conf.get_service(protocol)) do not include one of them and raise_missing_credentials is set, setup aborts as not-ready so discovery can run again later.

Source

Thrown at homeassistant/components/apple_tv/__init__.py:327

        return None

    async def _connect(self, conf: AppleTV, raise_missing_credentials: bool) -> None:
        """Connect to device."""
        config_entry = self.config_entry
        credentials: dict[int, str | None] = config_entry.data[CONF_CREDENTIALS]
        name: str = config_entry.data[CONF_NAME]
        missing_protocols = []
        for protocol_int, creds in credentials.items():
            protocol = Protocol(int(protocol_int))
            if conf.get_service(protocol) is not None:
                conf.set_credentials(protocol, creds)  # type: ignore[arg-type]
            else:
                missing_protocols.append(protocol.name)

        if missing_protocols:
            missing_protocols_str = ", ".join(missing_protocols)
            if raise_missing_credentials:
                raise ConfigEntryNotReady(
                    f"Protocol(s) {missing_protocols_str} not yet found for {name},"
                    " waiting for discovery."
                )
            _LOGGER.debug(
                "Protocol(s) %s not yet found for %s, trying later",
                missing_protocols_str,
                name,
            )
            return

        _LOGGER.debug("Connecting to device %s", self.config_entry.data[CONF_NAME])
        session = async_get_clientsession(self.hass)
        self.atv = await connect(conf, self.hass.loop, session=session)
        self.atv.listener = self

        self._dispatch_send(SIGNAL_CONNECTED, self.atv)
        self._address_updated(str(conf.address))

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Wake the Apple TV so it advertises all services, then reload the integration (discovery will retry and complete)
  2. Verify 'atvremote --scan' shows all expected services (MAP, Companion, AirPlay/RAOP) from the HA host; fix mDNS reflection/repeat across VLANs if some are missing
  3. Reconfigure the integration to re-discover the device and refresh the set of protocols
Defensive patterns

Strategy: retry

Prevention

When it happens

Trigger: async_first_connect -> connect path where entry.data credentials include a protocol whose service is missing from the pyatv conf: device discovered via one interface but credentials captured on another, mDNS records incomplete, or the Apple TV exposes the protocol only intermittently (sleep/Bonjour sleep proxy).

Common situations: Mixed wired/wireless Apple TV presence in mDNS; sleep proxy advertising stale records; entry migrated from an older apple_tv integration version that stored credentials for protocols the device no longer exposes; VLANs where only some service types are forwarded.

Related errors


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