diff --git a/homeassistant/components/mqtt/discovery.py b/homeassistant/components/mqtt/discovery.py index 0002a1866a4..b05e57280f3 100644 --- a/homeassistant/components/mqtt/discovery.py +++ b/homeassistant/components/mqtt/discovery.py @@ -275,32 +275,34 @@ async def async_start( # noqa: C901 _LOGGER.debug("Process discovery payload %s", payload) discovery_hash = (component, discovery_id) - if discovery_hash in mqtt_data.discovery_already_discovered or payload: + + already_discovered = discovery_hash in mqtt_data.discovery_already_discovered + if ( + already_discovered or payload + ) and discovery_hash not in mqtt_data.discovery_pending_discovered: + discovery_pending_discovered = mqtt_data.discovery_pending_discovered @callback def discovery_done(_: Any) -> None: - pending = mqtt_data.discovery_pending_discovered[discovery_hash][ - "pending" - ] + pending = discovery_pending_discovered[discovery_hash]["pending"] _LOGGER.debug("Pending discovery for %s: %s", discovery_hash, pending) if not pending: - mqtt_data.discovery_pending_discovered[discovery_hash]["unsub"]() - mqtt_data.discovery_pending_discovered.pop(discovery_hash) + discovery_pending_discovered[discovery_hash]["unsub"]() + discovery_pending_discovered.pop(discovery_hash) else: payload = pending.pop() async_process_discovery_payload(component, discovery_id, payload) - if discovery_hash not in mqtt_data.discovery_pending_discovered: - mqtt_data.discovery_pending_discovered[discovery_hash] = { - "unsub": async_dispatcher_connect( - hass, - MQTT_DISCOVERY_DONE.format(discovery_hash), - discovery_done, - ), - "pending": deque([]), - } + discovery_pending_discovered[discovery_hash] = { + "unsub": async_dispatcher_connect( + hass, + MQTT_DISCOVERY_DONE.format(discovery_hash), + discovery_done, + ), + "pending": deque([]), + } - if discovery_hash in mqtt_data.discovery_already_discovered: + if already_discovered: # Dispatch update message = f"Component has already been discovered: {component} {discovery_id}, sending update" async_log_discovery_origin_info(message, payload)