Dismiss existing discoveries when a HomeKit device is paired (#62632)
This commit is contained in:
parent
79627526c7
commit
ef5e5c3f96
2 changed files with 56 additions and 12 deletions
|
@ -9,7 +9,7 @@ import voluptuous as vol
|
|||
from homeassistant import config_entries
|
||||
from homeassistant.components import zeroconf
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.data_entry_flow import FlowResult
|
||||
from homeassistant.data_entry_flow import AbortFlow, FlowResult
|
||||
from homeassistant.helpers.device_registry import (
|
||||
CONNECTION_NETWORK_MAC,
|
||||
async_get_registry as async_get_device_registry,
|
||||
|
@ -223,6 +223,8 @@ class HomekitControllerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
# The hkid is a unique random number that looks like a pairing code.
|
||||
# It changes if a device is factory reset.
|
||||
hkid = properties[zeroconf.ATTR_PROPERTIES_ID]
|
||||
normalized_hkid = normalize_hkid(hkid)
|
||||
|
||||
model = properties["md"]
|
||||
name = discovery_info.name.replace("._hap._tcp.local.", "")
|
||||
status_flags = int(properties["sf"])
|
||||
|
@ -240,7 +242,9 @@ class HomekitControllerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
config_num = None
|
||||
|
||||
# Set unique-id and error out if it's already configured
|
||||
existing_entry = await self.async_set_unique_id(normalize_hkid(hkid))
|
||||
existing_entry = await self.async_set_unique_id(
|
||||
normalized_hkid, raise_on_progress=False
|
||||
)
|
||||
updated_ip_port = {
|
||||
"AccessoryIP": discovery_info.host,
|
||||
"AccessoryPort": discovery_info.port,
|
||||
|
@ -303,7 +307,15 @@ class HomekitControllerFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
# Set unique-id and error out if it's already configured
|
||||
self._abort_if_unique_id_configured(updates=updated_ip_port)
|
||||
|
||||
self.context["hkid"] = hkid
|
||||
for progress in self._async_in_progress(include_uninitialized=True):
|
||||
if progress["context"].get("unique_id") == normalized_hkid:
|
||||
if paired:
|
||||
# If the device gets paired, we want to dismiss
|
||||
# an existing discovery since we can no longer
|
||||
# pair with it
|
||||
self.hass.config_entries.flow.async_abort(progress["flow_id"])
|
||||
else:
|
||||
raise AbortFlow("already_in_progress")
|
||||
|
||||
if paired:
|
||||
# Device is paired but not to us - ignore it
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue