1 """Migrate lifx devices to their own config entry."""
3 from __future__
import annotations
9 from .const
import _LOGGER, DOMAIN
10 from .discovery
import async_init_discovery_flow
16 discovered_hosts_by_serial: dict[str, str],
17 existing_serials: set[str],
18 legacy_entry: ConfigEntry,
20 """Migrate the legacy config entries to have an entry per device."""
22 "Migrating legacy entries: discovered_hosts_by_serial=%s, existing_serials=%s",
23 discovered_hosts_by_serial,
27 device_registry = dr.async_get(hass)
28 for dev_entry
in dr.async_entries_for_config_entry(
29 device_registry, legacy_entry.entry_id
31 for domain, serial
in dev_entry.identifiers:
34 and serial
not in existing_serials
35 and (host := discovered_hosts_by_serial.get(serial))
39 remaining_devices = dr.async_entries_for_config_entry(
40 dr.async_get(hass), legacy_entry.entry_id
42 _LOGGER.debug(
"The following devices remain: %s", remaining_devices)
43 return len(remaining_devices)
48 hass: HomeAssistant, legacy_entry_id: str, new_entry: ConfigEntry
50 """Move entities and devices to the new config entry."""
52 device_registry = dr.async_get(hass)
53 for dev_entry
in dr.async_entries_for_config_entry(
54 device_registry, legacy_entry_id
56 for domain, value
in dev_entry.identifiers:
57 if domain == DOMAIN
and value == new_entry.unique_id:
59 "Migrating device with %s to %s",
60 dev_entry.identifiers,
63 migrated_devices.append(dev_entry.id)
64 device_registry.async_update_device(
66 add_config_entry_id=new_entry.entry_id,
67 remove_config_entry_id=legacy_entry_id,
70 entity_registry = er.async_get(hass)
71 for reg_entity
in er.async_entries_for_config_entry(
72 entity_registry, legacy_entry_id
74 if reg_entity.device_id
in migrated_devices:
75 entity_registry.async_update_entity(
76 reg_entity.entity_id, config_entry_id=new_entry.entry_id
None async_init_discovery_flow(HomeAssistant hass, str host, str serial)
None async_migrate_entities_devices(HomeAssistant hass, str legacy_entry_id, ConfigEntry new_entry)
int async_migrate_legacy_entries(HomeAssistant hass, dict[str, str] discovered_hosts_by_serial, set[str] existing_serials, ConfigEntry legacy_entry)