diff --git a/homeassistant/components/logbook/helpers.py b/homeassistant/components/logbook/helpers.py index 674f1643793..4fa0da9033a 100644 --- a/homeassistant/components/logbook/helpers.py +++ b/homeassistant/components/logbook/helpers.py @@ -58,7 +58,7 @@ def _async_config_entries_for_ids( dev_reg = dr.async_get(hass) for device_id in device_ids: if (device := dev_reg.async_get(device_id)) and device.config_entries: - config_entry_ids.update(device.config_entries) + config_entry_ids |= device.config_entries return config_entry_ids diff --git a/homeassistant/components/unifiprotect/data.py b/homeassistant/components/unifiprotect/data.py index 6b502eaa5f3..a2ef72c7008 100644 --- a/homeassistant/components/unifiprotect/data.py +++ b/homeassistant/components/unifiprotect/data.py @@ -342,7 +342,7 @@ class ProtectData: @callback def async_ufp_instance_for_config_entry_ids( - hass: HomeAssistant, config_entry_ids: list[str] + hass: HomeAssistant, config_entry_ids: set[str] ) -> ProtectApiClient | None: """Find the UFP instance for the config entry ids.""" return next( diff --git a/homeassistant/helpers/device_registry.py b/homeassistant/helpers/device_registry.py index 36249733f71..cfafa63ec3a 100644 --- a/homeassistant/helpers/device_registry.py +++ b/homeassistant/helpers/device_registry.py @@ -55,7 +55,7 @@ EVENT_DEVICE_REGISTRY_UPDATED: EventType[EventDeviceRegistryUpdatedData] = Event ) STORAGE_KEY = "core.device_registry" STORAGE_VERSION_MAJOR = 1 -STORAGE_VERSION_MINOR = 5 +STORAGE_VERSION_MINOR = 6 CLEANUP_DELAY = 10 @@ -145,6 +145,9 @@ DEVICE_INFO_TYPES = { DEVICE_INFO_KEYS = set.union(*(itm for itm in DEVICE_INFO_TYPES.values())) +# Integrations which may share a device with a native integration +LOW_PRIO_CONFIG_ENTRY_DOMAINS = {"homekit_controller", "matter", "mqtt", "upnp"} + class _EventDeviceRegistryUpdatedData_CreateRemove(TypedDict): """EventDeviceRegistryUpdated data for action type 'create' and 'remove'.""" @@ -273,7 +276,7 @@ class DeviceEntry: """Device Registry Entry.""" area_id: str | None = attr.ib(default=None) - config_entries: list[str] = attr.ib(factory=list) + config_entries: set[str] = attr.ib(converter=set, factory=set) configuration_url: str | None = attr.ib(default=None) connections: set[tuple[str, str]] = attr.ib(converter=set, factory=set) disabled_by: DeviceEntryDisabler | None = attr.ib(default=None) @@ -286,6 +289,7 @@ class DeviceEntry: model: str | None = attr.ib(default=None) name_by_user: str | None = attr.ib(default=None) name: str | None = attr.ib(default=None) + primary_config_entry: str | None = attr.ib(default=None) serial_number: str | None = attr.ib(default=None) suggested_area: str | None = attr.ib(default=None) sw_version: str | None = attr.ib(default=None) @@ -307,7 +311,7 @@ class DeviceEntry: return { "area_id": self.area_id, "configuration_url": self.configuration_url, - "config_entries": self.config_entries, + "config_entries": list(self.config_entries), "connections": list(self.connections), "disabled_by": self.disabled_by, "entry_type": self.entry_type, @@ -319,6 +323,7 @@ class DeviceEntry: "model": self.model, "name_by_user": self.name_by_user, "name": self.name, + "primary_config_entry": self.primary_config_entry, "serial_number": self.serial_number, "sw_version": self.sw_version, "via_device_id": self.via_device_id, @@ -347,7 +352,7 @@ class DeviceEntry: json_bytes( { "area_id": self.area_id, - "config_entries": self.config_entries, + "config_entries": list(self.config_entries), "configuration_url": self.configuration_url, "connections": list(self.connections), "disabled_by": self.disabled_by, @@ -360,6 +365,7 @@ class DeviceEntry: "model": self.model, "name_by_user": self.name_by_user, "name": self.name, + "primary_config_entry": self.primary_config_entry, "serial_number": self.serial_number, "sw_version": self.sw_version, "via_device_id": self.via_device_id, @@ -372,7 +378,7 @@ class DeviceEntry: class DeletedDeviceEntry: """Deleted Device Registry Entry.""" - config_entries: list[str] = attr.ib() + config_entries: set[str] = attr.ib() connections: set[tuple[str, str]] = attr.ib() identifiers: set[tuple[str, str]] = attr.ib() id: str = attr.ib() @@ -387,7 +393,7 @@ class DeletedDeviceEntry: """Create DeviceEntry from DeletedDeviceEntry.""" return DeviceEntry( # type ignores: likely https://github.com/python/mypy/issues/8625 - config_entries=[config_entry_id], + config_entries={config_entry_id}, # type: ignore[arg-type] connections=self.connections & connections, # type: ignore[arg-type] identifiers=self.identifiers & identifiers, # type: ignore[arg-type] id=self.id, @@ -400,7 +406,7 @@ class DeletedDeviceEntry: return json_fragment( json_bytes( { - "config_entries": self.config_entries, + "config_entries": list(self.config_entries), "connections": list(self.connections), "identifiers": list(self.identifiers), "id": self.id, @@ -473,6 +479,10 @@ class DeviceRegistryStore(storage.Store[dict[str, list[dict[str, Any]]]]): # Introduced in 2024.3 for device in old_data["devices"]: device["labels"] = device.get("labels", []) + if old_minor_version < 6: + # Introduced in 2024.7 + for device in old_data["devices"]: + device.setdefault("primary_config_entry", None) if old_major_version > 1: raise NotImplementedError @@ -790,6 +800,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]): device.id, allow_collisions=True, add_config_entry_id=config_entry_id, + add_config_entry=config_entry, configuration_url=configuration_url, device_info_type=device_info_type, disabled_by=disabled_by, @@ -816,6 +827,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]): self, device_id: str, *, + add_config_entry: ConfigEntry | UndefinedType = UNDEFINED, add_config_entry_id: str | UndefinedType = UNDEFINED, # Temporary flag so we don't blow up when collisions are implicitly introduced # by calls to async_get_or_create. Must not be set by integrations. @@ -849,6 +861,14 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]): config_entries = old.config_entries + if add_config_entry_id is not UNDEFINED and add_config_entry is UNDEFINED: + config_entry = self.hass.config_entries.async_get_entry(add_config_entry_id) + if config_entry is None: + raise HomeAssistantError( + f"Can't link device to unknown config entry {add_config_entry_id}" + ) + add_config_entry = config_entry + if merge_connections is not UNDEFINED and new_connections is not UNDEFINED: raise HomeAssistantError( "Cannot define both merge_connections and new_connections" @@ -886,32 +906,40 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]): area = ar.async_get(self.hass).async_get_or_create(suggested_area) area_id = area.id - if add_config_entry_id is not UNDEFINED: - # primary ones have to be at the start. - if device_info_type == "primary": - # Move entry to first spot - if not config_entries or config_entries[0] != add_config_entry_id: - config_entries = [add_config_entry_id] + [ - entry - for entry in config_entries - if entry != add_config_entry_id - ] + if add_config_entry is not UNDEFINED: + primary_entry_id = old.primary_config_entry + if ( + device_info_type == "primary" + and add_config_entry.entry_id != primary_entry_id + ): + if ( + primary_entry_id is None + or not ( + primary_entry := self.hass.config_entries.async_get_entry( + primary_entry_id + ) + ) + or primary_entry.domain in LOW_PRIO_CONFIG_ENTRY_DOMAINS + ): + new_values["primary_config_entry"] = add_config_entry.entry_id + old_values["primary_config_entry"] = old.primary_config_entry - # Not primary, append - elif add_config_entry_id not in config_entries: - config_entries = [*config_entries, add_config_entry_id] + if add_config_entry.entry_id not in old.config_entries: + config_entries = old.config_entries | {add_config_entry.entry_id} if ( remove_config_entry_id is not UNDEFINED and remove_config_entry_id in config_entries ): - if config_entries == [remove_config_entry_id]: + if config_entries == {remove_config_entry_id}: self.async_remove_device(device_id) return None - config_entries = [ - entry for entry in config_entries if entry != remove_config_entry_id - ] + if remove_config_entry_id == old.primary_config_entry: + new_values["primary_config_entry"] = None + old_values["primary_config_entry"] = old.primary_config_entry + + config_entries = config_entries - {remove_config_entry_id} if config_entries != old.config_entries: new_values["config_entries"] = config_entries @@ -1095,7 +1123,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]): for device in data["devices"]: devices[device["id"]] = DeviceEntry( area_id=device["area_id"], - config_entries=device["config_entries"], + config_entries=set(device["config_entries"]), configuration_url=device["configuration_url"], # type ignores (if tuple arg was cast): likely https://github.com/python/mypy/issues/8625 connections={ @@ -1123,6 +1151,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]): model=device["model"], name_by_user=device["name_by_user"], name=device["name"], + primary_config_entry=device["primary_config_entry"], serial_number=device["serial_number"], sw_version=device["sw_version"], via_device_id=device["via_device_id"], @@ -1130,7 +1159,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]): # Introduced in 0.111 for device in data["deleted_devices"]: deleted_devices[device["id"]] = DeletedDeviceEntry( - config_entries=device["config_entries"], + config_entries=set(device["config_entries"]), connections={tuple(conn) for conn in device["connections"]}, identifiers={tuple(iden) for iden in device["identifiers"]}, id=device["id"], @@ -1161,15 +1190,13 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]): config_entries = deleted_device.config_entries if config_entry_id not in config_entries: continue - if config_entries == [config_entry_id]: + if config_entries == {config_entry_id}: # Add a time stamp when the deleted device became orphaned self.deleted_devices[deleted_device.id] = attr.evolve( - deleted_device, orphaned_timestamp=now_time, config_entries=[] + deleted_device, orphaned_timestamp=now_time, config_entries=set() ) else: - config_entries = [ - entry for entry in config_entries if entry != config_entry_id - ] + config_entries = config_entries - {config_entry_id} # No need to reindex here since we currently # do not have a lookup by config entry self.deleted_devices[deleted_device.id] = attr.evolve( @@ -1275,8 +1302,8 @@ def async_config_entry_disabled_by_changed( if device.disabled: # Device already disabled, do not overwrite continue - if len(device.config_entries) > 1 and any( - entry_id in enabled_config_entries for entry_id in device.config_entries + if len(device.config_entries) > 1 and device.config_entries.intersection( + enabled_config_entries ): continue registry.async_update_device( diff --git a/tests/components/airgradient/snapshots/test_init.ambr b/tests/components/airgradient/snapshots/test_init.ambr index 7c2e6ce4f78..4462a996a49 100644 --- a/tests/components/airgradient/snapshots/test_init.ambr +++ b/tests/components/airgradient/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'I-9PSL', 'name': 'Airgradient', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': '84fce612f5b8', 'suggested_area': None, 'sw_version': '3.1.1', @@ -53,6 +54,7 @@ 'model': 'O-1PPT', 'name': 'Airgradient', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': '84fce60bec38', 'suggested_area': None, 'sw_version': '3.1.1', diff --git a/tests/components/aosmith/snapshots/test_device.ambr b/tests/components/aosmith/snapshots/test_device.ambr index f6e2625afdb..d563090ce9d 100644 --- a/tests/components/aosmith/snapshots/test_device.ambr +++ b/tests/components/aosmith/snapshots/test_device.ambr @@ -23,6 +23,7 @@ 'model': 'HPTS-50 200 202172000', 'name': 'My water heater', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'serial', 'suggested_area': 'Basement', 'sw_version': '2.14', diff --git a/tests/components/config/test_device_registry.py b/tests/components/config/test_device_registry.py index 804cf29979e..0717bb6046d 100644 --- a/tests/components/config/test_device_registry.py +++ b/tests/components/config/test_device_registry.py @@ -70,6 +70,7 @@ async def test_list_devices( "model": "model", "name_by_user": None, "name": None, + "primary_config_entry": entry.entry_id, "serial_number": None, "sw_version": None, "via_device_id": None, @@ -88,6 +89,7 @@ async def test_list_devices( "model": "model", "name_by_user": None, "name": None, + "primary_config_entry": entry.entry_id, "serial_number": None, "sw_version": None, "via_device_id": dev1, @@ -119,6 +121,7 @@ async def test_list_devices( "model": "model", "name_by_user": None, "name": None, + "primary_config_entry": entry.entry_id, "serial_number": None, "sw_version": None, "via_device_id": None, @@ -274,7 +277,7 @@ async def test_remove_config_entry_from_device( config_entry_id=entry_2.entry_id, connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, ) - assert device_entry.config_entries == [entry_1.entry_id, entry_2.entry_id] + assert device_entry.config_entries == {entry_1.entry_id, entry_2.entry_id} # Try removing a config entry from the device, it should fail because # async_remove_config_entry_device returns False @@ -293,9 +296,9 @@ async def test_remove_config_entry_from_device( assert response["result"]["config_entries"] == [entry_2.entry_id] # Check that the config entry was removed from the device - assert device_registry.async_get(device_entry.id).config_entries == [ + assert device_registry.async_get(device_entry.id).config_entries == { entry_2.entry_id - ] + } # Remove the 2nd config entry response = await ws_client.remove_device(device_entry.id, entry_2.entry_id) @@ -365,11 +368,11 @@ async def test_remove_config_entry_from_device_fails( config_entry_id=entry_3.entry_id, connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, ) - assert device_entry.config_entries == [ + assert device_entry.config_entries == { entry_1.entry_id, entry_2.entry_id, entry_3.entry_id, - ] + } fake_entry_id = "abc123" assert entry_1.entry_id != fake_entry_id diff --git a/tests/components/devolo_home_network/snapshots/test_init.ambr b/tests/components/devolo_home_network/snapshots/test_init.ambr index b042dfec2f1..8c265400643 100644 --- a/tests/components/devolo_home_network/snapshots/test_init.ambr +++ b/tests/components/devolo_home_network/snapshots/test_init.ambr @@ -27,6 +27,7 @@ 'model': 'dLAN pro 1200+ WiFi ac', 'name': 'Mock Title', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': '1234567890', 'suggested_area': None, 'sw_version': '5.6.1', diff --git a/tests/components/ecovacs/snapshots/test_init.ambr b/tests/components/ecovacs/snapshots/test_init.ambr index f47e747b1cf..3ce872e7898 100644 --- a/tests/components/ecovacs/snapshots/test_init.ambr +++ b/tests/components/ecovacs/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'DEEBOT OZMO 950 Series', 'name': 'Ozmo 950', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'E1234567890000000001', 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/elgato/snapshots/test_button.ambr b/tests/components/elgato/snapshots/test_button.ambr index e7477540f46..77555c85a06 100644 --- a/tests/components/elgato/snapshots/test_button.ambr +++ b/tests/components/elgato/snapshots/test_button.ambr @@ -74,6 +74,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', @@ -155,6 +156,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', diff --git a/tests/components/elgato/snapshots/test_light.ambr b/tests/components/elgato/snapshots/test_light.ambr index e2f663d294b..8e2962fc698 100644 --- a/tests/components/elgato/snapshots/test_light.ambr +++ b/tests/components/elgato/snapshots/test_light.ambr @@ -106,6 +106,7 @@ 'model': 'Elgato Key Light', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'CN11A1A00001', 'suggested_area': None, 'sw_version': '1.0.3 (192)', @@ -221,6 +222,7 @@ 'model': 'Elgato Light Strip', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'CN11A1A00001', 'suggested_area': None, 'sw_version': '1.0.3 (192)', @@ -336,6 +338,7 @@ 'model': 'Elgato Light Strip', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'CN11A1A00001', 'suggested_area': None, 'sw_version': '1.0.3 (192)', diff --git a/tests/components/elgato/snapshots/test_sensor.ambr b/tests/components/elgato/snapshots/test_sensor.ambr index 2b52d6b9f23..c2bcde7a66b 100644 --- a/tests/components/elgato/snapshots/test_sensor.ambr +++ b/tests/components/elgato/snapshots/test_sensor.ambr @@ -81,6 +81,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', @@ -172,6 +173,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', @@ -263,6 +265,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', @@ -351,6 +354,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', @@ -442,6 +446,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', diff --git a/tests/components/elgato/snapshots/test_switch.ambr b/tests/components/elgato/snapshots/test_switch.ambr index 41f3a8f3aaf..12857a71cb3 100644 --- a/tests/components/elgato/snapshots/test_switch.ambr +++ b/tests/components/elgato/snapshots/test_switch.ambr @@ -73,6 +73,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', @@ -153,6 +154,7 @@ 'model': 'Elgato Key Light Mini', 'name': 'Frenck', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GW24L1A02987', 'suggested_area': None, 'sw_version': '1.0.4 (229)', diff --git a/tests/components/energyzero/snapshots/test_sensor.ambr b/tests/components/energyzero/snapshots/test_sensor.ambr index 23b232379df..da52526192e 100644 --- a/tests/components/energyzero/snapshots/test_sensor.ambr +++ b/tests/components/energyzero/snapshots/test_sensor.ambr @@ -64,6 +64,7 @@ 'model': None, 'name': 'Energy market price', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -138,6 +139,7 @@ 'model': None, 'name': 'Energy market price', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -209,6 +211,7 @@ 'model': None, 'name': 'Energy market price', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -280,6 +283,7 @@ 'model': None, 'name': 'Energy market price', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -351,6 +355,7 @@ 'model': None, 'name': 'Energy market price', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -425,6 +430,7 @@ 'model': None, 'name': 'Gas market price', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/enphase_envoy/snapshots/test_diagnostics.ambr b/tests/components/enphase_envoy/snapshots/test_diagnostics.ambr index 008922e8d2b..acaee292237 100644 --- a/tests/components/enphase_envoy/snapshots/test_diagnostics.ambr +++ b/tests/components/enphase_envoy/snapshots/test_diagnostics.ambr @@ -48,6 +48,7 @@ 'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT', 'name': 'Envoy <>', 'name_by_user': None, + 'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72', 'serial_number': '<>', 'suggested_area': None, 'sw_version': '7.1.2', @@ -3772,6 +3773,7 @@ 'model': 'Inverter', 'name': 'Inverter 1', 'name_by_user': None, + 'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72', 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -4043,6 +4045,7 @@ 'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT', 'name': 'Envoy <>', 'name_by_user': None, + 'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72', 'serial_number': '<>', 'suggested_area': None, 'sw_version': '7.1.2', @@ -7767,6 +7770,7 @@ 'model': 'Inverter', 'name': 'Inverter 1', 'name_by_user': None, + 'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72', 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -8078,6 +8082,7 @@ 'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT', 'name': 'Envoy <>', 'name_by_user': None, + 'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72', 'serial_number': '<>', 'suggested_area': None, 'sw_version': '7.1.2', @@ -11802,6 +11807,7 @@ 'model': 'Inverter', 'name': 'Inverter 1', 'name_by_user': None, + 'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72', 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/gardena_bluetooth/snapshots/test_init.ambr b/tests/components/gardena_bluetooth/snapshots/test_init.ambr index 82e17896d60..8cd77136f8f 100644 --- a/tests/components/gardena_bluetooth/snapshots/test_init.ambr +++ b/tests/components/gardena_bluetooth/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'Mock Model', 'name': 'Mock Title', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.2.3', diff --git a/tests/components/homekit_controller/snapshots/test_init.ambr b/tests/components/homekit_controller/snapshots/test_init.ambr index c52bf2c3b27..394a442787d 100644 --- a/tests/components/homekit_controller/snapshots/test_init.ambr +++ b/tests/components/homekit_controller/snapshots/test_init.ambr @@ -26,6 +26,7 @@ 'model': 'AP2', 'name': 'Airversa AP2 1808', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1234', 'suggested_area': None, 'sw_version': '0.8.16', @@ -622,6 +623,7 @@ 'model': 'T8010', 'name': 'eufy HomeBase2-0AAA', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'A0000A000000000A', 'suggested_area': None, 'sw_version': '2.1.6', @@ -695,6 +697,7 @@ 'model': 'T8113', 'name': 'eufyCam2-0000', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'A0000A000000000D', 'suggested_area': None, 'sw_version': '1.6.7', @@ -936,6 +939,7 @@ 'model': 'T8113', 'name': 'eufyCam2-000A', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'A0000A000000000B', 'suggested_area': None, 'sw_version': '1.6.7', @@ -1177,6 +1181,7 @@ 'model': 'T8113', 'name': 'eufyCam2-000A', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'A0000A000000000C', 'suggested_area': None, 'sw_version': '1.6.7', @@ -1422,6 +1427,7 @@ 'model': 'HE1-G01', 'name': 'Aqara-Hub-E1-00A0', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '00aa00000a0', 'suggested_area': None, 'sw_version': '3.3.0', @@ -1628,6 +1634,7 @@ 'model': 'AS006', 'name': 'Contact Sensor', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '158d0007c59c6a', 'suggested_area': None, 'sw_version': '0', @@ -1792,6 +1799,7 @@ 'model': 'ZHWA11LM', 'name': 'Aqara Hub-1563', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '0000000123456789', 'suggested_area': None, 'sw_version': '1.4.7', @@ -2067,6 +2075,7 @@ 'model': 'AR004', 'name': 'Programmable Switch', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '111a1111a1a111', 'suggested_area': None, 'sw_version': '9', @@ -2190,6 +2199,7 @@ 'model': 'ABC1000', 'name': 'ArloBabyA0', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '00A0000000000', 'suggested_area': None, 'sw_version': '1.10.931', @@ -2674,6 +2684,7 @@ 'model': 'CS-IWO', 'name': 'InWall Outlet-0394DE', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1020301376', 'suggested_area': None, 'sw_version': '1.0.0', @@ -3103,6 +3114,7 @@ 'model': 'REMOTE SENSOR', 'name': 'Basement', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AB3C', 'suggested_area': None, 'sw_version': '1.0.0', @@ -3262,6 +3274,7 @@ 'model': 'ecobee3', 'name': 'HomeW', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '123456789012', 'suggested_area': None, 'sw_version': '4.2.394', @@ -3716,6 +3729,7 @@ 'model': 'REMOTE SENSOR', 'name': 'Kitchen', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AB1C', 'suggested_area': None, 'sw_version': '1.0.0', @@ -3875,6 +3889,7 @@ 'model': 'REMOTE SENSOR', 'name': 'Porch', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AB2C', 'suggested_area': None, 'sw_version': '1.0.0', @@ -4038,6 +4053,7 @@ 'model': 'ecobee3', 'name': 'HomeW', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '123456789012', 'suggested_area': None, 'sw_version': '4.2.394', @@ -4496,6 +4512,7 @@ 'model': 'REMOTE SENSOR', 'name': 'Basement', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AB3C', 'suggested_area': None, 'sw_version': '1.0.0', @@ -4610,6 +4627,7 @@ 'model': 'ecobee3', 'name': 'HomeW', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '123456789012', 'suggested_area': None, 'sw_version': '4.2.394', @@ -4891,6 +4909,7 @@ 'model': 'REMOTE SENSOR', 'name': 'Kitchen', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AB1C', 'suggested_area': None, 'sw_version': '1.0.0', @@ -5050,6 +5069,7 @@ 'model': 'REMOTE SENSOR', 'name': 'Porch', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AB2C', 'suggested_area': None, 'sw_version': '1.0.0', @@ -5213,6 +5233,7 @@ 'model': 'ECB501', 'name': 'My ecobee', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '123456789016', 'suggested_area': None, 'sw_version': '4.7.340214', @@ -5680,6 +5701,7 @@ 'model': 'ecobee Switch+', 'name': 'Master Fan', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '111111111111', 'suggested_area': None, 'sw_version': '4.5.130201', @@ -5969,6 +5991,7 @@ 'model': 'Eve Degree 00AAA0000', 'name': 'Eve Degree AA11', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AA00A0A00000', 'suggested_area': None, 'sw_version': '1.2.8', @@ -6325,6 +6348,7 @@ 'model': 'Eve Energy 20EAO8601', 'name': 'Eve Energy 50FF', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AA00A0A00000', 'suggested_area': None, 'sw_version': '1.2.9', @@ -6663,6 +6687,7 @@ 'model': 'RavenSystem HAA', 'name': 'HAA-C718B3', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'C718B3-1', 'suggested_area': None, 'sw_version': '5.0.18', @@ -6868,6 +6893,7 @@ 'model': 'RavenSystem HAA', 'name': 'HAA-C718B3', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'C718B3-2', 'suggested_area': None, 'sw_version': '5.0.18', @@ -7303,6 +7329,7 @@ 'model': 'RYSE Shade', 'name': 'Family Room North', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'cover.family_door_north', 'suggested_area': None, 'sw_version': '3.6.2', @@ -7464,6 +7491,7 @@ 'model': 'Bridge', 'name': 'HASS Bridge S6', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -7537,6 +7565,7 @@ 'model': 'RYSE Shade', 'name': 'Kitchen Window', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'cover.kitchen_window', 'suggested_area': None, 'sw_version': '3.6.2', @@ -7702,6 +7731,7 @@ 'model': 'Fan', 'name': 'Ceiling Fan', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'fan.ceiling_fan', 'suggested_area': None, 'sw_version': '0.104.0.dev0', @@ -7822,6 +7852,7 @@ 'model': 'Bridge', 'name': 'Home Assistant Bridge', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '0.104.0.dev0', @@ -7895,6 +7926,7 @@ 'model': 'Fan', 'name': 'Living Room Fan', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'fan.living_room_fan', 'suggested_area': None, 'sw_version': '0.104.0.dev0', @@ -8020,6 +8052,7 @@ 'model': 'Climate Control', 'name': '89 Living Room', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'climate.89_living_room', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -8342,6 +8375,7 @@ 'model': 'Bridge', 'name': 'HASS Bridge S6', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -8419,6 +8453,7 @@ 'model': 'Bridge', 'name': 'HASS Bridge S6', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -8492,6 +8527,7 @@ 'model': '1039102', 'name': 'Laundry Smoke ED78', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'light.laundry_smoke_ed78', 'suggested_area': None, 'sw_version': '1.4.84', @@ -8665,6 +8701,7 @@ 'model': 'RYSE Shade', 'name': 'Family Room North', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'cover.family_door_north', 'suggested_area': None, 'sw_version': '3.6.2', @@ -8826,6 +8863,7 @@ 'model': 'Bridge', 'name': 'HASS Bridge S6', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -8899,6 +8937,7 @@ 'model': 'RYSE Shade', 'name': 'Kitchen Window', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'cover.kitchen_window', 'suggested_area': None, 'sw_version': '3.6.2', @@ -9064,6 +9103,7 @@ 'model': 'Fan', 'name': 'Ceiling Fan', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'fan.ceiling_fan', 'suggested_area': None, 'sw_version': '0.104.0.dev0', @@ -9184,6 +9224,7 @@ 'model': 'Bridge', 'name': 'Home Assistant Bridge', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '0.104.0.dev0', @@ -9257,6 +9298,7 @@ 'model': 'Fan', 'name': 'Living Room Fan', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'fan.living_room_fan', 'suggested_area': None, 'sw_version': '0.104.0.dev0', @@ -9383,6 +9425,7 @@ 'model': 'Bridge', 'name': 'Home Assistant Bridge', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '0.104.0.dev0', @@ -9456,6 +9499,7 @@ 'model': 'Fan', 'name': 'Living Room Fan', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'fan.living_room_fan', 'suggested_area': None, 'sw_version': '0.104.0.dev0', @@ -9582,6 +9626,7 @@ 'model': 'Climate Control', 'name': '89 Living Room', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'climate.89_living_room', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -9913,6 +9958,7 @@ 'model': 'Bridge', 'name': 'HASS Bridge S6', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -9990,6 +10036,7 @@ 'model': 'Bridge', 'name': 'HASS Bridge S6', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -10063,6 +10110,7 @@ 'model': 'WoHumi', 'name': 'Humidifier 182A', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'humidifier.humidifier_182a', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -10243,6 +10291,7 @@ 'model': 'Bridge', 'name': 'HASS Bridge S6', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -10316,6 +10365,7 @@ 'model': 'WoHumi', 'name': 'Humidifier 182A', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'humidifier.humidifier_182a', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -10496,6 +10546,7 @@ 'model': 'Bridge', 'name': 'HASS Bridge S6', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'homekit.bridge', 'suggested_area': None, 'sw_version': '2024.2.0', @@ -10569,6 +10620,7 @@ 'model': '1039102', 'name': 'Laundry Smoke ED78', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'light.laundry_smoke_ed78', 'suggested_area': None, 'sw_version': '1.4.84', @@ -10757,6 +10809,7 @@ 'model': 'Daikin-fwec3a-esp32-homekit-bridge', 'name': 'Air Conditioner', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '00000001', 'suggested_area': None, 'sw_version': '1.0.0', @@ -10955,6 +11008,7 @@ 'model': 'LTW012', 'name': 'Hue ambiance candle', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462395276914', 'suggested_area': None, 'sw_version': '1.46.13', @@ -11091,6 +11145,7 @@ 'model': 'LTW012', 'name': 'Hue ambiance candle', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462395276939', 'suggested_area': None, 'sw_version': '1.46.13', @@ -11227,6 +11282,7 @@ 'model': 'LTW012', 'name': 'Hue ambiance candle', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462403113447', 'suggested_area': None, 'sw_version': '1.46.13', @@ -11363,6 +11419,7 @@ 'model': 'LTW012', 'name': 'Hue ambiance candle', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462403233419', 'suggested_area': None, 'sw_version': '1.46.13', @@ -11499,6 +11556,7 @@ 'model': 'LTW013', 'name': 'Hue ambiance spot', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462412411853', 'suggested_area': None, 'sw_version': '1.46.13', @@ -11645,6 +11703,7 @@ 'model': 'LTW013', 'name': 'Hue ambiance spot', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462412413293', 'suggested_area': None, 'sw_version': '1.46.13', @@ -11791,6 +11850,7 @@ 'model': 'RWL021', 'name': 'Hue dimmer switch', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462389072572', 'suggested_area': None, 'sw_version': '45.1.17846', @@ -12106,6 +12166,7 @@ 'model': 'LWB010', 'name': 'Hue white lamp', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462378982941', 'suggested_area': None, 'sw_version': '1.46.13', @@ -12229,6 +12290,7 @@ 'model': 'LWB010', 'name': 'Hue white lamp', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462378983942', 'suggested_area': None, 'sw_version': '1.46.13', @@ -12352,6 +12414,7 @@ 'model': 'LWB010', 'name': 'Hue white lamp', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462379122122', 'suggested_area': None, 'sw_version': '1.46.13', @@ -12475,6 +12538,7 @@ 'model': 'LWB010', 'name': 'Hue white lamp', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462379123707', 'suggested_area': None, 'sw_version': '1.46.13', @@ -12598,6 +12662,7 @@ 'model': 'LWB010', 'name': 'Hue white lamp', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462383114163', 'suggested_area': None, 'sw_version': '1.46.13', @@ -12721,6 +12786,7 @@ 'model': 'LWB010', 'name': 'Hue white lamp', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462383114193', 'suggested_area': None, 'sw_version': '1.46.13', @@ -12844,6 +12910,7 @@ 'model': 'LWB010', 'name': 'Hue white lamp', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '6623462385996792', 'suggested_area': None, 'sw_version': '1.46.13', @@ -12967,6 +13034,7 @@ 'model': 'BSB002', 'name': 'Philips hue - 482544', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '123456', 'suggested_area': None, 'sw_version': '1.32.1932126170', @@ -13044,6 +13112,7 @@ 'model': 'LS1', 'name': 'Koogeek-LS1-20833F', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AAAA011111111111', 'suggested_area': None, 'sw_version': '2.2.15', @@ -13186,6 +13255,7 @@ 'model': 'P1EU', 'name': 'Koogeek-P1-A00AA0', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'EUCP03190xxxxx48', 'suggested_area': None, 'sw_version': '2.3.7', @@ -13349,6 +13419,7 @@ 'model': 'KH02CN', 'name': 'Koogeek-SW2-187A91', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'CNNT061751001372', 'suggested_area': None, 'sw_version': '1.0.3', @@ -13551,6 +13622,7 @@ 'model': 'E30 2B', 'name': 'Lennox', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'XXXXXXXX', 'suggested_area': None, 'sw_version': '3.40.XX', @@ -13831,6 +13903,7 @@ 'model': 'OLED55B9PUA', 'name': 'LG webOS TV AF80', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '999AAAAAA999', 'suggested_area': None, 'sw_version': '04.71.04', @@ -14010,6 +14083,7 @@ 'model': 'PD-FSQN-XX', 'name': 'Caséta® Wireless Fan Speed Control', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '39024290', 'suggested_area': None, 'sw_version': '001.005', @@ -14130,6 +14204,7 @@ 'model': 'L-BDG2-WH', 'name': 'Smart Bridge 2', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '12344331', 'suggested_area': None, 'sw_version': '08.08', @@ -14207,6 +14282,7 @@ 'model': 'MSS425F', 'name': 'MSS425F-15cc', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'HH41234', 'suggested_area': None, 'sw_version': '4.2.3', @@ -14484,6 +14560,7 @@ 'model': 'MSS565', 'name': 'MSS565-28da', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'BB1121', 'suggested_area': None, 'sw_version': '4.1.9', @@ -14611,6 +14688,7 @@ 'model': 'v1', 'name': 'Mysa-85dda9', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AAAAAAA000', 'suggested_area': None, 'sw_version': '2.8.1', @@ -14939,6 +15017,7 @@ 'model': 'NL55', 'name': 'Nanoleaf Strip 3B32', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AAAA011111111111', 'suggested_area': None, 'sw_version': '1.4.40', @@ -15209,6 +15288,7 @@ 'model': 'Netatmo Doorbell', 'name': 'Netatmo-Doorbell-g738658', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'g738658', 'suggested_area': None, 'sw_version': '80.0.0', @@ -15501,6 +15581,7 @@ 'model': 'Smart CO Alarm', 'name': 'Smart CO Alarm', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1234', 'suggested_area': None, 'sw_version': '1.0.3', @@ -15660,6 +15741,7 @@ 'model': 'Healthy Home Coach', 'name': 'Healthy Home Coach', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AAAAAAAAAAAAA', 'suggested_area': None, 'sw_version': '59', @@ -15961,6 +16043,7 @@ 'model': 'SPK5 Pro', 'name': 'RainMachine-00ce4a', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '00aa0000aa0a', 'suggested_area': None, 'sw_version': '1.0.4', @@ -16382,6 +16465,7 @@ 'model': 'RYSE Shade', 'name': 'Master Bath South', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1.0.0', 'suggested_area': None, 'sw_version': '3.0.8', @@ -16543,6 +16627,7 @@ 'model': 'RYSE SmartBridge', 'name': 'RYSE SmartBridge', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '0101.3521.0436', 'suggested_area': None, 'sw_version': '1.3.0', @@ -16616,6 +16701,7 @@ 'model': 'RYSE Shade', 'name': 'RYSE SmartShade', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '', 'suggested_area': None, 'sw_version': '', @@ -16781,6 +16867,7 @@ 'model': 'RYSE Shade', 'name': 'BR Left', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1.0.0', 'suggested_area': None, 'sw_version': '3.0.8', @@ -16942,6 +17029,7 @@ 'model': 'RYSE Shade', 'name': 'LR Left', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1.0.0', 'suggested_area': None, 'sw_version': '3.0.8', @@ -17103,6 +17191,7 @@ 'model': 'RYSE Shade', 'name': 'LR Right', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1.0.0', 'suggested_area': None, 'sw_version': '3.0.8', @@ -17264,6 +17353,7 @@ 'model': 'RYSE SmartBridge', 'name': 'RYSE SmartBridge', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '0401.3521.0679', 'suggested_area': None, 'sw_version': '1.3.0', @@ -17337,6 +17427,7 @@ 'model': 'RYSE Shade', 'name': 'RZSS', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1.0.0', 'suggested_area': None, 'sw_version': '3.0.8', @@ -17502,6 +17593,7 @@ 'model': 'BE479CAM619', 'name': 'SENSE ', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AAAAAAA000', 'suggested_area': None, 'sw_version': '004.027.000', @@ -17620,6 +17712,7 @@ 'model': 'SIMPLEconnect', 'name': 'SIMPLEconnect Fan-06F674', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1234567890abcd', 'suggested_area': None, 'sw_version': '', @@ -17795,6 +17888,7 @@ 'model': 'VELUX Gateway', 'name': 'VELUX Gateway', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'a1a11a1', 'suggested_area': None, 'sw_version': '70', @@ -17868,6 +17962,7 @@ 'model': 'VELUX Sensor', 'name': 'VELUX Sensor', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'a11b111', 'suggested_area': None, 'sw_version': '16', @@ -18076,6 +18171,7 @@ 'model': 'VELUX Window', 'name': 'VELUX Window', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': '1111111a114a111a', 'suggested_area': None, 'sw_version': '48', @@ -18196,6 +18292,7 @@ 'model': 'Flowerbud', 'name': 'VOCOlinc-Flowerbud-0d324b', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'AM01121849000327', 'suggested_area': None, 'sw_version': '3.121.2', @@ -18500,6 +18597,7 @@ 'model': 'VP3', 'name': 'VOCOlinc-VP3-123456', 'name_by_user': None, + 'primary_config_entry': 'TestData', 'serial_number': 'EU0121203xxxxx07', 'suggested_area': None, 'sw_version': '1.101.2', diff --git a/tests/components/homekit_controller/test_connection.py b/tests/components/homekit_controller/test_connection.py index 0f2cdb7c9db..0a77509d675 100644 --- a/tests/components/homekit_controller/test_connection.py +++ b/tests/components/homekit_controller/test_connection.py @@ -118,7 +118,7 @@ async def test_migrate_device_id_no_serial_skip_if_other_owner( bridge = device_registry.async_get(bridge.id) assert bridge.identifiers == variant.before - assert bridge.config_entries == [entry.entry_id] + assert bridge.config_entries == {entry.entry_id} @pytest.mark.parametrize("variant", DEVICE_MIGRATION_TESTS) diff --git a/tests/components/homewizard/snapshots/test_button.ambr b/tests/components/homewizard/snapshots/test_button.ambr index 5ab108d344c..eabaeb648aa 100644 --- a/tests/components/homewizard/snapshots/test_button.ambr +++ b/tests/components/homewizard/snapshots/test_button.ambr @@ -74,6 +74,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', diff --git a/tests/components/homewizard/snapshots/test_number.ambr b/tests/components/homewizard/snapshots/test_number.ambr index a9c9e45098d..f292847f2a2 100644 --- a/tests/components/homewizard/snapshots/test_number.ambr +++ b/tests/components/homewizard/snapshots/test_number.ambr @@ -83,6 +83,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -173,6 +174,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', diff --git a/tests/components/homewizard/snapshots/test_sensor.ambr b/tests/components/homewizard/snapshots/test_sensor.ambr index 5e8ddc0d6be..27dfd6399c7 100644 --- a/tests/components/homewizard/snapshots/test_sensor.ambr +++ b/tests/components/homewizard/snapshots/test_sensor.ambr @@ -60,6 +60,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -145,6 +146,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -230,6 +232,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -315,6 +318,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -400,6 +404,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -485,6 +490,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -573,6 +579,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -658,6 +665,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -743,6 +751,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -828,6 +837,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -908,6 +918,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -992,6 +1003,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1077,6 +1089,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1162,6 +1175,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1247,6 +1261,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1332,6 +1347,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1417,6 +1433,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1502,6 +1519,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1587,6 +1605,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1672,6 +1691,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1757,6 +1777,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1842,6 +1863,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -1927,6 +1949,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2015,6 +2038,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2100,6 +2124,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2185,6 +2210,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2270,6 +2296,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2358,6 +2385,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2446,6 +2474,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2534,6 +2563,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2619,6 +2649,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2704,6 +2735,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2789,6 +2821,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2874,6 +2907,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -2959,6 +2993,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -3044,6 +3079,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -3129,6 +3165,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -3209,6 +3246,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -3293,6 +3331,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -3375,6 +3414,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -3460,6 +3500,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -3545,6 +3586,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -3630,6 +3672,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -3710,6 +3753,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -3795,6 +3839,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -3880,6 +3925,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -3965,6 +4011,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4050,6 +4097,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4135,6 +4183,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4220,6 +4269,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4305,6 +4355,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4390,6 +4441,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4475,6 +4527,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4560,6 +4613,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4645,6 +4699,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4725,6 +4780,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4807,6 +4863,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4895,6 +4952,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -4975,6 +5033,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5063,6 +5122,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5151,6 +5211,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5239,6 +5300,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5319,6 +5381,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5399,6 +5462,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5493,6 +5557,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5578,6 +5643,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5663,6 +5729,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5748,6 +5815,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5833,6 +5901,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5913,6 +5982,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -5993,6 +6063,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -6073,6 +6144,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -6153,6 +6225,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -6233,6 +6306,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -6313,6 +6387,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -6397,6 +6472,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -6477,6 +6553,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -6557,6 +6634,7 @@ 'model': 'HWE-P1', 'name': 'Gas meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'gas_meter_G001', 'suggested_area': None, 'sw_version': None, @@ -6638,6 +6716,7 @@ 'model': 'HWE-P1', 'name': 'Heat meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'heat_meter_H001', 'suggested_area': None, 'sw_version': None, @@ -6719,6 +6798,7 @@ 'model': 'HWE-P1', 'name': 'Inlet heat meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'inlet_heat_meter_IH001', 'suggested_area': None, 'sw_version': None, @@ -6799,6 +6879,7 @@ 'model': 'HWE-P1', 'name': 'Warm water meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'warm_water_meter_WW001', 'suggested_area': None, 'sw_version': None, @@ -6880,6 +6961,7 @@ 'model': 'HWE-P1', 'name': 'Water meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'water_meter_W001', 'suggested_area': None, 'sw_version': None, @@ -6965,6 +7047,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7047,6 +7130,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7132,6 +7216,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7217,6 +7302,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7302,6 +7388,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7382,6 +7469,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7467,6 +7555,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7552,6 +7641,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7637,6 +7727,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7722,6 +7813,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7807,6 +7899,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7892,6 +7985,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -7977,6 +8071,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8062,6 +8157,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8147,6 +8243,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8232,6 +8329,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8317,6 +8415,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8397,6 +8496,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8479,6 +8579,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8567,6 +8668,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8647,6 +8749,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8735,6 +8838,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8823,6 +8927,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8911,6 +9016,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -8991,6 +9097,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9071,6 +9178,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9165,6 +9273,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9250,6 +9359,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9335,6 +9445,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9420,6 +9531,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9505,6 +9617,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9585,6 +9698,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9665,6 +9779,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9745,6 +9860,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9825,6 +9941,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9905,6 +10022,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -9985,6 +10103,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -10069,6 +10188,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -10149,6 +10269,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -10229,6 +10350,7 @@ 'model': 'HWE-P1', 'name': 'Gas meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'gas_meter_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'suggested_area': None, 'sw_version': None, @@ -10310,6 +10432,7 @@ 'model': 'HWE-P1', 'name': 'Heat meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'heat_meter_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'suggested_area': None, 'sw_version': None, @@ -10391,6 +10514,7 @@ 'model': 'HWE-P1', 'name': 'Inlet heat meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'inlet_heat_meter_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'suggested_area': None, 'sw_version': None, @@ -10471,6 +10595,7 @@ 'model': 'HWE-P1', 'name': 'Warm water meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'warm_water_meter_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'suggested_area': None, 'sw_version': None, @@ -10552,6 +10677,7 @@ 'model': 'HWE-P1', 'name': 'Water meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'water_meter_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'suggested_area': None, 'sw_version': None, @@ -10637,6 +10763,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -10719,6 +10846,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -10804,6 +10932,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -10889,6 +11018,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -10974,6 +11104,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11059,6 +11190,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11144,6 +11276,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11229,6 +11362,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11314,6 +11448,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11399,6 +11534,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11484,6 +11620,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11569,6 +11706,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11654,6 +11792,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11739,6 +11878,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11824,6 +11964,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11909,6 +12050,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -11989,6 +12131,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12077,6 +12220,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12157,6 +12301,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12245,6 +12390,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12333,6 +12479,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12421,6 +12568,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12506,6 +12654,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12591,6 +12740,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12676,6 +12826,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12761,6 +12912,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12841,6 +12993,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -12921,6 +13074,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -13001,6 +13155,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -13081,6 +13236,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -13161,6 +13317,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -13241,6 +13398,7 @@ 'model': 'HWE-P1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.19', @@ -13325,6 +13483,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -13410,6 +13569,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -13495,6 +13655,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -13583,6 +13744,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -13671,6 +13833,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -13751,6 +13914,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -13835,6 +13999,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -13920,6 +14085,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14005,6 +14171,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14090,6 +14257,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14175,6 +14343,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14260,6 +14429,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14348,6 +14518,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14433,6 +14604,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14521,6 +14693,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14606,6 +14779,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14691,6 +14865,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14771,6 +14946,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -14855,6 +15031,7 @@ 'model': 'HWE-WTR', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '2.03', @@ -14940,6 +15117,7 @@ 'model': 'HWE-WTR', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '2.03', @@ -15024,6 +15202,7 @@ 'model': 'HWE-WTR', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '2.03', @@ -15104,6 +15283,7 @@ 'model': 'HWE-WTR', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '2.03', @@ -15188,6 +15368,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15273,6 +15454,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15358,6 +15540,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15443,6 +15626,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15528,6 +15712,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15613,6 +15798,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15701,6 +15887,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15786,6 +15973,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15871,6 +16059,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -15956,6 +16145,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16036,6 +16226,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16120,6 +16311,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16205,6 +16397,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16290,6 +16483,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16375,6 +16569,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16460,6 +16655,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16545,6 +16741,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16630,6 +16827,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16715,6 +16913,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16800,6 +16999,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16885,6 +17085,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -16970,6 +17171,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17055,6 +17257,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17143,6 +17346,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17228,6 +17432,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17313,6 +17518,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17398,6 +17604,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17486,6 +17693,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17574,6 +17782,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17662,6 +17871,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17747,6 +17957,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17832,6 +18043,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -17917,6 +18129,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -18002,6 +18215,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -18087,6 +18301,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -18172,6 +18387,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -18257,6 +18473,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -18337,6 +18554,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', diff --git a/tests/components/homewizard/snapshots/test_switch.ambr b/tests/components/homewizard/snapshots/test_switch.ambr index 99a5bcab6cb..ba630e2f0b4 100644 --- a/tests/components/homewizard/snapshots/test_switch.ambr +++ b/tests/components/homewizard/snapshots/test_switch.ambr @@ -73,6 +73,7 @@ 'model': 'HWE-KWH1', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -153,6 +154,7 @@ 'model': 'HWE-KWH3', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -234,6 +236,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -314,6 +317,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -394,6 +398,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.03', @@ -475,6 +480,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -555,6 +561,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -635,6 +642,7 @@ 'model': 'HWE-SKT', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '4.07', @@ -715,6 +723,7 @@ 'model': 'HWE-WTR', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '2.03', @@ -795,6 +804,7 @@ 'model': 'SDM230-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', @@ -875,6 +885,7 @@ 'model': 'SDM630-wifi', 'name': 'Device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '3.06', diff --git a/tests/components/husqvarna_automower/snapshots/test_init.ambr b/tests/components/husqvarna_automower/snapshots/test_init.ambr index c3a7191b4b9..efe1eb8bd51 100644 --- a/tests/components/husqvarna_automower/snapshots/test_init.ambr +++ b/tests/components/husqvarna_automower/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': '450XH-TEST', 'name': 'Test Mower 1', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 123, 'suggested_area': 'Garden', 'sw_version': None, diff --git a/tests/components/hyperion/test_camera.py b/tests/components/hyperion/test_camera.py index 41b66f4ad4a..0169759f328 100644 --- a/tests/components/hyperion/test_camera.py +++ b/tests/components/hyperion/test_camera.py @@ -198,7 +198,7 @@ async def test_device_info( device = device_registry.async_get_device(identifiers={(DOMAIN, device_id)}) assert device - assert device.config_entries == [TEST_CONFIG_ENTRY_ID] + assert device.config_entries == {TEST_CONFIG_ENTRY_ID} assert device.identifiers == {(DOMAIN, device_id)} assert device.manufacturer == HYPERION_MANUFACTURER_NAME assert device.model == HYPERION_MODEL_NAME diff --git a/tests/components/hyperion/test_light.py b/tests/components/hyperion/test_light.py index b7aef3ac2ac..e1e7711e702 100644 --- a/tests/components/hyperion/test_light.py +++ b/tests/components/hyperion/test_light.py @@ -803,7 +803,7 @@ async def test_device_info( device = device_registry.async_get_device(identifiers={(DOMAIN, device_id)}) assert device - assert device.config_entries == [TEST_CONFIG_ENTRY_ID] + assert device.config_entries == {TEST_CONFIG_ENTRY_ID} assert device.identifiers == {(DOMAIN, device_id)} assert device.manufacturer == HYPERION_MANUFACTURER_NAME assert device.model == HYPERION_MODEL_NAME diff --git a/tests/components/hyperion/test_sensor.py b/tests/components/hyperion/test_sensor.py index bc58c07ac7b..5ace34eaac0 100644 --- a/tests/components/hyperion/test_sensor.py +++ b/tests/components/hyperion/test_sensor.py @@ -66,7 +66,7 @@ async def test_device_info( device = device_registry.async_get_device(identifiers={(DOMAIN, device_identifer)}) assert device - assert device.config_entries == [TEST_CONFIG_ENTRY_ID] + assert device.config_entries == {TEST_CONFIG_ENTRY_ID} assert device.identifiers == {(DOMAIN, device_identifer)} assert device.manufacturer == HYPERION_MANUFACTURER_NAME assert device.model == HYPERION_MODEL_NAME diff --git a/tests/components/hyperion/test_switch.py b/tests/components/hyperion/test_switch.py index 17a1872f832..da458820c81 100644 --- a/tests/components/hyperion/test_switch.py +++ b/tests/components/hyperion/test_switch.py @@ -170,7 +170,7 @@ async def test_device_info( device = device_registry.async_get_device(identifiers={(DOMAIN, device_identifer)}) assert device - assert device.config_entries == [TEST_CONFIG_ENTRY_ID] + assert device.config_entries == {TEST_CONFIG_ENTRY_ID} assert device.identifiers == {(DOMAIN, device_identifer)} assert device.manufacturer == HYPERION_MANUFACTURER_NAME assert device.model == HYPERION_MODEL_NAME diff --git a/tests/components/ista_ecotrend/snapshots/test_init.ambr b/tests/components/ista_ecotrend/snapshots/test_init.ambr index a9d13510b54..c5dec7d9d56 100644 --- a/tests/components/ista_ecotrend/snapshots/test_init.ambr +++ b/tests/components/ista_ecotrend/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'ista EcoTrend', 'name': 'Luxemburger Str. 1', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -53,6 +54,7 @@ 'model': 'ista EcoTrend', 'name': 'Bahnhofsstr. 1A', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/kitchen_sink/snapshots/test_switch.ambr b/tests/components/kitchen_sink/snapshots/test_switch.ambr index 1cd903a59d6..277b4888e05 100644 --- a/tests/components/kitchen_sink/snapshots/test_switch.ambr +++ b/tests/components/kitchen_sink/snapshots/test_switch.ambr @@ -69,6 +69,7 @@ 'model': None, 'name': 'Outlet 1', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -99,6 +100,7 @@ 'model': None, 'name': 'Power strip with 2 sockets', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -175,6 +177,7 @@ 'model': None, 'name': 'Outlet 2', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -205,6 +208,7 @@ 'model': None, 'name': 'Power strip with 2 sockets', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/lamarzocco/snapshots/test_switch.ambr b/tests/components/lamarzocco/snapshots/test_switch.ambr index 09864be1d5c..0f462955a33 100644 --- a/tests/components/lamarzocco/snapshots/test_switch.ambr +++ b/tests/components/lamarzocco/snapshots/test_switch.ambr @@ -115,6 +115,7 @@ 'model': , 'name': 'GS01234', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'GS01234', 'suggested_area': None, 'sw_version': '1.40', diff --git a/tests/components/lifx/test_migration.py b/tests/components/lifx/test_migration.py index 62018790906..0604ee1c8a7 100644 --- a/tests/components/lifx/test_migration.py +++ b/tests/components/lifx/test_migration.py @@ -65,7 +65,7 @@ async def test_migration_device_online_end_to_end( assert migrated_entry is not None - assert device.config_entries == [migrated_entry.entry_id] + assert device.config_entries == {migrated_entry.entry_id} assert light_entity_reg.config_entry_id == migrated_entry.entry_id assert er.async_entries_for_config_entry(entity_reg, config_entry) == [] @@ -195,7 +195,7 @@ async def test_migration_device_online_end_to_end_after_downgrade( async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=20)) await hass.async_block_till_done() - assert device.config_entries == [config_entry.entry_id] + assert device.config_entries == {config_entry.entry_id} assert light_entity_reg.config_entry_id == config_entry.entry_id assert er.async_entries_for_config_entry(entity_reg, config_entry) == [] @@ -276,7 +276,7 @@ async def test_migration_device_online_end_to_end_ignores_other_devices( assert new_entry is not None assert legacy_entry is None - assert device.config_entries == [legacy_config_entry.entry_id] + assert device.config_entries == {legacy_config_entry.entry_id} assert light_entity_reg.config_entry_id == legacy_config_entry.entry_id assert ignored_entity_reg.config_entry_id == other_domain_config_entry.entry_id assert garbage_entity_reg.config_entry_id == legacy_config_entry.entry_id diff --git a/tests/components/lutron_caseta/test_logbook.py b/tests/components/lutron_caseta/test_logbook.py index 51c96b9d9a9..b6e8840c85c 100644 --- a/tests/components/lutron_caseta/test_logbook.py +++ b/tests/components/lutron_caseta/test_logbook.py @@ -111,7 +111,7 @@ async def test_humanify_lutron_caseta_button_event_integration_not_loaded( await hass.async_block_till_done() for device in device_registry.devices.values(): - if device.config_entries == [config_entry.entry_id]: + if device.config_entries == {config_entry.entry_id}: dr_device_id = device.id break diff --git a/tests/components/mealie/snapshots/test_init.ambr b/tests/components/mealie/snapshots/test_init.ambr index c2752d938e4..1333b292dac 100644 --- a/tests/components/mealie/snapshots/test_init.ambr +++ b/tests/components/mealie/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': None, 'name': 'Mealie', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/motioneye/test_camera.py b/tests/components/motioneye/test_camera.py index ccbdc022495..0f3a7d6f904 100644 --- a/tests/components/motioneye/test_camera.py +++ b/tests/components/motioneye/test_camera.py @@ -339,7 +339,7 @@ async def test_device_info( device = device_registry.async_get_device(identifiers={device_identifier}) assert device - assert device.config_entries == [TEST_CONFIG_ENTRY_ID] + assert device.config_entries == {TEST_CONFIG_ENTRY_ID} assert device.identifiers == {device_identifier} assert device.manufacturer == MOTIONEYE_MANUFACTURER assert device.model == MOTIONEYE_MANUFACTURER diff --git a/tests/components/mqtt/test_discovery.py b/tests/components/mqtt/test_discovery.py index 23dea310199..8c51e295998 100644 --- a/tests/components/mqtt/test_discovery.py +++ b/tests/components/mqtt/test_discovery.py @@ -965,10 +965,10 @@ async def test_cleanup_device_multiple_config_entries( connections={("mac", "12:34:56:AB:CD:EF")} ) assert device_entry is not None - assert device_entry.config_entries == [ - config_entry.entry_id, + assert device_entry.config_entries == { mqtt_config_entry.entry_id, - ] + config_entry.entry_id, + } entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor") assert entity_entry is not None @@ -991,7 +991,7 @@ async def test_cleanup_device_multiple_config_entries( ) assert device_entry is not None entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor") - assert device_entry.config_entries == [config_entry.entry_id] + assert device_entry.config_entries == {config_entry.entry_id} assert entity_entry is None # Verify state is removed @@ -1060,10 +1060,10 @@ async def test_cleanup_device_multiple_config_entries_mqtt( connections={("mac", "12:34:56:AB:CD:EF")} ) assert device_entry is not None - assert device_entry.config_entries == [ - config_entry.entry_id, + assert device_entry.config_entries == { mqtt_config_entry.entry_id, - ] + config_entry.entry_id, + } entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor") assert entity_entry is not None @@ -1084,7 +1084,7 @@ async def test_cleanup_device_multiple_config_entries_mqtt( ) assert device_entry is not None entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor") - assert device_entry.config_entries == [config_entry.entry_id] + assert device_entry.config_entries == {config_entry.entry_id} assert entity_entry is None # Verify state is removed diff --git a/tests/components/mqtt/test_tag.py b/tests/components/mqtt/test_tag.py index e70c06c2c4a..0d0765258f2 100644 --- a/tests/components/mqtt/test_tag.py +++ b/tests/components/mqtt/test_tag.py @@ -587,7 +587,7 @@ async def test_cleanup_tag( identifiers={("mqtt", "helloworld")} ) assert device_entry1 is not None - assert device_entry1.config_entries == [config_entry.entry_id, mqtt_entry.entry_id] + assert device_entry1.config_entries == {config_entry.entry_id, mqtt_entry.entry_id} device_entry2 = device_registry.async_get_device(identifiers={("mqtt", "hejhopp")}) assert device_entry2 is not None @@ -599,7 +599,7 @@ async def test_cleanup_tag( identifiers={("mqtt", "helloworld")} ) assert device_entry1 is not None - assert device_entry1.config_entries == [mqtt_entry.entry_id] + assert device_entry1.config_entries == {mqtt_entry.entry_id} device_entry2 = device_registry.async_get_device(identifiers={("mqtt", "hejhopp")}) assert device_entry2 is not None mqtt_mock.async_publish.assert_not_called() diff --git a/tests/components/netatmo/snapshots/test_init.ambr b/tests/components/netatmo/snapshots/test_init.ambr index 8f4b357fc5f..38a54f507a0 100644 --- a/tests/components/netatmo/snapshots/test_init.ambr +++ b/tests/components/netatmo/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'Roller Shutter', 'name': 'Entrance Blinds', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -53,6 +54,7 @@ 'model': 'Orientable Shutter', 'name': 'Bubendorff blind', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -83,6 +85,7 @@ 'model': '2 wire light switch/dimmer', 'name': 'Unknown 00:11:22:33:00:11:45:fe', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -113,6 +116,7 @@ 'model': 'Smarther with Netatmo', 'name': 'Corridor', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': 'Corridor', 'sw_version': None, @@ -143,6 +147,7 @@ 'model': 'Connected Energy Meter', 'name': 'Consumption meter', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -173,6 +178,7 @@ 'model': 'Light switch/dimmer with neutral', 'name': 'Bathroom light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -203,6 +209,7 @@ 'model': 'Connected Ecometer', 'name': 'Line 1', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -233,6 +240,7 @@ 'model': 'Connected Ecometer', 'name': 'Line 2', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -263,6 +271,7 @@ 'model': 'Connected Ecometer', 'name': 'Line 3', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -293,6 +302,7 @@ 'model': 'Connected Ecometer', 'name': 'Line 4', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -323,6 +333,7 @@ 'model': 'Connected Ecometer', 'name': 'Line 5', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -353,6 +364,7 @@ 'model': 'Connected Ecometer', 'name': 'Total', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -383,6 +395,7 @@ 'model': 'Connected Ecometer', 'name': 'Gas', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -413,6 +426,7 @@ 'model': 'Connected Ecometer', 'name': 'Hot water', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -443,6 +457,7 @@ 'model': 'Connected Ecometer', 'name': 'Cold water', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -473,6 +488,7 @@ 'model': 'Connected Ecometer', 'name': 'Écocompteur', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -503,6 +519,7 @@ 'model': 'Smart Indoor Camera', 'name': 'Hall', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -533,6 +550,7 @@ 'model': 'Smart Anemometer', 'name': 'Villa Garden', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -563,6 +581,7 @@ 'model': 'Smart Outdoor Camera', 'name': 'Front', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -593,6 +612,7 @@ 'model': 'Smart Video Doorbell', 'name': 'Netatmo-Doorbell', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -623,6 +643,7 @@ 'model': 'Smart Indoor Air Quality Monitor', 'name': 'Kitchen', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -653,6 +674,7 @@ 'model': 'Smart Indoor Air Quality Monitor', 'name': 'Livingroom', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -683,6 +705,7 @@ 'model': 'Smart Indoor Air Quality Monitor', 'name': 'Baby Bedroom', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -713,6 +736,7 @@ 'model': 'Smart Indoor Air Quality Monitor', 'name': 'Bedroom', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -743,6 +767,7 @@ 'model': 'Smart Indoor Air Quality Monitor', 'name': 'Parents Bedroom', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -773,6 +798,7 @@ 'model': 'Plug', 'name': 'Prise', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -803,6 +829,7 @@ 'model': 'Smart Outdoor Module', 'name': 'Villa Outdoor', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -833,6 +860,7 @@ 'model': 'Smart Indoor Module', 'name': 'Villa Bedroom', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -863,6 +891,7 @@ 'model': 'Smart Indoor Module', 'name': 'Villa Bathroom', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -893,6 +922,7 @@ 'model': 'Smart Home Weather station', 'name': 'Villa', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -923,6 +953,7 @@ 'model': 'Smart Rain Gauge', 'name': 'Villa Rain', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -953,6 +984,7 @@ 'model': 'OpenTherm Modulating Thermostat', 'name': 'Bureau Modulate', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': 'Bureau', 'sw_version': None, @@ -983,6 +1015,7 @@ 'model': 'Smart Thermostat', 'name': 'Livingroom', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': 'Livingroom', 'sw_version': None, @@ -1013,6 +1046,7 @@ 'model': 'Smart Valve', 'name': 'Valve1', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': 'Entrada', 'sw_version': None, @@ -1043,6 +1077,7 @@ 'model': 'Smart Valve', 'name': 'Valve2', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': 'Cocina', 'sw_version': None, @@ -1073,6 +1108,7 @@ 'model': 'Climate', 'name': 'MYHOME', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1103,6 +1139,7 @@ 'model': 'Public Weather station', 'name': 'Home avg', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1133,6 +1170,7 @@ 'model': 'Public Weather station', 'name': 'Home max', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/netgear_lte/snapshots/test_init.ambr b/tests/components/netgear_lte/snapshots/test_init.ambr index 8af22f98e02..e893d36a06e 100644 --- a/tests/components/netgear_lte/snapshots/test_init.ambr +++ b/tests/components/netgear_lte/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'LM1200', 'name': 'Netgear LM1200', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'FFFFFFFFFFFFF', 'suggested_area': None, 'sw_version': 'EC25AFFDR07A09M4G', diff --git a/tests/components/ondilo_ico/snapshots/test_init.ambr b/tests/components/ondilo_ico/snapshots/test_init.ambr index c488b1e3c15..355c5902722 100644 --- a/tests/components/ondilo_ico/snapshots/test_init.ambr +++ b/tests/components/ondilo_ico/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'ICO', 'name': 'Pool 1', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.7.1-stable', @@ -53,6 +54,7 @@ 'model': 'ICO', 'name': 'Pool 2', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.7.1-stable', diff --git a/tests/components/onewire/snapshots/test_binary_sensor.ambr b/tests/components/onewire/snapshots/test_binary_sensor.ambr index 999794ec20d..b3d330291ab 100644 --- a/tests/components/onewire/snapshots/test_binary_sensor.ambr +++ b/tests/components/onewire/snapshots/test_binary_sensor.ambr @@ -36,6 +36,7 @@ 'model': 'DS2405', 'name': '05.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -76,6 +77,7 @@ 'model': 'DS18S20', 'name': '10.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -116,6 +118,7 @@ 'model': 'DS2406', 'name': '12.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -256,6 +259,7 @@ 'model': 'DS2423', 'name': '1D.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -296,6 +300,7 @@ 'model': 'DS2409', 'name': '1F.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -324,6 +329,7 @@ 'model': 'DS2423', 'name': '1D.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -364,6 +370,7 @@ 'model': 'DS1822', 'name': '22.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -404,6 +411,7 @@ 'model': 'DS2438', 'name': '26.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -444,6 +452,7 @@ 'model': 'DS18B20', 'name': '28.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -484,6 +493,7 @@ 'model': 'DS18B20', 'name': '28.222222222222', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -524,6 +534,7 @@ 'model': 'DS18B20', 'name': '28.222222222223', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -564,6 +575,7 @@ 'model': 'DS2408', 'name': '29.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -956,6 +968,7 @@ 'model': 'DS2760', 'name': '30.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -996,6 +1009,7 @@ 'model': 'DS2413', 'name': '3A.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1124,6 +1138,7 @@ 'model': 'DS1825', 'name': '3B.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1164,6 +1179,7 @@ 'model': 'DS28EA00', 'name': '42.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1204,6 +1220,7 @@ 'model': 'EDS0068', 'name': '7E.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1244,6 +1261,7 @@ 'model': 'EDS0066', 'name': '7E.222222222222', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1284,6 +1302,7 @@ 'model': 'DS2438', 'name': 'A6.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1324,6 +1343,7 @@ 'model': 'HobbyBoards_EF', 'name': 'EF.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1364,6 +1384,7 @@ 'model': 'HB_MOISTURE_METER', 'name': 'EF.111111111112', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1404,6 +1425,7 @@ 'model': 'HB_HUB', 'name': 'EF.111111111113', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/onewire/snapshots/test_sensor.ambr b/tests/components/onewire/snapshots/test_sensor.ambr index 59ed167197d..acf9ea6a8c8 100644 --- a/tests/components/onewire/snapshots/test_sensor.ambr +++ b/tests/components/onewire/snapshots/test_sensor.ambr @@ -36,6 +36,7 @@ 'model': 'DS2405', 'name': '05.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -76,6 +77,7 @@ 'model': 'DS18S20', 'name': '10.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -165,6 +167,7 @@ 'model': 'DS2406', 'name': '12.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -315,6 +318,7 @@ 'model': 'DS2423', 'name': '1D.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -451,6 +455,7 @@ 'model': 'DS2409', 'name': '1F.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -479,6 +484,7 @@ 'model': 'DS2423', 'name': '1D.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -615,6 +621,7 @@ 'model': 'DS1822', 'name': '22.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -704,6 +711,7 @@ 'model': 'DS2438', 'name': '26.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1283,6 +1291,7 @@ 'model': 'DS18B20', 'name': '28.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1372,6 +1381,7 @@ 'model': 'DS18B20', 'name': '28.222222222222', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1461,6 +1471,7 @@ 'model': 'DS18B20', 'name': '28.222222222223', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1550,6 +1561,7 @@ 'model': 'DS2408', 'name': '29.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1590,6 +1602,7 @@ 'model': 'DS2760', 'name': '30.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1826,6 +1839,7 @@ 'model': 'DS2413', 'name': '3A.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1866,6 +1880,7 @@ 'model': 'DS1825', 'name': '3B.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1955,6 +1970,7 @@ 'model': 'DS28EA00', 'name': '42.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -2044,6 +2060,7 @@ 'model': 'EDS0068', 'name': '7E.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -2280,6 +2297,7 @@ 'model': 'EDS0066', 'name': '7E.222222222222', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -2418,6 +2436,7 @@ 'model': 'DS2438', 'name': 'A6.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -2997,6 +3016,7 @@ 'model': 'HobbyBoards_EF', 'name': 'EF.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -3184,6 +3204,7 @@ 'model': 'HB_MOISTURE_METER', 'name': 'EF.111111111112', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -3420,6 +3441,7 @@ 'model': 'HB_HUB', 'name': 'EF.111111111113', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/onewire/snapshots/test_switch.ambr b/tests/components/onewire/snapshots/test_switch.ambr index 8fd1e2aeef6..d6cbb6f3fef 100644 --- a/tests/components/onewire/snapshots/test_switch.ambr +++ b/tests/components/onewire/snapshots/test_switch.ambr @@ -36,6 +36,7 @@ 'model': 'DS2405', 'name': '05.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -120,6 +121,7 @@ 'model': 'DS18S20', 'name': '10.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -160,6 +162,7 @@ 'model': 'DS2406', 'name': '12.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -388,6 +391,7 @@ 'model': 'DS2423', 'name': '1D.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -428,6 +432,7 @@ 'model': 'DS2409', 'name': '1F.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -456,6 +461,7 @@ 'model': 'DS2423', 'name': '1D.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -496,6 +502,7 @@ 'model': 'DS1822', 'name': '22.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -536,6 +543,7 @@ 'model': 'DS2438', 'name': '26.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -620,6 +628,7 @@ 'model': 'DS18B20', 'name': '28.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -660,6 +669,7 @@ 'model': 'DS18B20', 'name': '28.222222222222', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -700,6 +710,7 @@ 'model': 'DS18B20', 'name': '28.222222222223', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -740,6 +751,7 @@ 'model': 'DS2408', 'name': '29.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1484,6 +1496,7 @@ 'model': 'DS2760', 'name': '30.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1524,6 +1537,7 @@ 'model': 'DS2413', 'name': '3A.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1652,6 +1666,7 @@ 'model': 'DS1825', 'name': '3B.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1692,6 +1707,7 @@ 'model': 'DS28EA00', 'name': '42.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1732,6 +1748,7 @@ 'model': 'EDS0068', 'name': '7E.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1772,6 +1789,7 @@ 'model': 'EDS0066', 'name': '7E.222222222222', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1812,6 +1830,7 @@ 'model': 'DS2438', 'name': 'A6.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1896,6 +1915,7 @@ 'model': 'HobbyBoards_EF', 'name': 'EF.111111111111', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1936,6 +1956,7 @@ 'model': 'HB_MOISTURE_METER', 'name': 'EF.111111111112', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -2328,6 +2349,7 @@ 'model': 'HB_HUB', 'name': 'EF.111111111113', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/renault/snapshots/test_binary_sensor.ambr b/tests/components/renault/snapshots/test_binary_sensor.ambr index 7f30faac38e..8f49d7ef761 100644 --- a/tests/components/renault/snapshots/test_binary_sensor.ambr +++ b/tests/components/renault/snapshots/test_binary_sensor.ambr @@ -24,6 +24,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -322,6 +323,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -706,6 +708,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -874,6 +877,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', @@ -1300,6 +1304,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -1598,6 +1603,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -1982,6 +1988,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -2150,6 +2157,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', diff --git a/tests/components/renault/snapshots/test_button.ambr b/tests/components/renault/snapshots/test_button.ambr index daef84b5c0a..7fa37319b2e 100644 --- a/tests/components/renault/snapshots/test_button.ambr +++ b/tests/components/renault/snapshots/test_button.ambr @@ -24,6 +24,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -106,6 +107,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -272,6 +274,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -438,6 +441,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', @@ -604,6 +608,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -686,6 +691,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -852,6 +858,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -1018,6 +1025,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', diff --git a/tests/components/renault/snapshots/test_device_tracker.ambr b/tests/components/renault/snapshots/test_device_tracker.ambr index 8fe1713dc0b..61232d0268d 100644 --- a/tests/components/renault/snapshots/test_device_tracker.ambr +++ b/tests/components/renault/snapshots/test_device_tracker.ambr @@ -24,6 +24,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -107,6 +108,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -190,6 +192,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -230,6 +233,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', @@ -313,6 +317,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -399,6 +404,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -485,6 +491,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -525,6 +532,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', diff --git a/tests/components/renault/snapshots/test_select.ambr b/tests/components/renault/snapshots/test_select.ambr index 0722cb5cab3..30181fd3b9c 100644 --- a/tests/components/renault/snapshots/test_select.ambr +++ b/tests/components/renault/snapshots/test_select.ambr @@ -24,6 +24,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -64,6 +65,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -159,6 +161,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -254,6 +257,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', @@ -349,6 +353,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -389,6 +394,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -484,6 +490,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -579,6 +586,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', diff --git a/tests/components/renault/snapshots/test_sensor.ambr b/tests/components/renault/snapshots/test_sensor.ambr index 5909c66bc5c..1ae033101d4 100644 --- a/tests/components/renault/snapshots/test_sensor.ambr +++ b/tests/components/renault/snapshots/test_sensor.ambr @@ -24,6 +24,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -332,6 +333,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -1085,6 +1087,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -1834,6 +1837,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', @@ -2626,6 +2630,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -2934,6 +2939,7 @@ 'model': 'Captur ii', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'XJB1SU', @@ -3687,6 +3693,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X101VE', @@ -4436,6 +4443,7 @@ 'model': 'Zoe', 'name': 'REG-NUMBER', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'X102VE', diff --git a/tests/components/rova/snapshots/test_init.ambr b/tests/components/rova/snapshots/test_init.ambr index 340b0e6d472..ffb08ee082e 100644 --- a/tests/components/rova/snapshots/test_init.ambr +++ b/tests/components/rova/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': None, 'name': '8381BE 13', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/sfr_box/snapshots/test_binary_sensor.ambr b/tests/components/sfr_box/snapshots/test_binary_sensor.ambr index 7422c1395c3..f14ec98a418 100644 --- a/tests/components/sfr_box/snapshots/test_binary_sensor.ambr +++ b/tests/components/sfr_box/snapshots/test_binary_sensor.ambr @@ -24,6 +24,7 @@ 'model': 'NB6VAC-FXC-r0', 'name': 'SFR Box', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'NB6VAC-MAIN-R4.0.44k', @@ -150,6 +151,7 @@ 'model': 'NB6VAC-FXC-r0', 'name': 'SFR Box', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'NB6VAC-MAIN-R4.0.44k', diff --git a/tests/components/sfr_box/snapshots/test_button.ambr b/tests/components/sfr_box/snapshots/test_button.ambr index 0dfbf187f6d..eee419bf373 100644 --- a/tests/components/sfr_box/snapshots/test_button.ambr +++ b/tests/components/sfr_box/snapshots/test_button.ambr @@ -24,6 +24,7 @@ 'model': 'NB6VAC-FXC-r0', 'name': 'SFR Box', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'NB6VAC-MAIN-R4.0.44k', diff --git a/tests/components/sfr_box/snapshots/test_sensor.ambr b/tests/components/sfr_box/snapshots/test_sensor.ambr index 0f39eed9e60..649c94c89dc 100644 --- a/tests/components/sfr_box/snapshots/test_sensor.ambr +++ b/tests/components/sfr_box/snapshots/test_sensor.ambr @@ -24,6 +24,7 @@ 'model': 'NB6VAC-FXC-r0', 'name': 'SFR Box', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': 'NB6VAC-MAIN-R4.0.44k', diff --git a/tests/components/tailwind/snapshots/test_binary_sensor.ambr b/tests/components/tailwind/snapshots/test_binary_sensor.ambr index ea2a539363d..20a3282db55 100644 --- a/tests/components/tailwind/snapshots/test_binary_sensor.ambr +++ b/tests/components/tailwind/snapshots/test_binary_sensor.ambr @@ -70,6 +70,7 @@ 'model': 'iQ3', 'name': 'Door 1', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '10.10', @@ -147,6 +148,7 @@ 'model': 'iQ3', 'name': 'Door 2', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '10.10', diff --git a/tests/components/tailwind/snapshots/test_button.ambr b/tests/components/tailwind/snapshots/test_button.ambr index 560d3fe692c..3ddbbb3f81d 100644 --- a/tests/components/tailwind/snapshots/test_button.ambr +++ b/tests/components/tailwind/snapshots/test_button.ambr @@ -74,6 +74,7 @@ 'model': 'iQ3', 'name': 'Tailwind iQ3', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '10.10', diff --git a/tests/components/tailwind/snapshots/test_cover.ambr b/tests/components/tailwind/snapshots/test_cover.ambr index 0ecd172b2ca..4ac6d6adc7d 100644 --- a/tests/components/tailwind/snapshots/test_cover.ambr +++ b/tests/components/tailwind/snapshots/test_cover.ambr @@ -71,6 +71,7 @@ 'model': 'iQ3', 'name': 'Door 1', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '10.10', @@ -149,6 +150,7 @@ 'model': 'iQ3', 'name': 'Door 2', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '10.10', diff --git a/tests/components/tailwind/snapshots/test_number.ambr b/tests/components/tailwind/snapshots/test_number.ambr index cbd61d31a6c..b4e73f4b2aa 100644 --- a/tests/components/tailwind/snapshots/test_number.ambr +++ b/tests/components/tailwind/snapshots/test_number.ambr @@ -83,6 +83,7 @@ 'model': 'iQ3', 'name': 'Tailwind iQ3', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '10.10', diff --git a/tests/components/tasmota/test_discovery.py b/tests/components/tasmota/test_discovery.py index 5405e6c417d..91832f1f2f0 100644 --- a/tests/components/tasmota/test_discovery.py +++ b/tests/components/tasmota/test_discovery.py @@ -340,7 +340,7 @@ async def test_device_remove_multiple_config_entries_1( connections={(dr.CONNECTION_NETWORK_MAC, mac)} ) assert device_entry is not None - assert device_entry.config_entries == [tasmota_entry.entry_id, mock_entry.entry_id] + assert device_entry.config_entries == {tasmota_entry.entry_id, mock_entry.entry_id} async_fire_mqtt_message( hass, @@ -354,7 +354,7 @@ async def test_device_remove_multiple_config_entries_1( connections={(dr.CONNECTION_NETWORK_MAC, mac)} ) assert device_entry is not None - assert device_entry.config_entries == [mock_entry.entry_id] + assert device_entry.config_entries == {mock_entry.entry_id} async def test_device_remove_multiple_config_entries_2( @@ -396,7 +396,7 @@ async def test_device_remove_multiple_config_entries_2( connections={(dr.CONNECTION_NETWORK_MAC, mac)} ) assert device_entry is not None - assert device_entry.config_entries == [tasmota_entry.entry_id, mock_entry.entry_id] + assert device_entry.config_entries == {tasmota_entry.entry_id, mock_entry.entry_id} assert other_device_entry.id != device_entry.id # Remove other config entry from the device @@ -410,7 +410,7 @@ async def test_device_remove_multiple_config_entries_2( connections={(dr.CONNECTION_NETWORK_MAC, mac)} ) assert device_entry is not None - assert device_entry.config_entries == [tasmota_entry.entry_id] + assert device_entry.config_entries == {tasmota_entry.entry_id} mqtt_mock.async_publish.assert_not_called() # Remove other config entry from the other device - Tasmota should not do any cleanup diff --git a/tests/components/tedee/snapshots/test_init.ambr b/tests/components/tedee/snapshots/test_init.ambr index 83ab032dfb4..c91fb3ca484 100644 --- a/tests/components/tedee/snapshots/test_init.ambr +++ b/tests/components/tedee/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'Bridge', 'name': 'Bridge-AB1C', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': '0000-0000', 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/tedee/snapshots/test_lock.ambr b/tests/components/tedee/snapshots/test_lock.ambr index 8e4fc464479..8fa8ab7668d 100644 --- a/tests/components/tedee/snapshots/test_lock.ambr +++ b/tests/components/tedee/snapshots/test_lock.ambr @@ -70,6 +70,7 @@ 'model': 'Tedee PRO', 'name': 'Lock-1A2B', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -147,6 +148,7 @@ 'model': 'Tedee GO', 'name': 'Lock-2C3D', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/teslemetry/snapshots/test_init.ambr b/tests/components/teslemetry/snapshots/test_init.ambr index 951e4557bdd..e5dd23ada6e 100644 --- a/tests/components/teslemetry/snapshots/test_init.ambr +++ b/tests/components/teslemetry/snapshots/test_init.ambr @@ -23,6 +23,7 @@ 'model': 'Powerwall 2, Tesla Backup Gateway 2', 'name': 'Energy Site', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': '123456', 'suggested_area': None, 'sw_version': None, @@ -53,6 +54,7 @@ 'model': 'Model X', 'name': 'Test', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': 'LRWXF7EK4KC700000', 'suggested_area': None, 'sw_version': None, @@ -83,6 +85,7 @@ 'model': 'Gen 3 Wall Connector', 'name': 'Wall Connector', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': '123', 'suggested_area': None, 'sw_version': None, @@ -113,6 +116,7 @@ 'model': 'Gen 3 Wall Connector', 'name': 'Wall Connector', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': '234', 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/tplink/snapshots/test_binary_sensor.ambr b/tests/components/tplink/snapshots/test_binary_sensor.ambr index 27b1372df27..b45494d1001 100644 --- a/tests/components/tplink/snapshots/test_binary_sensor.ambr +++ b/tests/components/tplink/snapshots/test_binary_sensor.ambr @@ -361,6 +361,7 @@ 'model': 'HS100', 'name': 'my_device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.0.0', diff --git a/tests/components/tplink/snapshots/test_button.ambr b/tests/components/tplink/snapshots/test_button.ambr index f26829101f7..0167256877d 100644 --- a/tests/components/tplink/snapshots/test_button.ambr +++ b/tests/components/tplink/snapshots/test_button.ambr @@ -119,6 +119,7 @@ 'model': 'HS100', 'name': 'my_device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.0.0', diff --git a/tests/components/tplink/snapshots/test_climate.ambr b/tests/components/tplink/snapshots/test_climate.ambr index d30f8cd3532..4bdfe52b9b1 100644 --- a/tests/components/tplink/snapshots/test_climate.ambr +++ b/tests/components/tplink/snapshots/test_climate.ambr @@ -86,6 +86,7 @@ 'model': 'HS100', 'name': 'thermostat', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.0.0', diff --git a/tests/components/tplink/snapshots/test_fan.ambr b/tests/components/tplink/snapshots/test_fan.ambr index d692abdce03..0a51909affe 100644 --- a/tests/components/tplink/snapshots/test_fan.ambr +++ b/tests/components/tplink/snapshots/test_fan.ambr @@ -186,6 +186,7 @@ 'model': 'HS100', 'name': 'my_device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.0.0', diff --git a/tests/components/tplink/snapshots/test_number.ambr b/tests/components/tplink/snapshots/test_number.ambr index 9bfc9c0126a..8cda0a728b3 100644 --- a/tests/components/tplink/snapshots/test_number.ambr +++ b/tests/components/tplink/snapshots/test_number.ambr @@ -27,6 +27,7 @@ 'model': 'HS100', 'name': 'my_device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.0.0', diff --git a/tests/components/tplink/snapshots/test_select.ambr b/tests/components/tplink/snapshots/test_select.ambr index 2cf02415238..555b0eb74d1 100644 --- a/tests/components/tplink/snapshots/test_select.ambr +++ b/tests/components/tplink/snapshots/test_select.ambr @@ -27,6 +27,7 @@ 'model': 'HS100', 'name': 'my_device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.0.0', diff --git a/tests/components/tplink/snapshots/test_sensor.ambr b/tests/components/tplink/snapshots/test_sensor.ambr index cd8980bf57f..46fe897500f 100644 --- a/tests/components/tplink/snapshots/test_sensor.ambr +++ b/tests/components/tplink/snapshots/test_sensor.ambr @@ -27,6 +27,7 @@ 'model': 'HS100', 'name': 'my_device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.0.0', diff --git a/tests/components/tplink/snapshots/test_switch.ambr b/tests/components/tplink/snapshots/test_switch.ambr index 2fe1f6e6b08..65eead6ddf4 100644 --- a/tests/components/tplink/snapshots/test_switch.ambr +++ b/tests/components/tplink/snapshots/test_switch.ambr @@ -27,6 +27,7 @@ 'model': 'HS100', 'name': 'my_device', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '1.0.0', diff --git a/tests/components/twentemilieu/snapshots/test_calendar.ambr b/tests/components/twentemilieu/snapshots/test_calendar.ambr index 78b2d56afca..e6de21fdca1 100644 --- a/tests/components/twentemilieu/snapshots/test_calendar.ambr +++ b/tests/components/twentemilieu/snapshots/test_calendar.ambr @@ -101,6 +101,7 @@ 'model': None, 'name': 'Twente Milieu', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/twentemilieu/snapshots/test_sensor.ambr b/tests/components/twentemilieu/snapshots/test_sensor.ambr index a0f3b75da57..22dcb0331cd 100644 --- a/tests/components/twentemilieu/snapshots/test_sensor.ambr +++ b/tests/components/twentemilieu/snapshots/test_sensor.ambr @@ -70,6 +70,7 @@ 'model': None, 'name': 'Twente Milieu', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -147,6 +148,7 @@ 'model': None, 'name': 'Twente Milieu', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -224,6 +226,7 @@ 'model': None, 'name': 'Twente Milieu', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -301,6 +304,7 @@ 'model': None, 'name': 'Twente Milieu', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -378,6 +382,7 @@ 'model': None, 'name': 'Twente Milieu', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/uptime/snapshots/test_sensor.ambr b/tests/components/uptime/snapshots/test_sensor.ambr index 0e7ae6dceaa..92baf939eb3 100644 --- a/tests/components/uptime/snapshots/test_sensor.ambr +++ b/tests/components/uptime/snapshots/test_sensor.ambr @@ -63,6 +63,7 @@ 'model': None, 'name': 'Uptime', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/vesync/snapshots/test_fan.ambr b/tests/components/vesync/snapshots/test_fan.ambr index 59304e92d9d..a9210447f1e 100644 --- a/tests/components/vesync/snapshots/test_fan.ambr +++ b/tests/components/vesync/snapshots/test_fan.ambr @@ -24,6 +24,7 @@ 'model': 'LV-PUR131S', 'name': 'Air Purifier 131s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -114,6 +115,7 @@ 'model': 'Core200S', 'name': 'Air Purifier 200s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -209,6 +211,7 @@ 'model': 'LAP-C401S-WJP', 'name': 'Air Purifier 400s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -306,6 +309,7 @@ 'model': 'LAP-C601S-WUS', 'name': 'Air Purifier 600s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -403,6 +407,7 @@ 'model': 'ESL100', 'name': 'Dimmable Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -439,6 +444,7 @@ 'model': 'ESWD16', 'name': 'Dimmer Switch', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -491,6 +497,7 @@ 'model': 'wifi-switch-1.3', 'name': 'Outlet', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -527,6 +534,7 @@ 'model': 'ESL100CW', 'name': 'Temperature Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -563,6 +571,7 @@ 'model': 'ESWL01', 'name': 'Wall Switch', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/vesync/snapshots/test_light.ambr b/tests/components/vesync/snapshots/test_light.ambr index 9990395a36c..c2c9854fa9f 100644 --- a/tests/components/vesync/snapshots/test_light.ambr +++ b/tests/components/vesync/snapshots/test_light.ambr @@ -24,6 +24,7 @@ 'model': 'LV-PUR131S', 'name': 'Air Purifier 131s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -60,6 +61,7 @@ 'model': 'Core200S', 'name': 'Air Purifier 200s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -96,6 +98,7 @@ 'model': 'LAP-C401S-WJP', 'name': 'Air Purifier 400s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -132,6 +135,7 @@ 'model': 'LAP-C601S-WUS', 'name': 'Air Purifier 600s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -168,6 +172,7 @@ 'model': 'ESL100', 'name': 'Dimmable Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -256,6 +261,7 @@ 'model': 'ESWD16', 'name': 'Dimmer Switch', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -362,6 +368,7 @@ 'model': 'wifi-switch-1.3', 'name': 'Outlet', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -398,6 +405,7 @@ 'model': 'ESL100CW', 'name': 'Temperature Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -501,6 +509,7 @@ 'model': 'ESWL01', 'name': 'Wall Switch', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/vesync/snapshots/test_sensor.ambr b/tests/components/vesync/snapshots/test_sensor.ambr index 268718fb2fe..97013b4e9ce 100644 --- a/tests/components/vesync/snapshots/test_sensor.ambr +++ b/tests/components/vesync/snapshots/test_sensor.ambr @@ -24,6 +24,7 @@ 'model': 'LV-PUR131S', 'name': 'Air Purifier 131s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -152,6 +153,7 @@ 'model': 'Core200S', 'name': 'Air Purifier 200s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -236,6 +238,7 @@ 'model': 'LAP-C401S-WJP', 'name': 'Air Purifier 400s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -413,6 +416,7 @@ 'model': 'LAP-C601S-WUS', 'name': 'Air Purifier 600s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -590,6 +594,7 @@ 'model': 'ESL100', 'name': 'Dimmable Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -626,6 +631,7 @@ 'model': 'ESWD16', 'name': 'Dimmer Switch', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -678,6 +684,7 @@ 'model': 'wifi-switch-1.3', 'name': 'Outlet', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1008,6 +1015,7 @@ 'model': 'ESL100CW', 'name': 'Temperature Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -1044,6 +1052,7 @@ 'model': 'ESWL01', 'name': 'Wall Switch', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/vesync/snapshots/test_switch.ambr b/tests/components/vesync/snapshots/test_switch.ambr index 3df26f74bcf..86b3b0ff5cd 100644 --- a/tests/components/vesync/snapshots/test_switch.ambr +++ b/tests/components/vesync/snapshots/test_switch.ambr @@ -24,6 +24,7 @@ 'model': 'LV-PUR131S', 'name': 'Air Purifier 131s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -60,6 +61,7 @@ 'model': 'Core200S', 'name': 'Air Purifier 200s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -96,6 +98,7 @@ 'model': 'LAP-C401S-WJP', 'name': 'Air Purifier 400s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -132,6 +135,7 @@ 'model': 'LAP-C601S-WUS', 'name': 'Air Purifier 600s', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -168,6 +172,7 @@ 'model': 'ESL100', 'name': 'Dimmable Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -204,6 +209,7 @@ 'model': 'ESWD16', 'name': 'Dimmer Switch', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -256,6 +262,7 @@ 'model': 'wifi-switch-1.3', 'name': 'Outlet', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -336,6 +343,7 @@ 'model': 'ESL100CW', 'name': 'Temperature Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -372,6 +380,7 @@ 'model': 'ESWL01', 'name': 'Wall Switch', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/whois/snapshots/test_sensor.ambr b/tests/components/whois/snapshots/test_sensor.ambr index 61762c36e59..9bc125f204b 100644 --- a/tests/components/whois/snapshots/test_sensor.ambr +++ b/tests/components/whois/snapshots/test_sensor.ambr @@ -69,6 +69,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -146,6 +147,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -227,6 +229,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -304,6 +307,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -381,6 +385,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -457,6 +462,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -533,6 +539,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -609,6 +616,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, @@ -685,6 +693,7 @@ 'model': None, 'name': 'home-assistant.io', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': None, diff --git a/tests/components/wled/snapshots/test_button.ambr b/tests/components/wled/snapshots/test_button.ambr index b489bcc0a71..9c91c0e0050 100644 --- a/tests/components/wled/snapshots/test_button.ambr +++ b/tests/components/wled/snapshots/test_button.ambr @@ -74,6 +74,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', diff --git a/tests/components/wled/snapshots/test_number.ambr b/tests/components/wled/snapshots/test_number.ambr index c3440108148..bee3e180090 100644 --- a/tests/components/wled/snapshots/test_number.ambr +++ b/tests/components/wled/snapshots/test_number.ambr @@ -82,6 +82,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', @@ -171,6 +172,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', diff --git a/tests/components/wled/snapshots/test_select.ambr b/tests/components/wled/snapshots/test_select.ambr index 6d64ec43658..f6447f699c9 100644 --- a/tests/components/wled/snapshots/test_select.ambr +++ b/tests/components/wled/snapshots/test_select.ambr @@ -84,6 +84,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', @@ -269,6 +270,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', @@ -358,6 +360,7 @@ 'model': 'DIY light', 'name': 'WLED RGBW Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.6b4', @@ -447,6 +450,7 @@ 'model': 'DIY light', 'name': 'WLED RGBW Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.6b4', diff --git a/tests/components/wled/snapshots/test_switch.ambr b/tests/components/wled/snapshots/test_switch.ambr index da69e686f07..6bca0a2ed3b 100644 --- a/tests/components/wled/snapshots/test_switch.ambr +++ b/tests/components/wled/snapshots/test_switch.ambr @@ -76,6 +76,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', @@ -156,6 +157,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', @@ -237,6 +239,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', @@ -318,6 +321,7 @@ 'model': 'DIY light', 'name': 'WLED RGB Light', 'name_by_user': None, + 'primary_config_entry': , 'serial_number': None, 'suggested_area': None, 'sw_version': '0.8.5', diff --git a/tests/helpers/test_device_registry.py b/tests/helpers/test_device_registry.py index f8f10baad08..fa57cc7557e 100644 --- a/tests/helpers/test_device_registry.py +++ b/tests/helpers/test_device_registry.py @@ -90,7 +90,7 @@ async def test_get_or_create_returns_same_entry( await hass.async_block_till_done() # Only 2 update events. The third entry did not generate any changes. - assert len(update_events) == 2, update_events + assert len(update_events) == 2 assert update_events[0].data == { "action": "create", "device_id": entry.id, @@ -170,9 +170,10 @@ async def test_multiple_config_entries( assert len(device_registry.devices) == 1 assert entry.id == entry2.id assert entry.id == entry3.id - assert entry2.config_entries == [config_entry_2.entry_id, config_entry_1.entry_id] - # the 3rd get_or_create was a primary update, so that's now first config entry - assert entry3.config_entries == [config_entry_1.entry_id, config_entry_2.entry_id] + assert entry2.config_entries == {config_entry_1.entry_id, config_entry_2.entry_id} + assert entry2.primary_config_entry == config_entry_1.entry_id + assert entry3.config_entries == {config_entry_1.entry_id, config_entry_2.entry_id} + assert entry3.primary_config_entry == config_entry_1.entry_id @pytest.mark.parametrize("load_registries", [False]) @@ -202,6 +203,7 @@ async def test_loading_from_storage( "model": "model", "name_by_user": "Test Friendly Name", "name": "name", + "primary_config_entry": mock_config_entry.entry_id, "serial_number": "serial_no", "sw_version": "version", "via_device_id": None, @@ -233,7 +235,7 @@ async def test_loading_from_storage( ) assert entry == dr.DeviceEntry( area_id="12345A", - config_entries=[mock_config_entry.entry_id], + config_entries={mock_config_entry.entry_id}, configuration_url="https://example.com/config", connections={("Zigbee", "01.23.45.67.89")}, disabled_by=dr.DeviceEntryDisabler.USER, @@ -246,11 +248,12 @@ async def test_loading_from_storage( model="model", name_by_user="Test Friendly Name", name="name", + primary_config_entry=mock_config_entry.entry_id, serial_number="serial_no", suggested_area=None, # Not stored sw_version="version", ) - assert isinstance(entry.config_entries, list) + assert isinstance(entry.config_entries, set) assert isinstance(entry.connections, set) assert isinstance(entry.identifiers, set) @@ -263,26 +266,27 @@ async def test_loading_from_storage( model="model", ) assert entry == dr.DeviceEntry( - config_entries=[mock_config_entry.entry_id], + config_entries={mock_config_entry.entry_id}, connections={("Zigbee", "23.45.67.89.01")}, id="bcdefghijklmn", identifiers={("serial", "3456ABCDEF12")}, manufacturer="manufacturer", model="model", + primary_config_entry=mock_config_entry.entry_id, ) assert entry.id == "bcdefghijklmn" - assert isinstance(entry.config_entries, list) + assert isinstance(entry.config_entries, set) assert isinstance(entry.connections, set) assert isinstance(entry.identifiers, set) @pytest.mark.parametrize("load_registries", [False]) -async def test_migration_1_1_to_1_5( +async def test_migration_1_1_to_1_6( hass: HomeAssistant, hass_storage: dict[str, Any], mock_config_entry: MockConfigEntry, ) -> None: - """Test migration from version 1.1 to 1.5.""" + """Test migration from version 1.1 to 1.6.""" hass_storage[dr.STORAGE_KEY] = { "version": 1, "minor_version": 1, @@ -371,6 +375,7 @@ async def test_migration_1_1_to_1_5( "model": "model", "name": "name", "name_by_user": None, + "primary_config_entry": mock_config_entry.entry_id, "serial_number": None, "sw_version": "new_version", "via_device_id": None, @@ -390,6 +395,7 @@ async def test_migration_1_1_to_1_5( "model": None, "name_by_user": None, "name": None, + "primary_config_entry": None, "serial_number": None, "sw_version": None, "via_device_id": None, @@ -409,12 +415,12 @@ async def test_migration_1_1_to_1_5( @pytest.mark.parametrize("load_registries", [False]) -async def test_migration_1_2_to_1_5( +async def test_migration_1_2_to_1_6( hass: HomeAssistant, hass_storage: dict[str, Any], mock_config_entry: MockConfigEntry, ) -> None: - """Test migration from version 1.2 to 1.5.""" + """Test migration from version 1.2 to 1.6.""" hass_storage[dr.STORAGE_KEY] = { "version": 1, "minor_version": 2, @@ -502,6 +508,7 @@ async def test_migration_1_2_to_1_5( "model": "model", "name": "name", "name_by_user": None, + "primary_config_entry": mock_config_entry.entry_id, "serial_number": None, "sw_version": "new_version", "via_device_id": None, @@ -521,6 +528,7 @@ async def test_migration_1_2_to_1_5( "model": None, "name_by_user": None, "name": None, + "primary_config_entry": None, "serial_number": None, "sw_version": None, "via_device_id": None, @@ -532,12 +540,12 @@ async def test_migration_1_2_to_1_5( @pytest.mark.parametrize("load_registries", [False]) -async def test_migration_1_3_to_1_5( +async def test_migration_1_3_to_1_6( hass: HomeAssistant, hass_storage: dict[str, Any], mock_config_entry: MockConfigEntry, ) -> None: - """Test migration from version 1.3 to 1.5.""" + """Test migration from version 1.3 to 1.6.""" hass_storage[dr.STORAGE_KEY] = { "version": 1, "minor_version": 3, @@ -627,6 +635,7 @@ async def test_migration_1_3_to_1_5( "model": "model", "name": "name", "name_by_user": None, + "primary_config_entry": mock_config_entry.entry_id, "serial_number": None, "sw_version": "new_version", "via_device_id": None, @@ -644,8 +653,9 @@ async def test_migration_1_3_to_1_5( "labels": [], "manufacturer": None, "model": None, - "name_by_user": None, "name": None, + "name_by_user": None, + "primary_config_entry": None, "serial_number": None, "sw_version": None, "via_device_id": None, @@ -657,12 +667,12 @@ async def test_migration_1_3_to_1_5( @pytest.mark.parametrize("load_registries", [False]) -async def test_migration_1_4_to_1_5( +async def test_migration_1_4_to_1_6( hass: HomeAssistant, hass_storage: dict[str, Any], mock_config_entry: MockConfigEntry, ) -> None: - """Test migration from version 1.4 to 1.5.""" + """Test migration from version 1.4 to 1.6.""" hass_storage[dr.STORAGE_KEY] = { "version": 1, "minor_version": 4, @@ -754,6 +764,7 @@ async def test_migration_1_4_to_1_5( "model": "model", "name": "name", "name_by_user": None, + "primary_config_entry": mock_config_entry.entry_id, "serial_number": None, "sw_version": "new_version", "via_device_id": None, @@ -773,6 +784,138 @@ async def test_migration_1_4_to_1_5( "model": None, "name_by_user": None, "name": None, + "primary_config_entry": None, + "serial_number": None, + "sw_version": None, + "via_device_id": None, + }, + ], + "deleted_devices": [], + }, + } + + +@pytest.mark.parametrize("load_registries", [False]) +async def test_migration_1_5_to_1_6( + hass: HomeAssistant, + hass_storage: dict[str, Any], + mock_config_entry: MockConfigEntry, +) -> None: + """Test migration from version 1.5 to 1.6.""" + hass_storage[dr.STORAGE_KEY] = { + "version": 1, + "minor_version": 5, + "key": dr.STORAGE_KEY, + "data": { + "devices": [ + { + "area_id": None, + "config_entries": [mock_config_entry.entry_id], + "configuration_url": None, + "connections": [["Zigbee", "01.23.45.67.89"]], + "disabled_by": None, + "entry_type": "service", + "hw_version": "hw_version", + "id": "abcdefghijklm", + "identifiers": [["serial", "123456ABCDEF"]], + "labels": ["blah"], + "manufacturer": "manufacturer", + "model": "model", + "name": "name", + "name_by_user": None, + "serial_number": None, + "sw_version": "new_version", + "via_device_id": None, + }, + { + "area_id": None, + "config_entries": [None], + "configuration_url": None, + "connections": [], + "disabled_by": None, + "entry_type": None, + "hw_version": None, + "id": "invalid-entry-type", + "identifiers": [["serial", "mock-id-invalid-entry"]], + "labels": ["blah"], + "manufacturer": None, + "model": None, + "name_by_user": None, + "name": None, + "serial_number": None, + "sw_version": None, + "via_device_id": None, + }, + ], + "deleted_devices": [], + }, + } + + await dr.async_load(hass) + registry = dr.async_get(hass) + + # Test data was loaded + entry = registry.async_get_or_create( + config_entry_id=mock_config_entry.entry_id, + connections={("Zigbee", "01.23.45.67.89")}, + identifiers={("serial", "123456ABCDEF")}, + ) + assert entry.id == "abcdefghijklm" + + # Update to trigger a store + entry = registry.async_get_or_create( + config_entry_id=mock_config_entry.entry_id, + connections={("Zigbee", "01.23.45.67.89")}, + identifiers={("serial", "123456ABCDEF")}, + sw_version="new_version", + ) + assert entry.id == "abcdefghijklm" + + # Check we store migrated data + await flush_store(registry._store) + + assert hass_storage[dr.STORAGE_KEY] == { + "version": dr.STORAGE_VERSION_MAJOR, + "minor_version": dr.STORAGE_VERSION_MINOR, + "key": dr.STORAGE_KEY, + "data": { + "devices": [ + { + "area_id": None, + "config_entries": [mock_config_entry.entry_id], + "configuration_url": None, + "connections": [["Zigbee", "01.23.45.67.89"]], + "disabled_by": None, + "entry_type": "service", + "hw_version": "hw_version", + "id": "abcdefghijklm", + "identifiers": [["serial", "123456ABCDEF"]], + "labels": ["blah"], + "manufacturer": "manufacturer", + "model": "model", + "name": "name", + "name_by_user": None, + "primary_config_entry": mock_config_entry.entry_id, + "serial_number": None, + "sw_version": "new_version", + "via_device_id": None, + }, + { + "area_id": None, + "config_entries": [None], + "configuration_url": None, + "connections": [], + "disabled_by": None, + "entry_type": None, + "hw_version": None, + "id": "invalid-entry-type", + "identifiers": [["serial", "mock-id-invalid-entry"]], + "labels": ["blah"], + "manufacturer": None, + "model": None, + "name_by_user": None, + "name": None, + "primary_config_entry": None, "serial_number": None, "sw_version": None, "via_device_id": None, @@ -818,7 +961,7 @@ async def test_removing_config_entries( assert len(device_registry.devices) == 2 assert entry.id == entry2.id assert entry.id != entry3.id - assert entry2.config_entries == [config_entry_2.entry_id, config_entry_1.entry_id] + assert entry2.config_entries == {config_entry_1.entry_id, config_entry_2.entry_id} device_registry.async_clear_config_entry(config_entry_1.entry_id) entry = device_registry.async_get_device(identifiers={("bridgeid", "0123")}) @@ -826,7 +969,7 @@ async def test_removing_config_entries( identifiers={("bridgeid", "4567")} ) - assert entry.config_entries == [config_entry_2.entry_id] + assert entry.config_entries == {config_entry_2.entry_id} assert entry3_removed is None await hass.async_block_till_done() @@ -839,7 +982,9 @@ async def test_removing_config_entries( assert update_events[1].data == { "action": "update", "device_id": entry.id, - "changes": {"config_entries": [config_entry_1.entry_id]}, + "changes": { + "config_entries": {config_entry_1.entry_id}, + }, } assert update_events[2].data == { "action": "create", @@ -849,7 +994,8 @@ async def test_removing_config_entries( "action": "update", "device_id": entry.id, "changes": { - "config_entries": [config_entry_2.entry_id, config_entry_1.entry_id] + "config_entries": {config_entry_1.entry_id, config_entry_2.entry_id}, + "primary_config_entry": config_entry_1.entry_id, }, } assert update_events[4].data == { @@ -894,7 +1040,7 @@ async def test_deleted_device_removing_config_entries( assert len(device_registry.deleted_devices) == 0 assert entry.id == entry2.id assert entry.id != entry3.id - assert entry2.config_entries == [config_entry_2.entry_id, config_entry_1.entry_id] + assert entry2.config_entries == {config_entry_1.entry_id, config_entry_2.entry_id} device_registry.async_remove_device(entry.id) device_registry.async_remove_device(entry3.id) @@ -911,7 +1057,9 @@ async def test_deleted_device_removing_config_entries( assert update_events[1].data == { "action": "update", "device_id": entry2.id, - "changes": {"config_entries": [config_entry_1.entry_id]}, + "changes": { + "config_entries": {config_entry_1.entry_id}, + }, } assert update_events[2].data == { "action": "create", @@ -1290,7 +1438,7 @@ async def test_update( assert updated_entry != entry assert updated_entry == dr.DeviceEntry( area_id="12345A", - config_entries=[mock_config_entry.entry_id], + config_entries={mock_config_entry.entry_id}, configuration_url="https://example.com/config", connections={("mac", "65:43:21:fe:dc:ba")}, disabled_by=dr.DeviceEntryDisabler.USER, @@ -1473,6 +1621,8 @@ async def test_update_remove_config_entries( config_entry_1.add_to_hass(hass) config_entry_2 = MockConfigEntry() config_entry_2.add_to_hass(hass) + config_entry_3 = MockConfigEntry() + config_entry_3.add_to_hass(hass) entry = device_registry.async_get_or_create( config_entry_id=config_entry_1.entry_id, @@ -1495,20 +1645,34 @@ async def test_update_remove_config_entries( manufacturer="manufacturer", model="model", ) + entry4 = device_registry.async_update_device( + entry2.id, add_config_entry_id=config_entry_3.entry_id + ) + # Try to add an unknown config entry + with pytest.raises(HomeAssistantError): + device_registry.async_update_device(entry2.id, add_config_entry_id="blabla") assert len(device_registry.devices) == 2 - assert entry.id == entry2.id + assert entry.id == entry2.id == entry4.id assert entry.id != entry3.id - assert entry2.config_entries == [config_entry_2.entry_id, config_entry_1.entry_id] + assert entry2.config_entries == {config_entry_1.entry_id, config_entry_2.entry_id} + assert entry4.config_entries == { + config_entry_1.entry_id, + config_entry_2.entry_id, + config_entry_3.entry_id, + } - updated_entry = device_registry.async_update_device( + device_registry.async_update_device( entry2.id, remove_config_entry_id=config_entry_1.entry_id ) + updated_entry = device_registry.async_update_device( + entry2.id, remove_config_entry_id=config_entry_3.entry_id + ) removed_entry = device_registry.async_update_device( entry3.id, remove_config_entry_id=config_entry_1.entry_id ) - assert updated_entry.config_entries == [config_entry_2.entry_id] + assert updated_entry.config_entries == {config_entry_2.entry_id} assert removed_entry is None removed_entry = device_registry.async_get_device(identifiers={("bridgeid", "4567")}) @@ -1517,7 +1681,7 @@ async def test_update_remove_config_entries( await hass.async_block_till_done() - assert len(update_events) == 5 + assert len(update_events) == 7 assert update_events[0].data == { "action": "create", "device_id": entry.id, @@ -1525,7 +1689,9 @@ async def test_update_remove_config_entries( assert update_events[1].data == { "action": "update", "device_id": entry2.id, - "changes": {"config_entries": [config_entry_1.entry_id]}, + "changes": { + "config_entries": {config_entry_1.entry_id}, + }, } assert update_events[2].data == { "action": "create", @@ -1535,10 +1701,29 @@ async def test_update_remove_config_entries( "action": "update", "device_id": entry.id, "changes": { - "config_entries": [config_entry_2.entry_id, config_entry_1.entry_id] + "config_entries": {config_entry_1.entry_id, config_entry_2.entry_id} }, } assert update_events[4].data == { + "action": "update", + "device_id": entry2.id, + "changes": { + "config_entries": { + config_entry_1.entry_id, + config_entry_2.entry_id, + config_entry_3.entry_id, + }, + "primary_config_entry": config_entry_1.entry_id, + }, + } + assert update_events[5].data == { + "action": "update", + "device_id": entry2.id, + "changes": { + "config_entries": {config_entry_2.entry_id, config_entry_3.entry_id} + }, + } + assert update_events[6].data == { "action": "remove", "device_id": entry3.id, } @@ -1768,7 +1953,7 @@ async def test_restore_device( assert len(device_registry.devices) == 2 assert len(device_registry.deleted_devices) == 0 - assert isinstance(entry3.config_entries, list) + assert isinstance(entry3.config_entries, set) assert isinstance(entry3.connections, set) assert isinstance(entry3.identifiers, set) @@ -1900,7 +2085,7 @@ async def test_restore_shared_device( assert len(device_registry.devices) == 1 assert len(device_registry.deleted_devices) == 0 - assert isinstance(entry2.config_entries, list) + assert isinstance(entry2.config_entries, set) assert isinstance(entry2.connections, set) assert isinstance(entry2.identifiers, set) @@ -1918,7 +2103,7 @@ async def test_restore_shared_device( assert len(device_registry.devices) == 1 assert len(device_registry.deleted_devices) == 0 - assert isinstance(entry3.config_entries, list) + assert isinstance(entry3.config_entries, set) assert isinstance(entry3.connections, set) assert isinstance(entry3.identifiers, set) @@ -1934,7 +2119,7 @@ async def test_restore_shared_device( assert len(device_registry.devices) == 1 assert len(device_registry.deleted_devices) == 0 - assert isinstance(entry4.config_entries, list) + assert isinstance(entry4.config_entries, set) assert isinstance(entry4.connections, set) assert isinstance(entry4.identifiers, set) @@ -1949,7 +2134,7 @@ async def test_restore_shared_device( "action": "update", "device_id": entry.id, "changes": { - "config_entries": [config_entry_1.entry_id], + "config_entries": {config_entry_1.entry_id}, "identifiers": {("entry_123", "0123")}, }, } @@ -1973,7 +2158,7 @@ async def test_restore_shared_device( "action": "update", "device_id": entry.id, "changes": { - "config_entries": [config_entry_2.entry_id], + "config_entries": {config_entry_2.entry_id}, "identifiers": {("entry_234", "2345")}, }, } @@ -2291,6 +2476,7 @@ async def test_loading_invalid_configuration_url_from_storage( "model": None, "name_by_user": None, "name": None, + "primary_config_entry": "1234", "serial_number": None, "sw_version": None, "via_device_id": None, @@ -2794,3 +2980,75 @@ async def test_device_registry_identifiers_collision( device3_refetched = device_registry.async_get(device3.id) device1_refetched = device_registry.async_get(device1.id) assert not device1_refetched.identifiers.isdisjoint(device3_refetched.identifiers) + + +async def test_primary_config_entry( + hass: HomeAssistant, + device_registry: dr.DeviceRegistry, +) -> None: + """Test the primary integration field.""" + mock_config_entry_1 = MockConfigEntry(domain="mqtt", title=None) + mock_config_entry_1.add_to_hass(hass) + mock_config_entry_2 = MockConfigEntry(title=None) + mock_config_entry_2.add_to_hass(hass) + mock_config_entry_3 = MockConfigEntry(title=None) + mock_config_entry_3.add_to_hass(hass) + mock_config_entry_4 = MockConfigEntry(domain="matter", title=None) + mock_config_entry_4.add_to_hass(hass) + + # Create device without model name etc, config entry will not be marked primary + device = device_registry.async_get_or_create( + config_entry_id=mock_config_entry_1.entry_id, + connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, + identifiers=set(), + ) + assert device.primary_config_entry is None + + # Set model, mqtt config entry will be promoted to primary + device = device_registry.async_get_or_create( + config_entry_id=mock_config_entry_1.entry_id, + connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, + model="model", + ) + assert device.primary_config_entry == mock_config_entry_1.entry_id + + # New config entry with model will be promoted to primary + device = device_registry.async_get_or_create( + config_entry_id=mock_config_entry_2.entry_id, + connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, + model="model 2", + ) + assert device.primary_config_entry == mock_config_entry_2.entry_id + + # New config entry with model will not be promoted to primary + device = device_registry.async_get_or_create( + config_entry_id=mock_config_entry_3.entry_id, + connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, + model="model 3", + ) + assert device.primary_config_entry == mock_config_entry_2.entry_id + + # New matter config entry with model will not be promoted to primary + device = device_registry.async_get_or_create( + config_entry_id=mock_config_entry_4.entry_id, + connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, + model="model 3", + ) + assert device.primary_config_entry == mock_config_entry_2.entry_id + + # Remove the primary config entry + device = device_registry.async_update_device( + device.id, + remove_config_entry_id=mock_config_entry_2.entry_id, + ) + assert device.primary_config_entry is None + + # Create new + device = device_registry.async_get_or_create( + config_entry_id=mock_config_entry_1.entry_id, + connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, + identifiers=set(), + manufacturer="manufacturer", + model="model", + ) + assert device.primary_config_entry == mock_config_entry_1.entry_id diff --git a/tests/helpers/test_entity_platform.py b/tests/helpers/test_entity_platform.py index 68024bc936f..4e761a21e8c 100644 --- a/tests/helpers/test_entity_platform.py +++ b/tests/helpers/test_entity_platform.py @@ -1187,6 +1187,7 @@ async def test_device_info_called( assert device.manufacturer == "test-manuf" assert device.model == "test-model" assert device.name == "test-name" + assert device.primary_config_entry == config_entry.entry_id assert device.suggested_area == "Heliport" assert device.sw_version == "test-sw" assert device.hw_version == "test-hw" diff --git a/tests/helpers/test_entity_registry.py b/tests/helpers/test_entity_registry.py index 1390ef3889d..4dc8d79be3f 100644 --- a/tests/helpers/test_entity_registry.py +++ b/tests/helpers/test_entity_registry.py @@ -1106,10 +1106,10 @@ async def test_remove_config_entry_from_device_removes_entities( config_entry_id=config_entry_2.entry_id, connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, ) - assert device_entry.config_entries == [ + assert device_entry.config_entries == { config_entry_1.entry_id, config_entry_2.entry_id, - ] + } # Create one entity for each config entry entry_1 = entity_registry.async_get_or_create( @@ -1174,10 +1174,10 @@ async def test_remove_config_entry_from_device_removes_entities_2( config_entry_id=config_entry_2.entry_id, connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")}, ) - assert device_entry.config_entries == [ + assert device_entry.config_entries == { config_entry_1.entry_id, config_entry_2.entry_id, - ] + } # Create one entity for each config entry entry_1 = entity_registry.async_get_or_create( diff --git a/tests/syrupy.py b/tests/syrupy.py index e5bbf017bb3..52bd5756798 100644 --- a/tests/syrupy.py +++ b/tests/syrupy.py @@ -159,6 +159,8 @@ class HomeAssistantSnapshotSerializer(AmberDataSerializer): ) if serialized["via_device_id"] is not None: serialized["via_device_id"] = ANY + if serialized["primary_config_entry"] is not None: + serialized["primary_config_entry"] = ANY return serialized @classmethod