Add primary_config_entry attribute to device registry entries (#119959)
Co-authored-by: Franck Nijhof <git@frenck.dev> Co-authored-by: Robert Resch <robert@resch.dev>
This commit is contained in:
parent
f55ddfecf4
commit
9bbeb5d608
82 changed files with 1001 additions and 105 deletions
|
@ -58,7 +58,7 @@ def _async_config_entries_for_ids(
|
||||||
dev_reg = dr.async_get(hass)
|
dev_reg = dr.async_get(hass)
|
||||||
for device_id in device_ids:
|
for device_id in device_ids:
|
||||||
if (device := dev_reg.async_get(device_id)) and device.config_entries:
|
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
|
return config_entry_ids
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -342,7 +342,7 @@ class ProtectData:
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_ufp_instance_for_config_entry_ids(
|
def async_ufp_instance_for_config_entry_ids(
|
||||||
hass: HomeAssistant, config_entry_ids: list[str]
|
hass: HomeAssistant, config_entry_ids: set[str]
|
||||||
) -> ProtectApiClient | None:
|
) -> ProtectApiClient | None:
|
||||||
"""Find the UFP instance for the config entry ids."""
|
"""Find the UFP instance for the config entry ids."""
|
||||||
return next(
|
return next(
|
||||||
|
|
|
@ -55,7 +55,7 @@ EVENT_DEVICE_REGISTRY_UPDATED: EventType[EventDeviceRegistryUpdatedData] = Event
|
||||||
)
|
)
|
||||||
STORAGE_KEY = "core.device_registry"
|
STORAGE_KEY = "core.device_registry"
|
||||||
STORAGE_VERSION_MAJOR = 1
|
STORAGE_VERSION_MAJOR = 1
|
||||||
STORAGE_VERSION_MINOR = 5
|
STORAGE_VERSION_MINOR = 6
|
||||||
|
|
||||||
CLEANUP_DELAY = 10
|
CLEANUP_DELAY = 10
|
||||||
|
|
||||||
|
@ -145,6 +145,9 @@ DEVICE_INFO_TYPES = {
|
||||||
|
|
||||||
DEVICE_INFO_KEYS = set.union(*(itm for itm in DEVICE_INFO_TYPES.values()))
|
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):
|
class _EventDeviceRegistryUpdatedData_CreateRemove(TypedDict):
|
||||||
"""EventDeviceRegistryUpdated data for action type 'create' and 'remove'."""
|
"""EventDeviceRegistryUpdated data for action type 'create' and 'remove'."""
|
||||||
|
@ -273,7 +276,7 @@ class DeviceEntry:
|
||||||
"""Device Registry Entry."""
|
"""Device Registry Entry."""
|
||||||
|
|
||||||
area_id: str | None = attr.ib(default=None)
|
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)
|
configuration_url: str | None = attr.ib(default=None)
|
||||||
connections: set[tuple[str, str]] = attr.ib(converter=set, factory=set)
|
connections: set[tuple[str, str]] = attr.ib(converter=set, factory=set)
|
||||||
disabled_by: DeviceEntryDisabler | None = attr.ib(default=None)
|
disabled_by: DeviceEntryDisabler | None = attr.ib(default=None)
|
||||||
|
@ -286,6 +289,7 @@ class DeviceEntry:
|
||||||
model: str | None = attr.ib(default=None)
|
model: str | None = attr.ib(default=None)
|
||||||
name_by_user: str | None = attr.ib(default=None)
|
name_by_user: str | None = attr.ib(default=None)
|
||||||
name: 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)
|
serial_number: str | None = attr.ib(default=None)
|
||||||
suggested_area: str | None = attr.ib(default=None)
|
suggested_area: str | None = attr.ib(default=None)
|
||||||
sw_version: str | None = attr.ib(default=None)
|
sw_version: str | None = attr.ib(default=None)
|
||||||
|
@ -307,7 +311,7 @@ class DeviceEntry:
|
||||||
return {
|
return {
|
||||||
"area_id": self.area_id,
|
"area_id": self.area_id,
|
||||||
"configuration_url": self.configuration_url,
|
"configuration_url": self.configuration_url,
|
||||||
"config_entries": self.config_entries,
|
"config_entries": list(self.config_entries),
|
||||||
"connections": list(self.connections),
|
"connections": list(self.connections),
|
||||||
"disabled_by": self.disabled_by,
|
"disabled_by": self.disabled_by,
|
||||||
"entry_type": self.entry_type,
|
"entry_type": self.entry_type,
|
||||||
|
@ -319,6 +323,7 @@ class DeviceEntry:
|
||||||
"model": self.model,
|
"model": self.model,
|
||||||
"name_by_user": self.name_by_user,
|
"name_by_user": self.name_by_user,
|
||||||
"name": self.name,
|
"name": self.name,
|
||||||
|
"primary_config_entry": self.primary_config_entry,
|
||||||
"serial_number": self.serial_number,
|
"serial_number": self.serial_number,
|
||||||
"sw_version": self.sw_version,
|
"sw_version": self.sw_version,
|
||||||
"via_device_id": self.via_device_id,
|
"via_device_id": self.via_device_id,
|
||||||
|
@ -347,7 +352,7 @@ class DeviceEntry:
|
||||||
json_bytes(
|
json_bytes(
|
||||||
{
|
{
|
||||||
"area_id": self.area_id,
|
"area_id": self.area_id,
|
||||||
"config_entries": self.config_entries,
|
"config_entries": list(self.config_entries),
|
||||||
"configuration_url": self.configuration_url,
|
"configuration_url": self.configuration_url,
|
||||||
"connections": list(self.connections),
|
"connections": list(self.connections),
|
||||||
"disabled_by": self.disabled_by,
|
"disabled_by": self.disabled_by,
|
||||||
|
@ -360,6 +365,7 @@ class DeviceEntry:
|
||||||
"model": self.model,
|
"model": self.model,
|
||||||
"name_by_user": self.name_by_user,
|
"name_by_user": self.name_by_user,
|
||||||
"name": self.name,
|
"name": self.name,
|
||||||
|
"primary_config_entry": self.primary_config_entry,
|
||||||
"serial_number": self.serial_number,
|
"serial_number": self.serial_number,
|
||||||
"sw_version": self.sw_version,
|
"sw_version": self.sw_version,
|
||||||
"via_device_id": self.via_device_id,
|
"via_device_id": self.via_device_id,
|
||||||
|
@ -372,7 +378,7 @@ class DeviceEntry:
|
||||||
class DeletedDeviceEntry:
|
class DeletedDeviceEntry:
|
||||||
"""Deleted Device Registry Entry."""
|
"""Deleted Device Registry Entry."""
|
||||||
|
|
||||||
config_entries: list[str] = attr.ib()
|
config_entries: set[str] = attr.ib()
|
||||||
connections: set[tuple[str, str]] = attr.ib()
|
connections: set[tuple[str, str]] = attr.ib()
|
||||||
identifiers: set[tuple[str, str]] = attr.ib()
|
identifiers: set[tuple[str, str]] = attr.ib()
|
||||||
id: str = attr.ib()
|
id: str = attr.ib()
|
||||||
|
@ -387,7 +393,7 @@ class DeletedDeviceEntry:
|
||||||
"""Create DeviceEntry from DeletedDeviceEntry."""
|
"""Create DeviceEntry from DeletedDeviceEntry."""
|
||||||
return DeviceEntry(
|
return DeviceEntry(
|
||||||
# type ignores: likely https://github.com/python/mypy/issues/8625
|
# 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]
|
connections=self.connections & connections, # type: ignore[arg-type]
|
||||||
identifiers=self.identifiers & identifiers, # type: ignore[arg-type]
|
identifiers=self.identifiers & identifiers, # type: ignore[arg-type]
|
||||||
id=self.id,
|
id=self.id,
|
||||||
|
@ -400,7 +406,7 @@ class DeletedDeviceEntry:
|
||||||
return json_fragment(
|
return json_fragment(
|
||||||
json_bytes(
|
json_bytes(
|
||||||
{
|
{
|
||||||
"config_entries": self.config_entries,
|
"config_entries": list(self.config_entries),
|
||||||
"connections": list(self.connections),
|
"connections": list(self.connections),
|
||||||
"identifiers": list(self.identifiers),
|
"identifiers": list(self.identifiers),
|
||||||
"id": self.id,
|
"id": self.id,
|
||||||
|
@ -473,6 +479,10 @@ class DeviceRegistryStore(storage.Store[dict[str, list[dict[str, Any]]]]):
|
||||||
# Introduced in 2024.3
|
# Introduced in 2024.3
|
||||||
for device in old_data["devices"]:
|
for device in old_data["devices"]:
|
||||||
device["labels"] = device.get("labels", [])
|
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:
|
if old_major_version > 1:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
@ -790,6 +800,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
|
||||||
device.id,
|
device.id,
|
||||||
allow_collisions=True,
|
allow_collisions=True,
|
||||||
add_config_entry_id=config_entry_id,
|
add_config_entry_id=config_entry_id,
|
||||||
|
add_config_entry=config_entry,
|
||||||
configuration_url=configuration_url,
|
configuration_url=configuration_url,
|
||||||
device_info_type=device_info_type,
|
device_info_type=device_info_type,
|
||||||
disabled_by=disabled_by,
|
disabled_by=disabled_by,
|
||||||
|
@ -816,6 +827,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
|
||||||
self,
|
self,
|
||||||
device_id: str,
|
device_id: str,
|
||||||
*,
|
*,
|
||||||
|
add_config_entry: ConfigEntry | UndefinedType = UNDEFINED,
|
||||||
add_config_entry_id: str | UndefinedType = UNDEFINED,
|
add_config_entry_id: str | UndefinedType = UNDEFINED,
|
||||||
# Temporary flag so we don't blow up when collisions are implicitly introduced
|
# 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.
|
# 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
|
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:
|
if merge_connections is not UNDEFINED and new_connections is not UNDEFINED:
|
||||||
raise HomeAssistantError(
|
raise HomeAssistantError(
|
||||||
"Cannot define both merge_connections and new_connections"
|
"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 = ar.async_get(self.hass).async_get_or_create(suggested_area)
|
||||||
area_id = area.id
|
area_id = area.id
|
||||||
|
|
||||||
if add_config_entry_id is not UNDEFINED:
|
if add_config_entry is not UNDEFINED:
|
||||||
# primary ones have to be at the start.
|
primary_entry_id = old.primary_config_entry
|
||||||
if device_info_type == "primary":
|
if (
|
||||||
# Move entry to first spot
|
device_info_type == "primary"
|
||||||
if not config_entries or config_entries[0] != add_config_entry_id:
|
and add_config_entry.entry_id != primary_entry_id
|
||||||
config_entries = [add_config_entry_id] + [
|
):
|
||||||
entry
|
if (
|
||||||
for entry in config_entries
|
primary_entry_id is None
|
||||||
if entry != add_config_entry_id
|
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
|
if add_config_entry.entry_id not in old.config_entries:
|
||||||
elif add_config_entry_id not in config_entries:
|
config_entries = old.config_entries | {add_config_entry.entry_id}
|
||||||
config_entries = [*config_entries, add_config_entry_id]
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
remove_config_entry_id is not UNDEFINED
|
remove_config_entry_id is not UNDEFINED
|
||||||
and remove_config_entry_id in config_entries
|
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)
|
self.async_remove_device(device_id)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
config_entries = [
|
if remove_config_entry_id == old.primary_config_entry:
|
||||||
entry for entry in config_entries if entry != remove_config_entry_id
|
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:
|
if config_entries != old.config_entries:
|
||||||
new_values["config_entries"] = 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"]:
|
for device in data["devices"]:
|
||||||
devices[device["id"]] = DeviceEntry(
|
devices[device["id"]] = DeviceEntry(
|
||||||
area_id=device["area_id"],
|
area_id=device["area_id"],
|
||||||
config_entries=device["config_entries"],
|
config_entries=set(device["config_entries"]),
|
||||||
configuration_url=device["configuration_url"],
|
configuration_url=device["configuration_url"],
|
||||||
# type ignores (if tuple arg was cast): likely https://github.com/python/mypy/issues/8625
|
# type ignores (if tuple arg was cast): likely https://github.com/python/mypy/issues/8625
|
||||||
connections={
|
connections={
|
||||||
|
@ -1123,6 +1151,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
|
||||||
model=device["model"],
|
model=device["model"],
|
||||||
name_by_user=device["name_by_user"],
|
name_by_user=device["name_by_user"],
|
||||||
name=device["name"],
|
name=device["name"],
|
||||||
|
primary_config_entry=device["primary_config_entry"],
|
||||||
serial_number=device["serial_number"],
|
serial_number=device["serial_number"],
|
||||||
sw_version=device["sw_version"],
|
sw_version=device["sw_version"],
|
||||||
via_device_id=device["via_device_id"],
|
via_device_id=device["via_device_id"],
|
||||||
|
@ -1130,7 +1159,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
|
||||||
# Introduced in 0.111
|
# Introduced in 0.111
|
||||||
for device in data["deleted_devices"]:
|
for device in data["deleted_devices"]:
|
||||||
deleted_devices[device["id"]] = DeletedDeviceEntry(
|
deleted_devices[device["id"]] = DeletedDeviceEntry(
|
||||||
config_entries=device["config_entries"],
|
config_entries=set(device["config_entries"]),
|
||||||
connections={tuple(conn) for conn in device["connections"]},
|
connections={tuple(conn) for conn in device["connections"]},
|
||||||
identifiers={tuple(iden) for iden in device["identifiers"]},
|
identifiers={tuple(iden) for iden in device["identifiers"]},
|
||||||
id=device["id"],
|
id=device["id"],
|
||||||
|
@ -1161,15 +1190,13 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
|
||||||
config_entries = deleted_device.config_entries
|
config_entries = deleted_device.config_entries
|
||||||
if config_entry_id not in config_entries:
|
if config_entry_id not in config_entries:
|
||||||
continue
|
continue
|
||||||
if config_entries == [config_entry_id]:
|
if config_entries == {config_entry_id}:
|
||||||
# Add a time stamp when the deleted device became orphaned
|
# Add a time stamp when the deleted device became orphaned
|
||||||
self.deleted_devices[deleted_device.id] = attr.evolve(
|
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:
|
else:
|
||||||
config_entries = [
|
config_entries = config_entries - {config_entry_id}
|
||||||
entry for entry in config_entries if entry != config_entry_id
|
|
||||||
]
|
|
||||||
# No need to reindex here since we currently
|
# No need to reindex here since we currently
|
||||||
# do not have a lookup by config entry
|
# do not have a lookup by config entry
|
||||||
self.deleted_devices[deleted_device.id] = attr.evolve(
|
self.deleted_devices[deleted_device.id] = attr.evolve(
|
||||||
|
@ -1275,8 +1302,8 @@ def async_config_entry_disabled_by_changed(
|
||||||
if device.disabled:
|
if device.disabled:
|
||||||
# Device already disabled, do not overwrite
|
# Device already disabled, do not overwrite
|
||||||
continue
|
continue
|
||||||
if len(device.config_entries) > 1 and any(
|
if len(device.config_entries) > 1 and device.config_entries.intersection(
|
||||||
entry_id in enabled_config_entries for entry_id in device.config_entries
|
enabled_config_entries
|
||||||
):
|
):
|
||||||
continue
|
continue
|
||||||
registry.async_update_device(
|
registry.async_update_device(
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'I-9PSL',
|
'model': 'I-9PSL',
|
||||||
'name': 'Airgradient',
|
'name': 'Airgradient',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': '84fce612f5b8',
|
'serial_number': '84fce612f5b8',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.1.1',
|
'sw_version': '3.1.1',
|
||||||
|
@ -53,6 +54,7 @@
|
||||||
'model': 'O-1PPT',
|
'model': 'O-1PPT',
|
||||||
'name': 'Airgradient',
|
'name': 'Airgradient',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': '84fce60bec38',
|
'serial_number': '84fce60bec38',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.1.1',
|
'sw_version': '3.1.1',
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'HPTS-50 200 202172000',
|
'model': 'HPTS-50 200 202172000',
|
||||||
'name': 'My water heater',
|
'name': 'My water heater',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'serial',
|
'serial_number': 'serial',
|
||||||
'suggested_area': 'Basement',
|
'suggested_area': 'Basement',
|
||||||
'sw_version': '2.14',
|
'sw_version': '2.14',
|
||||||
|
|
|
@ -70,6 +70,7 @@ async def test_list_devices(
|
||||||
"model": "model",
|
"model": "model",
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
"name": None,
|
"name": None,
|
||||||
|
"primary_config_entry": entry.entry_id,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": None,
|
"sw_version": None,
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -88,6 +89,7 @@ async def test_list_devices(
|
||||||
"model": "model",
|
"model": "model",
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
"name": None,
|
"name": None,
|
||||||
|
"primary_config_entry": entry.entry_id,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": None,
|
"sw_version": None,
|
||||||
"via_device_id": dev1,
|
"via_device_id": dev1,
|
||||||
|
@ -119,6 +121,7 @@ async def test_list_devices(
|
||||||
"model": "model",
|
"model": "model",
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
"name": None,
|
"name": None,
|
||||||
|
"primary_config_entry": entry.entry_id,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": None,
|
"sw_version": None,
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -274,7 +277,7 @@ async def test_remove_config_entry_from_device(
|
||||||
config_entry_id=entry_2.entry_id,
|
config_entry_id=entry_2.entry_id,
|
||||||
connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")},
|
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
|
# Try removing a config entry from the device, it should fail because
|
||||||
# async_remove_config_entry_device returns False
|
# 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]
|
assert response["result"]["config_entries"] == [entry_2.entry_id]
|
||||||
|
|
||||||
# Check that the config entry was removed from the device
|
# 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
|
entry_2.entry_id
|
||||||
]
|
}
|
||||||
|
|
||||||
# Remove the 2nd config entry
|
# Remove the 2nd config entry
|
||||||
response = await ws_client.remove_device(device_entry.id, entry_2.entry_id)
|
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,
|
config_entry_id=entry_3.entry_id,
|
||||||
connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")},
|
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_1.entry_id,
|
||||||
entry_2.entry_id,
|
entry_2.entry_id,
|
||||||
entry_3.entry_id,
|
entry_3.entry_id,
|
||||||
]
|
}
|
||||||
|
|
||||||
fake_entry_id = "abc123"
|
fake_entry_id = "abc123"
|
||||||
assert entry_1.entry_id != fake_entry_id
|
assert entry_1.entry_id != fake_entry_id
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
'model': 'dLAN pro 1200+ WiFi ac',
|
'model': 'dLAN pro 1200+ WiFi ac',
|
||||||
'name': 'Mock Title',
|
'name': 'Mock Title',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': '1234567890',
|
'serial_number': '1234567890',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '5.6.1',
|
'sw_version': '5.6.1',
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'DEEBOT OZMO 950 Series',
|
'model': 'DEEBOT OZMO 950 Series',
|
||||||
'name': 'Ozmo 950',
|
'name': 'Ozmo 950',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'E1234567890000000001',
|
'serial_number': 'E1234567890000000001',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
@ -155,6 +156,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
|
|
@ -106,6 +106,7 @@
|
||||||
'model': 'Elgato Key Light',
|
'model': 'Elgato Key Light',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'CN11A1A00001',
|
'serial_number': 'CN11A1A00001',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.3 (192)',
|
'sw_version': '1.0.3 (192)',
|
||||||
|
@ -221,6 +222,7 @@
|
||||||
'model': 'Elgato Light Strip',
|
'model': 'Elgato Light Strip',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'CN11A1A00001',
|
'serial_number': 'CN11A1A00001',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.3 (192)',
|
'sw_version': '1.0.3 (192)',
|
||||||
|
@ -336,6 +338,7 @@
|
||||||
'model': 'Elgato Light Strip',
|
'model': 'Elgato Light Strip',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'CN11A1A00001',
|
'serial_number': 'CN11A1A00001',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.3 (192)',
|
'sw_version': '1.0.3 (192)',
|
||||||
|
|
|
@ -81,6 +81,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
@ -172,6 +173,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
@ -263,6 +265,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
@ -351,6 +354,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
@ -442,6 +446,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
@ -153,6 +154,7 @@
|
||||||
'model': 'Elgato Key Light Mini',
|
'model': 'Elgato Key Light Mini',
|
||||||
'name': 'Frenck',
|
'name': 'Frenck',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GW24L1A02987',
|
'serial_number': 'GW24L1A02987',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4 (229)',
|
'sw_version': '1.0.4 (229)',
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Energy market price',
|
'name': 'Energy market price',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -138,6 +139,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Energy market price',
|
'name': 'Energy market price',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -209,6 +211,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Energy market price',
|
'name': 'Energy market price',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -280,6 +283,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Energy market price',
|
'name': 'Energy market price',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -351,6 +355,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Energy market price',
|
'name': 'Energy market price',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -425,6 +430,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Gas market price',
|
'name': 'Gas market price',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT',
|
'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT',
|
||||||
'name': 'Envoy <<envoyserial>>',
|
'name': 'Envoy <<envoyserial>>',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'serial_number': '<<envoyserial>>',
|
'serial_number': '<<envoyserial>>',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '7.1.2',
|
'sw_version': '7.1.2',
|
||||||
|
@ -3772,6 +3773,7 @@
|
||||||
'model': 'Inverter',
|
'model': 'Inverter',
|
||||||
'name': 'Inverter 1',
|
'name': 'Inverter 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -4043,6 +4045,7 @@
|
||||||
'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT',
|
'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT',
|
||||||
'name': 'Envoy <<envoyserial>>',
|
'name': 'Envoy <<envoyserial>>',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'serial_number': '<<envoyserial>>',
|
'serial_number': '<<envoyserial>>',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '7.1.2',
|
'sw_version': '7.1.2',
|
||||||
|
@ -7767,6 +7770,7 @@
|
||||||
'model': 'Inverter',
|
'model': 'Inverter',
|
||||||
'name': 'Inverter 1',
|
'name': 'Inverter 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -8078,6 +8082,7 @@
|
||||||
'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT',
|
'model': 'Envoy, phases: 3, phase mode: three, net-consumption CT, production CT, storage CT',
|
||||||
'name': 'Envoy <<envoyserial>>',
|
'name': 'Envoy <<envoyserial>>',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'serial_number': '<<envoyserial>>',
|
'serial_number': '<<envoyserial>>',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '7.1.2',
|
'sw_version': '7.1.2',
|
||||||
|
@ -11802,6 +11807,7 @@
|
||||||
'model': 'Inverter',
|
'model': 'Inverter',
|
||||||
'name': 'Inverter 1',
|
'name': 'Inverter 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': '45a36e55aaddb2007c5f6602e0c38e72',
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'Mock Model',
|
'model': 'Mock Model',
|
||||||
'name': 'Mock Title',
|
'name': 'Mock Title',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.2.3',
|
'sw_version': '1.2.3',
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
'model': 'AP2',
|
'model': 'AP2',
|
||||||
'name': 'Airversa AP2 1808',
|
'name': 'Airversa AP2 1808',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1234',
|
'serial_number': '1234',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.16',
|
'sw_version': '0.8.16',
|
||||||
|
@ -622,6 +623,7 @@
|
||||||
'model': 'T8010',
|
'model': 'T8010',
|
||||||
'name': 'eufy HomeBase2-0AAA',
|
'name': 'eufy HomeBase2-0AAA',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'A0000A000000000A',
|
'serial_number': 'A0000A000000000A',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2.1.6',
|
'sw_version': '2.1.6',
|
||||||
|
@ -695,6 +697,7 @@
|
||||||
'model': 'T8113',
|
'model': 'T8113',
|
||||||
'name': 'eufyCam2-0000',
|
'name': 'eufyCam2-0000',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'A0000A000000000D',
|
'serial_number': 'A0000A000000000D',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.6.7',
|
'sw_version': '1.6.7',
|
||||||
|
@ -936,6 +939,7 @@
|
||||||
'model': 'T8113',
|
'model': 'T8113',
|
||||||
'name': 'eufyCam2-000A',
|
'name': 'eufyCam2-000A',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'A0000A000000000B',
|
'serial_number': 'A0000A000000000B',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.6.7',
|
'sw_version': '1.6.7',
|
||||||
|
@ -1177,6 +1181,7 @@
|
||||||
'model': 'T8113',
|
'model': 'T8113',
|
||||||
'name': 'eufyCam2-000A',
|
'name': 'eufyCam2-000A',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'A0000A000000000C',
|
'serial_number': 'A0000A000000000C',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.6.7',
|
'sw_version': '1.6.7',
|
||||||
|
@ -1422,6 +1427,7 @@
|
||||||
'model': 'HE1-G01',
|
'model': 'HE1-G01',
|
||||||
'name': 'Aqara-Hub-E1-00A0',
|
'name': 'Aqara-Hub-E1-00A0',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '00aa00000a0',
|
'serial_number': '00aa00000a0',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.3.0',
|
'sw_version': '3.3.0',
|
||||||
|
@ -1628,6 +1634,7 @@
|
||||||
'model': 'AS006',
|
'model': 'AS006',
|
||||||
'name': 'Contact Sensor',
|
'name': 'Contact Sensor',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '158d0007c59c6a',
|
'serial_number': '158d0007c59c6a',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0',
|
'sw_version': '0',
|
||||||
|
@ -1792,6 +1799,7 @@
|
||||||
'model': 'ZHWA11LM',
|
'model': 'ZHWA11LM',
|
||||||
'name': 'Aqara Hub-1563',
|
'name': 'Aqara Hub-1563',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '0000000123456789',
|
'serial_number': '0000000123456789',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.4.7',
|
'sw_version': '1.4.7',
|
||||||
|
@ -2067,6 +2075,7 @@
|
||||||
'model': 'AR004',
|
'model': 'AR004',
|
||||||
'name': 'Programmable Switch',
|
'name': 'Programmable Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '111a1111a1a111',
|
'serial_number': '111a1111a1a111',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '9',
|
'sw_version': '9',
|
||||||
|
@ -2190,6 +2199,7 @@
|
||||||
'model': 'ABC1000',
|
'model': 'ABC1000',
|
||||||
'name': 'ArloBabyA0',
|
'name': 'ArloBabyA0',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '00A0000000000',
|
'serial_number': '00A0000000000',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.10.931',
|
'sw_version': '1.10.931',
|
||||||
|
@ -2674,6 +2684,7 @@
|
||||||
'model': 'CS-IWO',
|
'model': 'CS-IWO',
|
||||||
'name': 'InWall Outlet-0394DE',
|
'name': 'InWall Outlet-0394DE',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1020301376',
|
'serial_number': '1020301376',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
@ -3103,6 +3114,7 @@
|
||||||
'model': 'REMOTE SENSOR',
|
'model': 'REMOTE SENSOR',
|
||||||
'name': 'Basement',
|
'name': 'Basement',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AB3C',
|
'serial_number': 'AB3C',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
@ -3262,6 +3274,7 @@
|
||||||
'model': 'ecobee3',
|
'model': 'ecobee3',
|
||||||
'name': 'HomeW',
|
'name': 'HomeW',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '123456789012',
|
'serial_number': '123456789012',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.2.394',
|
'sw_version': '4.2.394',
|
||||||
|
@ -3716,6 +3729,7 @@
|
||||||
'model': 'REMOTE SENSOR',
|
'model': 'REMOTE SENSOR',
|
||||||
'name': 'Kitchen',
|
'name': 'Kitchen',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AB1C',
|
'serial_number': 'AB1C',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
@ -3875,6 +3889,7 @@
|
||||||
'model': 'REMOTE SENSOR',
|
'model': 'REMOTE SENSOR',
|
||||||
'name': 'Porch',
|
'name': 'Porch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AB2C',
|
'serial_number': 'AB2C',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
@ -4038,6 +4053,7 @@
|
||||||
'model': 'ecobee3',
|
'model': 'ecobee3',
|
||||||
'name': 'HomeW',
|
'name': 'HomeW',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '123456789012',
|
'serial_number': '123456789012',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.2.394',
|
'sw_version': '4.2.394',
|
||||||
|
@ -4496,6 +4512,7 @@
|
||||||
'model': 'REMOTE SENSOR',
|
'model': 'REMOTE SENSOR',
|
||||||
'name': 'Basement',
|
'name': 'Basement',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AB3C',
|
'serial_number': 'AB3C',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
@ -4610,6 +4627,7 @@
|
||||||
'model': 'ecobee3',
|
'model': 'ecobee3',
|
||||||
'name': 'HomeW',
|
'name': 'HomeW',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '123456789012',
|
'serial_number': '123456789012',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.2.394',
|
'sw_version': '4.2.394',
|
||||||
|
@ -4891,6 +4909,7 @@
|
||||||
'model': 'REMOTE SENSOR',
|
'model': 'REMOTE SENSOR',
|
||||||
'name': 'Kitchen',
|
'name': 'Kitchen',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AB1C',
|
'serial_number': 'AB1C',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
@ -5050,6 +5069,7 @@
|
||||||
'model': 'REMOTE SENSOR',
|
'model': 'REMOTE SENSOR',
|
||||||
'name': 'Porch',
|
'name': 'Porch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AB2C',
|
'serial_number': 'AB2C',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
@ -5213,6 +5233,7 @@
|
||||||
'model': 'ECB501',
|
'model': 'ECB501',
|
||||||
'name': 'My ecobee',
|
'name': 'My ecobee',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '123456789016',
|
'serial_number': '123456789016',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.7.340214',
|
'sw_version': '4.7.340214',
|
||||||
|
@ -5680,6 +5701,7 @@
|
||||||
'model': 'ecobee Switch+',
|
'model': 'ecobee Switch+',
|
||||||
'name': 'Master Fan',
|
'name': 'Master Fan',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '111111111111',
|
'serial_number': '111111111111',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.5.130201',
|
'sw_version': '4.5.130201',
|
||||||
|
@ -5969,6 +5991,7 @@
|
||||||
'model': 'Eve Degree 00AAA0000',
|
'model': 'Eve Degree 00AAA0000',
|
||||||
'name': 'Eve Degree AA11',
|
'name': 'Eve Degree AA11',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AA00A0A00000',
|
'serial_number': 'AA00A0A00000',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.2.8',
|
'sw_version': '1.2.8',
|
||||||
|
@ -6325,6 +6348,7 @@
|
||||||
'model': 'Eve Energy 20EAO8601',
|
'model': 'Eve Energy 20EAO8601',
|
||||||
'name': 'Eve Energy 50FF',
|
'name': 'Eve Energy 50FF',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AA00A0A00000',
|
'serial_number': 'AA00A0A00000',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.2.9',
|
'sw_version': '1.2.9',
|
||||||
|
@ -6663,6 +6687,7 @@
|
||||||
'model': 'RavenSystem HAA',
|
'model': 'RavenSystem HAA',
|
||||||
'name': 'HAA-C718B3',
|
'name': 'HAA-C718B3',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'C718B3-1',
|
'serial_number': 'C718B3-1',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '5.0.18',
|
'sw_version': '5.0.18',
|
||||||
|
@ -6868,6 +6893,7 @@
|
||||||
'model': 'RavenSystem HAA',
|
'model': 'RavenSystem HAA',
|
||||||
'name': 'HAA-C718B3',
|
'name': 'HAA-C718B3',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'C718B3-2',
|
'serial_number': 'C718B3-2',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '5.0.18',
|
'sw_version': '5.0.18',
|
||||||
|
@ -7303,6 +7329,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'Family Room North',
|
'name': 'Family Room North',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'cover.family_door_north',
|
'serial_number': 'cover.family_door_north',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.6.2',
|
'sw_version': '3.6.2',
|
||||||
|
@ -7464,6 +7491,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'HASS Bridge S6',
|
'name': 'HASS Bridge S6',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -7537,6 +7565,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'Kitchen Window',
|
'name': 'Kitchen Window',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'cover.kitchen_window',
|
'serial_number': 'cover.kitchen_window',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.6.2',
|
'sw_version': '3.6.2',
|
||||||
|
@ -7702,6 +7731,7 @@
|
||||||
'model': 'Fan',
|
'model': 'Fan',
|
||||||
'name': 'Ceiling Fan',
|
'name': 'Ceiling Fan',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'fan.ceiling_fan',
|
'serial_number': 'fan.ceiling_fan',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.104.0.dev0',
|
'sw_version': '0.104.0.dev0',
|
||||||
|
@ -7822,6 +7852,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'Home Assistant Bridge',
|
'name': 'Home Assistant Bridge',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.104.0.dev0',
|
'sw_version': '0.104.0.dev0',
|
||||||
|
@ -7895,6 +7926,7 @@
|
||||||
'model': 'Fan',
|
'model': 'Fan',
|
||||||
'name': 'Living Room Fan',
|
'name': 'Living Room Fan',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'fan.living_room_fan',
|
'serial_number': 'fan.living_room_fan',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.104.0.dev0',
|
'sw_version': '0.104.0.dev0',
|
||||||
|
@ -8020,6 +8052,7 @@
|
||||||
'model': 'Climate Control',
|
'model': 'Climate Control',
|
||||||
'name': '89 Living Room',
|
'name': '89 Living Room',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'climate.89_living_room',
|
'serial_number': 'climate.89_living_room',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -8342,6 +8375,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'HASS Bridge S6',
|
'name': 'HASS Bridge S6',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -8419,6 +8453,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'HASS Bridge S6',
|
'name': 'HASS Bridge S6',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -8492,6 +8527,7 @@
|
||||||
'model': '1039102',
|
'model': '1039102',
|
||||||
'name': 'Laundry Smoke ED78',
|
'name': 'Laundry Smoke ED78',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'light.laundry_smoke_ed78',
|
'serial_number': 'light.laundry_smoke_ed78',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.4.84',
|
'sw_version': '1.4.84',
|
||||||
|
@ -8665,6 +8701,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'Family Room North',
|
'name': 'Family Room North',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'cover.family_door_north',
|
'serial_number': 'cover.family_door_north',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.6.2',
|
'sw_version': '3.6.2',
|
||||||
|
@ -8826,6 +8863,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'HASS Bridge S6',
|
'name': 'HASS Bridge S6',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -8899,6 +8937,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'Kitchen Window',
|
'name': 'Kitchen Window',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'cover.kitchen_window',
|
'serial_number': 'cover.kitchen_window',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.6.2',
|
'sw_version': '3.6.2',
|
||||||
|
@ -9064,6 +9103,7 @@
|
||||||
'model': 'Fan',
|
'model': 'Fan',
|
||||||
'name': 'Ceiling Fan',
|
'name': 'Ceiling Fan',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'fan.ceiling_fan',
|
'serial_number': 'fan.ceiling_fan',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.104.0.dev0',
|
'sw_version': '0.104.0.dev0',
|
||||||
|
@ -9184,6 +9224,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'Home Assistant Bridge',
|
'name': 'Home Assistant Bridge',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.104.0.dev0',
|
'sw_version': '0.104.0.dev0',
|
||||||
|
@ -9257,6 +9298,7 @@
|
||||||
'model': 'Fan',
|
'model': 'Fan',
|
||||||
'name': 'Living Room Fan',
|
'name': 'Living Room Fan',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'fan.living_room_fan',
|
'serial_number': 'fan.living_room_fan',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.104.0.dev0',
|
'sw_version': '0.104.0.dev0',
|
||||||
|
@ -9383,6 +9425,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'Home Assistant Bridge',
|
'name': 'Home Assistant Bridge',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.104.0.dev0',
|
'sw_version': '0.104.0.dev0',
|
||||||
|
@ -9456,6 +9499,7 @@
|
||||||
'model': 'Fan',
|
'model': 'Fan',
|
||||||
'name': 'Living Room Fan',
|
'name': 'Living Room Fan',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'fan.living_room_fan',
|
'serial_number': 'fan.living_room_fan',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.104.0.dev0',
|
'sw_version': '0.104.0.dev0',
|
||||||
|
@ -9582,6 +9626,7 @@
|
||||||
'model': 'Climate Control',
|
'model': 'Climate Control',
|
||||||
'name': '89 Living Room',
|
'name': '89 Living Room',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'climate.89_living_room',
|
'serial_number': 'climate.89_living_room',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -9913,6 +9958,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'HASS Bridge S6',
|
'name': 'HASS Bridge S6',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -9990,6 +10036,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'HASS Bridge S6',
|
'name': 'HASS Bridge S6',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -10063,6 +10110,7 @@
|
||||||
'model': 'WoHumi',
|
'model': 'WoHumi',
|
||||||
'name': 'Humidifier 182A',
|
'name': 'Humidifier 182A',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'humidifier.humidifier_182a',
|
'serial_number': 'humidifier.humidifier_182a',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -10243,6 +10291,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'HASS Bridge S6',
|
'name': 'HASS Bridge S6',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -10316,6 +10365,7 @@
|
||||||
'model': 'WoHumi',
|
'model': 'WoHumi',
|
||||||
'name': 'Humidifier 182A',
|
'name': 'Humidifier 182A',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'humidifier.humidifier_182a',
|
'serial_number': 'humidifier.humidifier_182a',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -10496,6 +10546,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'HASS Bridge S6',
|
'name': 'HASS Bridge S6',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'homekit.bridge',
|
'serial_number': 'homekit.bridge',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2024.2.0',
|
'sw_version': '2024.2.0',
|
||||||
|
@ -10569,6 +10620,7 @@
|
||||||
'model': '1039102',
|
'model': '1039102',
|
||||||
'name': 'Laundry Smoke ED78',
|
'name': 'Laundry Smoke ED78',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'light.laundry_smoke_ed78',
|
'serial_number': 'light.laundry_smoke_ed78',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.4.84',
|
'sw_version': '1.4.84',
|
||||||
|
@ -10757,6 +10809,7 @@
|
||||||
'model': 'Daikin-fwec3a-esp32-homekit-bridge',
|
'model': 'Daikin-fwec3a-esp32-homekit-bridge',
|
||||||
'name': 'Air Conditioner',
|
'name': 'Air Conditioner',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '00000001',
|
'serial_number': '00000001',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
@ -10955,6 +11008,7 @@
|
||||||
'model': 'LTW012',
|
'model': 'LTW012',
|
||||||
'name': 'Hue ambiance candle',
|
'name': 'Hue ambiance candle',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462395276914',
|
'serial_number': '6623462395276914',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -11091,6 +11145,7 @@
|
||||||
'model': 'LTW012',
|
'model': 'LTW012',
|
||||||
'name': 'Hue ambiance candle',
|
'name': 'Hue ambiance candle',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462395276939',
|
'serial_number': '6623462395276939',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -11227,6 +11282,7 @@
|
||||||
'model': 'LTW012',
|
'model': 'LTW012',
|
||||||
'name': 'Hue ambiance candle',
|
'name': 'Hue ambiance candle',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462403113447',
|
'serial_number': '6623462403113447',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -11363,6 +11419,7 @@
|
||||||
'model': 'LTW012',
|
'model': 'LTW012',
|
||||||
'name': 'Hue ambiance candle',
|
'name': 'Hue ambiance candle',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462403233419',
|
'serial_number': '6623462403233419',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -11499,6 +11556,7 @@
|
||||||
'model': 'LTW013',
|
'model': 'LTW013',
|
||||||
'name': 'Hue ambiance spot',
|
'name': 'Hue ambiance spot',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462412411853',
|
'serial_number': '6623462412411853',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -11645,6 +11703,7 @@
|
||||||
'model': 'LTW013',
|
'model': 'LTW013',
|
||||||
'name': 'Hue ambiance spot',
|
'name': 'Hue ambiance spot',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462412413293',
|
'serial_number': '6623462412413293',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -11791,6 +11850,7 @@
|
||||||
'model': 'RWL021',
|
'model': 'RWL021',
|
||||||
'name': 'Hue dimmer switch',
|
'name': 'Hue dimmer switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462389072572',
|
'serial_number': '6623462389072572',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '45.1.17846',
|
'sw_version': '45.1.17846',
|
||||||
|
@ -12106,6 +12166,7 @@
|
||||||
'model': 'LWB010',
|
'model': 'LWB010',
|
||||||
'name': 'Hue white lamp',
|
'name': 'Hue white lamp',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462378982941',
|
'serial_number': '6623462378982941',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -12229,6 +12290,7 @@
|
||||||
'model': 'LWB010',
|
'model': 'LWB010',
|
||||||
'name': 'Hue white lamp',
|
'name': 'Hue white lamp',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462378983942',
|
'serial_number': '6623462378983942',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -12352,6 +12414,7 @@
|
||||||
'model': 'LWB010',
|
'model': 'LWB010',
|
||||||
'name': 'Hue white lamp',
|
'name': 'Hue white lamp',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462379122122',
|
'serial_number': '6623462379122122',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -12475,6 +12538,7 @@
|
||||||
'model': 'LWB010',
|
'model': 'LWB010',
|
||||||
'name': 'Hue white lamp',
|
'name': 'Hue white lamp',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462379123707',
|
'serial_number': '6623462379123707',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -12598,6 +12662,7 @@
|
||||||
'model': 'LWB010',
|
'model': 'LWB010',
|
||||||
'name': 'Hue white lamp',
|
'name': 'Hue white lamp',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462383114163',
|
'serial_number': '6623462383114163',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -12721,6 +12786,7 @@
|
||||||
'model': 'LWB010',
|
'model': 'LWB010',
|
||||||
'name': 'Hue white lamp',
|
'name': 'Hue white lamp',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462383114193',
|
'serial_number': '6623462383114193',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -12844,6 +12910,7 @@
|
||||||
'model': 'LWB010',
|
'model': 'LWB010',
|
||||||
'name': 'Hue white lamp',
|
'name': 'Hue white lamp',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '6623462385996792',
|
'serial_number': '6623462385996792',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.46.13',
|
'sw_version': '1.46.13',
|
||||||
|
@ -12967,6 +13034,7 @@
|
||||||
'model': 'BSB002',
|
'model': 'BSB002',
|
||||||
'name': 'Philips hue - 482544',
|
'name': 'Philips hue - 482544',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '123456',
|
'serial_number': '123456',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.32.1932126170',
|
'sw_version': '1.32.1932126170',
|
||||||
|
@ -13044,6 +13112,7 @@
|
||||||
'model': 'LS1',
|
'model': 'LS1',
|
||||||
'name': 'Koogeek-LS1-20833F',
|
'name': 'Koogeek-LS1-20833F',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AAAA011111111111',
|
'serial_number': 'AAAA011111111111',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2.2.15',
|
'sw_version': '2.2.15',
|
||||||
|
@ -13186,6 +13255,7 @@
|
||||||
'model': 'P1EU',
|
'model': 'P1EU',
|
||||||
'name': 'Koogeek-P1-A00AA0',
|
'name': 'Koogeek-P1-A00AA0',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'EUCP03190xxxxx48',
|
'serial_number': 'EUCP03190xxxxx48',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2.3.7',
|
'sw_version': '2.3.7',
|
||||||
|
@ -13349,6 +13419,7 @@
|
||||||
'model': 'KH02CN',
|
'model': 'KH02CN',
|
||||||
'name': 'Koogeek-SW2-187A91',
|
'name': 'Koogeek-SW2-187A91',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'CNNT061751001372',
|
'serial_number': 'CNNT061751001372',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.3',
|
'sw_version': '1.0.3',
|
||||||
|
@ -13551,6 +13622,7 @@
|
||||||
'model': 'E30 2B',
|
'model': 'E30 2B',
|
||||||
'name': 'Lennox',
|
'name': 'Lennox',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'XXXXXXXX',
|
'serial_number': 'XXXXXXXX',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.40.XX',
|
'sw_version': '3.40.XX',
|
||||||
|
@ -13831,6 +13903,7 @@
|
||||||
'model': 'OLED55B9PUA',
|
'model': 'OLED55B9PUA',
|
||||||
'name': 'LG webOS TV AF80',
|
'name': 'LG webOS TV AF80',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '999AAAAAA999',
|
'serial_number': '999AAAAAA999',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '04.71.04',
|
'sw_version': '04.71.04',
|
||||||
|
@ -14010,6 +14083,7 @@
|
||||||
'model': 'PD-FSQN-XX',
|
'model': 'PD-FSQN-XX',
|
||||||
'name': 'Caséta® Wireless Fan Speed Control',
|
'name': 'Caséta® Wireless Fan Speed Control',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '39024290',
|
'serial_number': '39024290',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '001.005',
|
'sw_version': '001.005',
|
||||||
|
@ -14130,6 +14204,7 @@
|
||||||
'model': 'L-BDG2-WH',
|
'model': 'L-BDG2-WH',
|
||||||
'name': 'Smart Bridge 2',
|
'name': 'Smart Bridge 2',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '12344331',
|
'serial_number': '12344331',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '08.08',
|
'sw_version': '08.08',
|
||||||
|
@ -14207,6 +14282,7 @@
|
||||||
'model': 'MSS425F',
|
'model': 'MSS425F',
|
||||||
'name': 'MSS425F-15cc',
|
'name': 'MSS425F-15cc',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'HH41234',
|
'serial_number': 'HH41234',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.2.3',
|
'sw_version': '4.2.3',
|
||||||
|
@ -14484,6 +14560,7 @@
|
||||||
'model': 'MSS565',
|
'model': 'MSS565',
|
||||||
'name': 'MSS565-28da',
|
'name': 'MSS565-28da',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'BB1121',
|
'serial_number': 'BB1121',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.1.9',
|
'sw_version': '4.1.9',
|
||||||
|
@ -14611,6 +14688,7 @@
|
||||||
'model': 'v1',
|
'model': 'v1',
|
||||||
'name': 'Mysa-85dda9',
|
'name': 'Mysa-85dda9',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AAAAAAA000',
|
'serial_number': 'AAAAAAA000',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2.8.1',
|
'sw_version': '2.8.1',
|
||||||
|
@ -14939,6 +15017,7 @@
|
||||||
'model': 'NL55',
|
'model': 'NL55',
|
||||||
'name': 'Nanoleaf Strip 3B32',
|
'name': 'Nanoleaf Strip 3B32',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AAAA011111111111',
|
'serial_number': 'AAAA011111111111',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.4.40',
|
'sw_version': '1.4.40',
|
||||||
|
@ -15209,6 +15288,7 @@
|
||||||
'model': 'Netatmo Doorbell',
|
'model': 'Netatmo Doorbell',
|
||||||
'name': 'Netatmo-Doorbell-g738658',
|
'name': 'Netatmo-Doorbell-g738658',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'g738658',
|
'serial_number': 'g738658',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '80.0.0',
|
'sw_version': '80.0.0',
|
||||||
|
@ -15501,6 +15581,7 @@
|
||||||
'model': 'Smart CO Alarm',
|
'model': 'Smart CO Alarm',
|
||||||
'name': 'Smart CO Alarm',
|
'name': 'Smart CO Alarm',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1234',
|
'serial_number': '1234',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.3',
|
'sw_version': '1.0.3',
|
||||||
|
@ -15660,6 +15741,7 @@
|
||||||
'model': 'Healthy Home Coach',
|
'model': 'Healthy Home Coach',
|
||||||
'name': 'Healthy Home Coach',
|
'name': 'Healthy Home Coach',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AAAAAAAAAAAAA',
|
'serial_number': 'AAAAAAAAAAAAA',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '59',
|
'sw_version': '59',
|
||||||
|
@ -15961,6 +16043,7 @@
|
||||||
'model': 'SPK5 Pro',
|
'model': 'SPK5 Pro',
|
||||||
'name': 'RainMachine-00ce4a',
|
'name': 'RainMachine-00ce4a',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '00aa0000aa0a',
|
'serial_number': '00aa0000aa0a',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.4',
|
'sw_version': '1.0.4',
|
||||||
|
@ -16382,6 +16465,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'Master Bath South',
|
'name': 'Master Bath South',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1.0.0',
|
'serial_number': '1.0.0',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.0.8',
|
'sw_version': '3.0.8',
|
||||||
|
@ -16543,6 +16627,7 @@
|
||||||
'model': 'RYSE SmartBridge',
|
'model': 'RYSE SmartBridge',
|
||||||
'name': 'RYSE SmartBridge',
|
'name': 'RYSE SmartBridge',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '0101.3521.0436',
|
'serial_number': '0101.3521.0436',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.3.0',
|
'sw_version': '1.3.0',
|
||||||
|
@ -16616,6 +16701,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'RYSE SmartShade',
|
'name': 'RYSE SmartShade',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '',
|
'serial_number': '',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '',
|
'sw_version': '',
|
||||||
|
@ -16781,6 +16867,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'BR Left',
|
'name': 'BR Left',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1.0.0',
|
'serial_number': '1.0.0',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.0.8',
|
'sw_version': '3.0.8',
|
||||||
|
@ -16942,6 +17029,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'LR Left',
|
'name': 'LR Left',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1.0.0',
|
'serial_number': '1.0.0',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.0.8',
|
'sw_version': '3.0.8',
|
||||||
|
@ -17103,6 +17191,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'LR Right',
|
'name': 'LR Right',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1.0.0',
|
'serial_number': '1.0.0',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.0.8',
|
'sw_version': '3.0.8',
|
||||||
|
@ -17264,6 +17353,7 @@
|
||||||
'model': 'RYSE SmartBridge',
|
'model': 'RYSE SmartBridge',
|
||||||
'name': 'RYSE SmartBridge',
|
'name': 'RYSE SmartBridge',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '0401.3521.0679',
|
'serial_number': '0401.3521.0679',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.3.0',
|
'sw_version': '1.3.0',
|
||||||
|
@ -17337,6 +17427,7 @@
|
||||||
'model': 'RYSE Shade',
|
'model': 'RYSE Shade',
|
||||||
'name': 'RZSS',
|
'name': 'RZSS',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1.0.0',
|
'serial_number': '1.0.0',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.0.8',
|
'sw_version': '3.0.8',
|
||||||
|
@ -17502,6 +17593,7 @@
|
||||||
'model': 'BE479CAM619',
|
'model': 'BE479CAM619',
|
||||||
'name': 'SENSE ',
|
'name': 'SENSE ',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AAAAAAA000',
|
'serial_number': 'AAAAAAA000',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '004.027.000',
|
'sw_version': '004.027.000',
|
||||||
|
@ -17620,6 +17712,7 @@
|
||||||
'model': 'SIMPLEconnect',
|
'model': 'SIMPLEconnect',
|
||||||
'name': 'SIMPLEconnect Fan-06F674',
|
'name': 'SIMPLEconnect Fan-06F674',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1234567890abcd',
|
'serial_number': '1234567890abcd',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '',
|
'sw_version': '',
|
||||||
|
@ -17795,6 +17888,7 @@
|
||||||
'model': 'VELUX Gateway',
|
'model': 'VELUX Gateway',
|
||||||
'name': 'VELUX Gateway',
|
'name': 'VELUX Gateway',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'a1a11a1',
|
'serial_number': 'a1a11a1',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '70',
|
'sw_version': '70',
|
||||||
|
@ -17868,6 +17962,7 @@
|
||||||
'model': 'VELUX Sensor',
|
'model': 'VELUX Sensor',
|
||||||
'name': 'VELUX Sensor',
|
'name': 'VELUX Sensor',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'a11b111',
|
'serial_number': 'a11b111',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '16',
|
'sw_version': '16',
|
||||||
|
@ -18076,6 +18171,7 @@
|
||||||
'model': 'VELUX Window',
|
'model': 'VELUX Window',
|
||||||
'name': 'VELUX Window',
|
'name': 'VELUX Window',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': '1111111a114a111a',
|
'serial_number': '1111111a114a111a',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '48',
|
'sw_version': '48',
|
||||||
|
@ -18196,6 +18292,7 @@
|
||||||
'model': 'Flowerbud',
|
'model': 'Flowerbud',
|
||||||
'name': 'VOCOlinc-Flowerbud-0d324b',
|
'name': 'VOCOlinc-Flowerbud-0d324b',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'AM01121849000327',
|
'serial_number': 'AM01121849000327',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.121.2',
|
'sw_version': '3.121.2',
|
||||||
|
@ -18500,6 +18597,7 @@
|
||||||
'model': 'VP3',
|
'model': 'VP3',
|
||||||
'name': 'VOCOlinc-VP3-123456',
|
'name': 'VOCOlinc-VP3-123456',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': 'TestData',
|
||||||
'serial_number': 'EU0121203xxxxx07',
|
'serial_number': 'EU0121203xxxxx07',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.101.2',
|
'sw_version': '1.101.2',
|
||||||
|
|
|
@ -118,7 +118,7 @@ async def test_migrate_device_id_no_serial_skip_if_other_owner(
|
||||||
bridge = device_registry.async_get(bridge.id)
|
bridge = device_registry.async_get(bridge.id)
|
||||||
|
|
||||||
assert bridge.identifiers == variant.before
|
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)
|
@pytest.mark.parametrize("variant", DEVICE_MIGRATION_TESTS)
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
'model': 'HWE-P1',
|
'model': 'HWE-P1',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.19',
|
'sw_version': '4.19',
|
||||||
|
|
|
@ -83,6 +83,7 @@
|
||||||
'model': 'HWE-SKT',
|
'model': 'HWE-SKT',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.03',
|
'sw_version': '3.03',
|
||||||
|
@ -173,6 +174,7 @@
|
||||||
'model': 'HWE-SKT',
|
'model': 'HWE-SKT',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.07',
|
'sw_version': '4.07',
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -73,6 +73,7 @@
|
||||||
'model': 'HWE-KWH1',
|
'model': 'HWE-KWH1',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.06',
|
'sw_version': '3.06',
|
||||||
|
@ -153,6 +154,7 @@
|
||||||
'model': 'HWE-KWH3',
|
'model': 'HWE-KWH3',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.06',
|
'sw_version': '3.06',
|
||||||
|
@ -234,6 +236,7 @@
|
||||||
'model': 'HWE-SKT',
|
'model': 'HWE-SKT',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.03',
|
'sw_version': '3.03',
|
||||||
|
@ -314,6 +317,7 @@
|
||||||
'model': 'HWE-SKT',
|
'model': 'HWE-SKT',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.03',
|
'sw_version': '3.03',
|
||||||
|
@ -394,6 +398,7 @@
|
||||||
'model': 'HWE-SKT',
|
'model': 'HWE-SKT',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.03',
|
'sw_version': '3.03',
|
||||||
|
@ -475,6 +480,7 @@
|
||||||
'model': 'HWE-SKT',
|
'model': 'HWE-SKT',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.07',
|
'sw_version': '4.07',
|
||||||
|
@ -555,6 +561,7 @@
|
||||||
'model': 'HWE-SKT',
|
'model': 'HWE-SKT',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.07',
|
'sw_version': '4.07',
|
||||||
|
@ -635,6 +642,7 @@
|
||||||
'model': 'HWE-SKT',
|
'model': 'HWE-SKT',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '4.07',
|
'sw_version': '4.07',
|
||||||
|
@ -715,6 +723,7 @@
|
||||||
'model': 'HWE-WTR',
|
'model': 'HWE-WTR',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '2.03',
|
'sw_version': '2.03',
|
||||||
|
@ -795,6 +804,7 @@
|
||||||
'model': 'SDM230-wifi',
|
'model': 'SDM230-wifi',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.06',
|
'sw_version': '3.06',
|
||||||
|
@ -875,6 +885,7 @@
|
||||||
'model': 'SDM630-wifi',
|
'model': 'SDM630-wifi',
|
||||||
'name': 'Device',
|
'name': 'Device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '3.06',
|
'sw_version': '3.06',
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': '450XH-TEST',
|
'model': '450XH-TEST',
|
||||||
'name': 'Test Mower 1',
|
'name': 'Test Mower 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 123,
|
'serial_number': 123,
|
||||||
'suggested_area': 'Garden',
|
'suggested_area': 'Garden',
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -198,7 +198,7 @@ async def test_device_info(
|
||||||
|
|
||||||
device = device_registry.async_get_device(identifiers={(DOMAIN, device_id)})
|
device = device_registry.async_get_device(identifiers={(DOMAIN, device_id)})
|
||||||
assert device
|
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.identifiers == {(DOMAIN, device_id)}
|
||||||
assert device.manufacturer == HYPERION_MANUFACTURER_NAME
|
assert device.manufacturer == HYPERION_MANUFACTURER_NAME
|
||||||
assert device.model == HYPERION_MODEL_NAME
|
assert device.model == HYPERION_MODEL_NAME
|
||||||
|
|
|
@ -803,7 +803,7 @@ async def test_device_info(
|
||||||
|
|
||||||
device = device_registry.async_get_device(identifiers={(DOMAIN, device_id)})
|
device = device_registry.async_get_device(identifiers={(DOMAIN, device_id)})
|
||||||
assert device
|
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.identifiers == {(DOMAIN, device_id)}
|
||||||
assert device.manufacturer == HYPERION_MANUFACTURER_NAME
|
assert device.manufacturer == HYPERION_MANUFACTURER_NAME
|
||||||
assert device.model == HYPERION_MODEL_NAME
|
assert device.model == HYPERION_MODEL_NAME
|
||||||
|
|
|
@ -66,7 +66,7 @@ async def test_device_info(
|
||||||
|
|
||||||
device = device_registry.async_get_device(identifiers={(DOMAIN, device_identifer)})
|
device = device_registry.async_get_device(identifiers={(DOMAIN, device_identifer)})
|
||||||
assert device
|
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.identifiers == {(DOMAIN, device_identifer)}
|
||||||
assert device.manufacturer == HYPERION_MANUFACTURER_NAME
|
assert device.manufacturer == HYPERION_MANUFACTURER_NAME
|
||||||
assert device.model == HYPERION_MODEL_NAME
|
assert device.model == HYPERION_MODEL_NAME
|
||||||
|
|
|
@ -170,7 +170,7 @@ async def test_device_info(
|
||||||
|
|
||||||
device = device_registry.async_get_device(identifiers={(DOMAIN, device_identifer)})
|
device = device_registry.async_get_device(identifiers={(DOMAIN, device_identifer)})
|
||||||
assert device
|
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.identifiers == {(DOMAIN, device_identifer)}
|
||||||
assert device.manufacturer == HYPERION_MANUFACTURER_NAME
|
assert device.manufacturer == HYPERION_MANUFACTURER_NAME
|
||||||
assert device.model == HYPERION_MODEL_NAME
|
assert device.model == HYPERION_MODEL_NAME
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'ista EcoTrend',
|
'model': 'ista EcoTrend',
|
||||||
'name': 'Luxemburger Str. 1',
|
'name': 'Luxemburger Str. 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -53,6 +54,7 @@
|
||||||
'model': 'ista EcoTrend',
|
'model': 'ista EcoTrend',
|
||||||
'name': 'Bahnhofsstr. 1A',
|
'name': 'Bahnhofsstr. 1A',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -69,6 +69,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Outlet 1',
|
'name': 'Outlet 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -99,6 +100,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Power strip with 2 sockets',
|
'name': 'Power strip with 2 sockets',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -175,6 +177,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Outlet 2',
|
'name': 'Outlet 2',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -205,6 +208,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Power strip with 2 sockets',
|
'name': 'Power strip with 2 sockets',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -115,6 +115,7 @@
|
||||||
'model': <MachineModel.GS3_AV: 'GS3 AV'>,
|
'model': <MachineModel.GS3_AV: 'GS3 AV'>,
|
||||||
'name': 'GS01234',
|
'name': 'GS01234',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'GS01234',
|
'serial_number': 'GS01234',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.40',
|
'sw_version': '1.40',
|
||||||
|
|
|
@ -65,7 +65,7 @@ async def test_migration_device_online_end_to_end(
|
||||||
|
|
||||||
assert migrated_entry is not None
|
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 light_entity_reg.config_entry_id == migrated_entry.entry_id
|
||||||
assert er.async_entries_for_config_entry(entity_reg, config_entry) == []
|
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))
|
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(minutes=20))
|
||||||
await hass.async_block_till_done()
|
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 light_entity_reg.config_entry_id == config_entry.entry_id
|
||||||
assert er.async_entries_for_config_entry(entity_reg, config_entry) == []
|
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 new_entry is not None
|
||||||
assert legacy_entry is 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 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 ignored_entity_reg.config_entry_id == other_domain_config_entry.entry_id
|
||||||
assert garbage_entity_reg.config_entry_id == legacy_config_entry.entry_id
|
assert garbage_entity_reg.config_entry_id == legacy_config_entry.entry_id
|
||||||
|
|
|
@ -111,7 +111,7 @@ async def test_humanify_lutron_caseta_button_event_integration_not_loaded(
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
for device in device_registry.devices.values():
|
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
|
dr_device_id = device.id
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Mealie',
|
'name': 'Mealie',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -339,7 +339,7 @@ async def test_device_info(
|
||||||
|
|
||||||
device = device_registry.async_get_device(identifiers={device_identifier})
|
device = device_registry.async_get_device(identifiers={device_identifier})
|
||||||
assert device
|
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.identifiers == {device_identifier}
|
||||||
assert device.manufacturer == MOTIONEYE_MANUFACTURER
|
assert device.manufacturer == MOTIONEYE_MANUFACTURER
|
||||||
assert device.model == MOTIONEYE_MANUFACTURER
|
assert device.model == MOTIONEYE_MANUFACTURER
|
||||||
|
|
|
@ -965,10 +965,10 @@ async def test_cleanup_device_multiple_config_entries(
|
||||||
connections={("mac", "12:34:56:AB:CD:EF")}
|
connections={("mac", "12:34:56:AB:CD:EF")}
|
||||||
)
|
)
|
||||||
assert device_entry is not None
|
assert device_entry is not None
|
||||||
assert device_entry.config_entries == [
|
assert device_entry.config_entries == {
|
||||||
config_entry.entry_id,
|
|
||||||
mqtt_config_entry.entry_id,
|
mqtt_config_entry.entry_id,
|
||||||
]
|
config_entry.entry_id,
|
||||||
|
}
|
||||||
entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor")
|
entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor")
|
||||||
assert entity_entry is not None
|
assert entity_entry is not None
|
||||||
|
|
||||||
|
@ -991,7 +991,7 @@ async def test_cleanup_device_multiple_config_entries(
|
||||||
)
|
)
|
||||||
assert device_entry is not None
|
assert device_entry is not None
|
||||||
entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor")
|
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
|
assert entity_entry is None
|
||||||
|
|
||||||
# Verify state is removed
|
# 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")}
|
connections={("mac", "12:34:56:AB:CD:EF")}
|
||||||
)
|
)
|
||||||
assert device_entry is not None
|
assert device_entry is not None
|
||||||
assert device_entry.config_entries == [
|
assert device_entry.config_entries == {
|
||||||
config_entry.entry_id,
|
|
||||||
mqtt_config_entry.entry_id,
|
mqtt_config_entry.entry_id,
|
||||||
]
|
config_entry.entry_id,
|
||||||
|
}
|
||||||
entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor")
|
entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor")
|
||||||
assert entity_entry is not None
|
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
|
assert device_entry is not None
|
||||||
entity_entry = entity_registry.async_get("sensor.none_mqtt_sensor")
|
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
|
assert entity_entry is None
|
||||||
|
|
||||||
# Verify state is removed
|
# Verify state is removed
|
||||||
|
|
|
@ -587,7 +587,7 @@ async def test_cleanup_tag(
|
||||||
identifiers={("mqtt", "helloworld")}
|
identifiers={("mqtt", "helloworld")}
|
||||||
)
|
)
|
||||||
assert device_entry1 is not None
|
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")})
|
device_entry2 = device_registry.async_get_device(identifiers={("mqtt", "hejhopp")})
|
||||||
assert device_entry2 is not None
|
assert device_entry2 is not None
|
||||||
|
|
||||||
|
@ -599,7 +599,7 @@ async def test_cleanup_tag(
|
||||||
identifiers={("mqtt", "helloworld")}
|
identifiers={("mqtt", "helloworld")}
|
||||||
)
|
)
|
||||||
assert device_entry1 is not None
|
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")})
|
device_entry2 = device_registry.async_get_device(identifiers={("mqtt", "hejhopp")})
|
||||||
assert device_entry2 is not None
|
assert device_entry2 is not None
|
||||||
mqtt_mock.async_publish.assert_not_called()
|
mqtt_mock.async_publish.assert_not_called()
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'Roller Shutter',
|
'model': 'Roller Shutter',
|
||||||
'name': 'Entrance Blinds',
|
'name': 'Entrance Blinds',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -53,6 +54,7 @@
|
||||||
'model': 'Orientable Shutter',
|
'model': 'Orientable Shutter',
|
||||||
'name': 'Bubendorff blind',
|
'name': 'Bubendorff blind',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -83,6 +85,7 @@
|
||||||
'model': '2 wire light switch/dimmer',
|
'model': '2 wire light switch/dimmer',
|
||||||
'name': 'Unknown 00:11:22:33:00:11:45:fe',
|
'name': 'Unknown 00:11:22:33:00:11:45:fe',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -113,6 +116,7 @@
|
||||||
'model': 'Smarther with Netatmo',
|
'model': 'Smarther with Netatmo',
|
||||||
'name': 'Corridor',
|
'name': 'Corridor',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': 'Corridor',
|
'suggested_area': 'Corridor',
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -143,6 +147,7 @@
|
||||||
'model': 'Connected Energy Meter',
|
'model': 'Connected Energy Meter',
|
||||||
'name': 'Consumption meter',
|
'name': 'Consumption meter',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -173,6 +178,7 @@
|
||||||
'model': 'Light switch/dimmer with neutral',
|
'model': 'Light switch/dimmer with neutral',
|
||||||
'name': 'Bathroom light',
|
'name': 'Bathroom light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -203,6 +209,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Line 1',
|
'name': 'Line 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -233,6 +240,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Line 2',
|
'name': 'Line 2',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -263,6 +271,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Line 3',
|
'name': 'Line 3',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -293,6 +302,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Line 4',
|
'name': 'Line 4',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -323,6 +333,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Line 5',
|
'name': 'Line 5',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -353,6 +364,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Total',
|
'name': 'Total',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -383,6 +395,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Gas',
|
'name': 'Gas',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -413,6 +426,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Hot water',
|
'name': 'Hot water',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -443,6 +457,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Cold water',
|
'name': 'Cold water',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -473,6 +488,7 @@
|
||||||
'model': 'Connected Ecometer',
|
'model': 'Connected Ecometer',
|
||||||
'name': 'Écocompteur',
|
'name': 'Écocompteur',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -503,6 +519,7 @@
|
||||||
'model': 'Smart Indoor Camera',
|
'model': 'Smart Indoor Camera',
|
||||||
'name': 'Hall',
|
'name': 'Hall',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -533,6 +550,7 @@
|
||||||
'model': 'Smart Anemometer',
|
'model': 'Smart Anemometer',
|
||||||
'name': 'Villa Garden',
|
'name': 'Villa Garden',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -563,6 +581,7 @@
|
||||||
'model': 'Smart Outdoor Camera',
|
'model': 'Smart Outdoor Camera',
|
||||||
'name': 'Front',
|
'name': 'Front',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -593,6 +612,7 @@
|
||||||
'model': 'Smart Video Doorbell',
|
'model': 'Smart Video Doorbell',
|
||||||
'name': 'Netatmo-Doorbell',
|
'name': 'Netatmo-Doorbell',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -623,6 +643,7 @@
|
||||||
'model': 'Smart Indoor Air Quality Monitor',
|
'model': 'Smart Indoor Air Quality Monitor',
|
||||||
'name': 'Kitchen',
|
'name': 'Kitchen',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -653,6 +674,7 @@
|
||||||
'model': 'Smart Indoor Air Quality Monitor',
|
'model': 'Smart Indoor Air Quality Monitor',
|
||||||
'name': 'Livingroom',
|
'name': 'Livingroom',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -683,6 +705,7 @@
|
||||||
'model': 'Smart Indoor Air Quality Monitor',
|
'model': 'Smart Indoor Air Quality Monitor',
|
||||||
'name': 'Baby Bedroom',
|
'name': 'Baby Bedroom',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -713,6 +736,7 @@
|
||||||
'model': 'Smart Indoor Air Quality Monitor',
|
'model': 'Smart Indoor Air Quality Monitor',
|
||||||
'name': 'Bedroom',
|
'name': 'Bedroom',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -743,6 +767,7 @@
|
||||||
'model': 'Smart Indoor Air Quality Monitor',
|
'model': 'Smart Indoor Air Quality Monitor',
|
||||||
'name': 'Parents Bedroom',
|
'name': 'Parents Bedroom',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -773,6 +798,7 @@
|
||||||
'model': 'Plug',
|
'model': 'Plug',
|
||||||
'name': 'Prise',
|
'name': 'Prise',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -803,6 +829,7 @@
|
||||||
'model': 'Smart Outdoor Module',
|
'model': 'Smart Outdoor Module',
|
||||||
'name': 'Villa Outdoor',
|
'name': 'Villa Outdoor',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -833,6 +860,7 @@
|
||||||
'model': 'Smart Indoor Module',
|
'model': 'Smart Indoor Module',
|
||||||
'name': 'Villa Bedroom',
|
'name': 'Villa Bedroom',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -863,6 +891,7 @@
|
||||||
'model': 'Smart Indoor Module',
|
'model': 'Smart Indoor Module',
|
||||||
'name': 'Villa Bathroom',
|
'name': 'Villa Bathroom',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -893,6 +922,7 @@
|
||||||
'model': 'Smart Home Weather station',
|
'model': 'Smart Home Weather station',
|
||||||
'name': 'Villa',
|
'name': 'Villa',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -923,6 +953,7 @@
|
||||||
'model': 'Smart Rain Gauge',
|
'model': 'Smart Rain Gauge',
|
||||||
'name': 'Villa Rain',
|
'name': 'Villa Rain',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -953,6 +984,7 @@
|
||||||
'model': 'OpenTherm Modulating Thermostat',
|
'model': 'OpenTherm Modulating Thermostat',
|
||||||
'name': 'Bureau Modulate',
|
'name': 'Bureau Modulate',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': 'Bureau',
|
'suggested_area': 'Bureau',
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -983,6 +1015,7 @@
|
||||||
'model': 'Smart Thermostat',
|
'model': 'Smart Thermostat',
|
||||||
'name': 'Livingroom',
|
'name': 'Livingroom',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': 'Livingroom',
|
'suggested_area': 'Livingroom',
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1013,6 +1046,7 @@
|
||||||
'model': 'Smart Valve',
|
'model': 'Smart Valve',
|
||||||
'name': 'Valve1',
|
'name': 'Valve1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': 'Entrada',
|
'suggested_area': 'Entrada',
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1043,6 +1077,7 @@
|
||||||
'model': 'Smart Valve',
|
'model': 'Smart Valve',
|
||||||
'name': 'Valve2',
|
'name': 'Valve2',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': 'Cocina',
|
'suggested_area': 'Cocina',
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1073,6 +1108,7 @@
|
||||||
'model': 'Climate',
|
'model': 'Climate',
|
||||||
'name': 'MYHOME',
|
'name': 'MYHOME',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1103,6 +1139,7 @@
|
||||||
'model': 'Public Weather station',
|
'model': 'Public Weather station',
|
||||||
'name': 'Home avg',
|
'name': 'Home avg',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1133,6 +1170,7 @@
|
||||||
'model': 'Public Weather station',
|
'model': 'Public Weather station',
|
||||||
'name': 'Home max',
|
'name': 'Home max',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'LM1200',
|
'model': 'LM1200',
|
||||||
'name': 'Netgear LM1200',
|
'name': 'Netgear LM1200',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'FFFFFFFFFFFFF',
|
'serial_number': 'FFFFFFFFFFFFF',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'EC25AFFDR07A09M4G',
|
'sw_version': 'EC25AFFDR07A09M4G',
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'ICO',
|
'model': 'ICO',
|
||||||
'name': 'Pool 1',
|
'name': 'Pool 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.7.1-stable',
|
'sw_version': '1.7.1-stable',
|
||||||
|
@ -53,6 +54,7 @@
|
||||||
'model': 'ICO',
|
'model': 'ICO',
|
||||||
'name': 'Pool 2',
|
'name': 'Pool 2',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.7.1-stable',
|
'sw_version': '1.7.1-stable',
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
'model': 'DS2405',
|
'model': 'DS2405',
|
||||||
'name': '05.111111111111',
|
'name': '05.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -76,6 +77,7 @@
|
||||||
'model': 'DS18S20',
|
'model': 'DS18S20',
|
||||||
'name': '10.111111111111',
|
'name': '10.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -116,6 +118,7 @@
|
||||||
'model': 'DS2406',
|
'model': 'DS2406',
|
||||||
'name': '12.111111111111',
|
'name': '12.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -256,6 +259,7 @@
|
||||||
'model': 'DS2423',
|
'model': 'DS2423',
|
||||||
'name': '1D.111111111111',
|
'name': '1D.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -296,6 +300,7 @@
|
||||||
'model': 'DS2409',
|
'model': 'DS2409',
|
||||||
'name': '1F.111111111111',
|
'name': '1F.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -324,6 +329,7 @@
|
||||||
'model': 'DS2423',
|
'model': 'DS2423',
|
||||||
'name': '1D.111111111111',
|
'name': '1D.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -364,6 +370,7 @@
|
||||||
'model': 'DS1822',
|
'model': 'DS1822',
|
||||||
'name': '22.111111111111',
|
'name': '22.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -404,6 +411,7 @@
|
||||||
'model': 'DS2438',
|
'model': 'DS2438',
|
||||||
'name': '26.111111111111',
|
'name': '26.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -444,6 +452,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.111111111111',
|
'name': '28.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -484,6 +493,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.222222222222',
|
'name': '28.222222222222',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -524,6 +534,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.222222222223',
|
'name': '28.222222222223',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -564,6 +575,7 @@
|
||||||
'model': 'DS2408',
|
'model': 'DS2408',
|
||||||
'name': '29.111111111111',
|
'name': '29.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -956,6 +968,7 @@
|
||||||
'model': 'DS2760',
|
'model': 'DS2760',
|
||||||
'name': '30.111111111111',
|
'name': '30.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -996,6 +1009,7 @@
|
||||||
'model': 'DS2413',
|
'model': 'DS2413',
|
||||||
'name': '3A.111111111111',
|
'name': '3A.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1124,6 +1138,7 @@
|
||||||
'model': 'DS1825',
|
'model': 'DS1825',
|
||||||
'name': '3B.111111111111',
|
'name': '3B.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1164,6 +1179,7 @@
|
||||||
'model': 'DS28EA00',
|
'model': 'DS28EA00',
|
||||||
'name': '42.111111111111',
|
'name': '42.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1204,6 +1220,7 @@
|
||||||
'model': 'EDS0068',
|
'model': 'EDS0068',
|
||||||
'name': '7E.111111111111',
|
'name': '7E.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1244,6 +1261,7 @@
|
||||||
'model': 'EDS0066',
|
'model': 'EDS0066',
|
||||||
'name': '7E.222222222222',
|
'name': '7E.222222222222',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1284,6 +1302,7 @@
|
||||||
'model': 'DS2438',
|
'model': 'DS2438',
|
||||||
'name': 'A6.111111111111',
|
'name': 'A6.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1324,6 +1343,7 @@
|
||||||
'model': 'HobbyBoards_EF',
|
'model': 'HobbyBoards_EF',
|
||||||
'name': 'EF.111111111111',
|
'name': 'EF.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1364,6 +1384,7 @@
|
||||||
'model': 'HB_MOISTURE_METER',
|
'model': 'HB_MOISTURE_METER',
|
||||||
'name': 'EF.111111111112',
|
'name': 'EF.111111111112',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1404,6 +1425,7 @@
|
||||||
'model': 'HB_HUB',
|
'model': 'HB_HUB',
|
||||||
'name': 'EF.111111111113',
|
'name': 'EF.111111111113',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
'model': 'DS2405',
|
'model': 'DS2405',
|
||||||
'name': '05.111111111111',
|
'name': '05.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -76,6 +77,7 @@
|
||||||
'model': 'DS18S20',
|
'model': 'DS18S20',
|
||||||
'name': '10.111111111111',
|
'name': '10.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -165,6 +167,7 @@
|
||||||
'model': 'DS2406',
|
'model': 'DS2406',
|
||||||
'name': '12.111111111111',
|
'name': '12.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -315,6 +318,7 @@
|
||||||
'model': 'DS2423',
|
'model': 'DS2423',
|
||||||
'name': '1D.111111111111',
|
'name': '1D.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -451,6 +455,7 @@
|
||||||
'model': 'DS2409',
|
'model': 'DS2409',
|
||||||
'name': '1F.111111111111',
|
'name': '1F.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -479,6 +484,7 @@
|
||||||
'model': 'DS2423',
|
'model': 'DS2423',
|
||||||
'name': '1D.111111111111',
|
'name': '1D.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -615,6 +621,7 @@
|
||||||
'model': 'DS1822',
|
'model': 'DS1822',
|
||||||
'name': '22.111111111111',
|
'name': '22.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -704,6 +711,7 @@
|
||||||
'model': 'DS2438',
|
'model': 'DS2438',
|
||||||
'name': '26.111111111111',
|
'name': '26.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1283,6 +1291,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.111111111111',
|
'name': '28.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1372,6 +1381,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.222222222222',
|
'name': '28.222222222222',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1461,6 +1471,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.222222222223',
|
'name': '28.222222222223',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1550,6 +1561,7 @@
|
||||||
'model': 'DS2408',
|
'model': 'DS2408',
|
||||||
'name': '29.111111111111',
|
'name': '29.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1590,6 +1602,7 @@
|
||||||
'model': 'DS2760',
|
'model': 'DS2760',
|
||||||
'name': '30.111111111111',
|
'name': '30.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1826,6 +1839,7 @@
|
||||||
'model': 'DS2413',
|
'model': 'DS2413',
|
||||||
'name': '3A.111111111111',
|
'name': '3A.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1866,6 +1880,7 @@
|
||||||
'model': 'DS1825',
|
'model': 'DS1825',
|
||||||
'name': '3B.111111111111',
|
'name': '3B.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1955,6 +1970,7 @@
|
||||||
'model': 'DS28EA00',
|
'model': 'DS28EA00',
|
||||||
'name': '42.111111111111',
|
'name': '42.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -2044,6 +2060,7 @@
|
||||||
'model': 'EDS0068',
|
'model': 'EDS0068',
|
||||||
'name': '7E.111111111111',
|
'name': '7E.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -2280,6 +2297,7 @@
|
||||||
'model': 'EDS0066',
|
'model': 'EDS0066',
|
||||||
'name': '7E.222222222222',
|
'name': '7E.222222222222',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -2418,6 +2436,7 @@
|
||||||
'model': 'DS2438',
|
'model': 'DS2438',
|
||||||
'name': 'A6.111111111111',
|
'name': 'A6.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -2997,6 +3016,7 @@
|
||||||
'model': 'HobbyBoards_EF',
|
'model': 'HobbyBoards_EF',
|
||||||
'name': 'EF.111111111111',
|
'name': 'EF.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -3184,6 +3204,7 @@
|
||||||
'model': 'HB_MOISTURE_METER',
|
'model': 'HB_MOISTURE_METER',
|
||||||
'name': 'EF.111111111112',
|
'name': 'EF.111111111112',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -3420,6 +3441,7 @@
|
||||||
'model': 'HB_HUB',
|
'model': 'HB_HUB',
|
||||||
'name': 'EF.111111111113',
|
'name': 'EF.111111111113',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
'model': 'DS2405',
|
'model': 'DS2405',
|
||||||
'name': '05.111111111111',
|
'name': '05.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -120,6 +121,7 @@
|
||||||
'model': 'DS18S20',
|
'model': 'DS18S20',
|
||||||
'name': '10.111111111111',
|
'name': '10.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -160,6 +162,7 @@
|
||||||
'model': 'DS2406',
|
'model': 'DS2406',
|
||||||
'name': '12.111111111111',
|
'name': '12.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -388,6 +391,7 @@
|
||||||
'model': 'DS2423',
|
'model': 'DS2423',
|
||||||
'name': '1D.111111111111',
|
'name': '1D.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -428,6 +432,7 @@
|
||||||
'model': 'DS2409',
|
'model': 'DS2409',
|
||||||
'name': '1F.111111111111',
|
'name': '1F.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -456,6 +461,7 @@
|
||||||
'model': 'DS2423',
|
'model': 'DS2423',
|
||||||
'name': '1D.111111111111',
|
'name': '1D.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -496,6 +502,7 @@
|
||||||
'model': 'DS1822',
|
'model': 'DS1822',
|
||||||
'name': '22.111111111111',
|
'name': '22.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -536,6 +543,7 @@
|
||||||
'model': 'DS2438',
|
'model': 'DS2438',
|
||||||
'name': '26.111111111111',
|
'name': '26.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -620,6 +628,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.111111111111',
|
'name': '28.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -660,6 +669,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.222222222222',
|
'name': '28.222222222222',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -700,6 +710,7 @@
|
||||||
'model': 'DS18B20',
|
'model': 'DS18B20',
|
||||||
'name': '28.222222222223',
|
'name': '28.222222222223',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -740,6 +751,7 @@
|
||||||
'model': 'DS2408',
|
'model': 'DS2408',
|
||||||
'name': '29.111111111111',
|
'name': '29.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1484,6 +1496,7 @@
|
||||||
'model': 'DS2760',
|
'model': 'DS2760',
|
||||||
'name': '30.111111111111',
|
'name': '30.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1524,6 +1537,7 @@
|
||||||
'model': 'DS2413',
|
'model': 'DS2413',
|
||||||
'name': '3A.111111111111',
|
'name': '3A.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1652,6 +1666,7 @@
|
||||||
'model': 'DS1825',
|
'model': 'DS1825',
|
||||||
'name': '3B.111111111111',
|
'name': '3B.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1692,6 +1707,7 @@
|
||||||
'model': 'DS28EA00',
|
'model': 'DS28EA00',
|
||||||
'name': '42.111111111111',
|
'name': '42.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1732,6 +1748,7 @@
|
||||||
'model': 'EDS0068',
|
'model': 'EDS0068',
|
||||||
'name': '7E.111111111111',
|
'name': '7E.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1772,6 +1789,7 @@
|
||||||
'model': 'EDS0066',
|
'model': 'EDS0066',
|
||||||
'name': '7E.222222222222',
|
'name': '7E.222222222222',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1812,6 +1830,7 @@
|
||||||
'model': 'DS2438',
|
'model': 'DS2438',
|
||||||
'name': 'A6.111111111111',
|
'name': 'A6.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1896,6 +1915,7 @@
|
||||||
'model': 'HobbyBoards_EF',
|
'model': 'HobbyBoards_EF',
|
||||||
'name': 'EF.111111111111',
|
'name': 'EF.111111111111',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1936,6 +1956,7 @@
|
||||||
'model': 'HB_MOISTURE_METER',
|
'model': 'HB_MOISTURE_METER',
|
||||||
'name': 'EF.111111111112',
|
'name': 'EF.111111111112',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -2328,6 +2349,7 @@
|
||||||
'model': 'HB_HUB',
|
'model': 'HB_HUB',
|
||||||
'name': 'EF.111111111113',
|
'name': 'EF.111111111113',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -322,6 +323,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -706,6 +708,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -874,6 +877,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
@ -1300,6 +1304,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -1598,6 +1603,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -1982,6 +1988,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -2150,6 +2157,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -106,6 +107,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -272,6 +274,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -438,6 +441,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
@ -604,6 +608,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -686,6 +691,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -852,6 +858,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -1018,6 +1025,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -107,6 +108,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -190,6 +192,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -230,6 +233,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
@ -313,6 +317,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -399,6 +404,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -485,6 +491,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -525,6 +532,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -64,6 +65,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -159,6 +161,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -254,6 +257,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
@ -349,6 +353,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -389,6 +394,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -484,6 +490,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -579,6 +586,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -332,6 +333,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -1085,6 +1087,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -1834,6 +1837,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
@ -2626,6 +2630,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -2934,6 +2939,7 @@
|
||||||
'model': 'Captur ii',
|
'model': 'Captur ii',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'XJB1SU',
|
'sw_version': 'XJB1SU',
|
||||||
|
@ -3687,6 +3693,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X101VE',
|
'sw_version': 'X101VE',
|
||||||
|
@ -4436,6 +4443,7 @@
|
||||||
'model': 'Zoe',
|
'model': 'Zoe',
|
||||||
'name': 'REG-NUMBER',
|
'name': 'REG-NUMBER',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'X102VE',
|
'sw_version': 'X102VE',
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': '8381BE 13',
|
'name': '8381BE 13',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'NB6VAC-FXC-r0',
|
'model': 'NB6VAC-FXC-r0',
|
||||||
'name': 'SFR Box',
|
'name': 'SFR Box',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
|
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
|
||||||
|
@ -150,6 +151,7 @@
|
||||||
'model': 'NB6VAC-FXC-r0',
|
'model': 'NB6VAC-FXC-r0',
|
||||||
'name': 'SFR Box',
|
'name': 'SFR Box',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
|
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'NB6VAC-FXC-r0',
|
'model': 'NB6VAC-FXC-r0',
|
||||||
'name': 'SFR Box',
|
'name': 'SFR Box',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
|
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'NB6VAC-FXC-r0',
|
'model': 'NB6VAC-FXC-r0',
|
||||||
'name': 'SFR Box',
|
'name': 'SFR Box',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
|
'sw_version': 'NB6VAC-MAIN-R4.0.44k',
|
||||||
|
|
|
@ -70,6 +70,7 @@
|
||||||
'model': 'iQ3',
|
'model': 'iQ3',
|
||||||
'name': 'Door 1',
|
'name': 'Door 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '10.10',
|
'sw_version': '10.10',
|
||||||
|
@ -147,6 +148,7 @@
|
||||||
'model': 'iQ3',
|
'model': 'iQ3',
|
||||||
'name': 'Door 2',
|
'name': 'Door 2',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '10.10',
|
'sw_version': '10.10',
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
'model': 'iQ3',
|
'model': 'iQ3',
|
||||||
'name': 'Tailwind iQ3',
|
'name': 'Tailwind iQ3',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '10.10',
|
'sw_version': '10.10',
|
||||||
|
|
|
@ -71,6 +71,7 @@
|
||||||
'model': 'iQ3',
|
'model': 'iQ3',
|
||||||
'name': 'Door 1',
|
'name': 'Door 1',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '10.10',
|
'sw_version': '10.10',
|
||||||
|
@ -149,6 +150,7 @@
|
||||||
'model': 'iQ3',
|
'model': 'iQ3',
|
||||||
'name': 'Door 2',
|
'name': 'Door 2',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '10.10',
|
'sw_version': '10.10',
|
||||||
|
|
|
@ -83,6 +83,7 @@
|
||||||
'model': 'iQ3',
|
'model': 'iQ3',
|
||||||
'name': 'Tailwind iQ3',
|
'name': 'Tailwind iQ3',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '10.10',
|
'sw_version': '10.10',
|
||||||
|
|
|
@ -340,7 +340,7 @@ async def test_device_remove_multiple_config_entries_1(
|
||||||
connections={(dr.CONNECTION_NETWORK_MAC, mac)}
|
connections={(dr.CONNECTION_NETWORK_MAC, mac)}
|
||||||
)
|
)
|
||||||
assert device_entry is not None
|
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(
|
async_fire_mqtt_message(
|
||||||
hass,
|
hass,
|
||||||
|
@ -354,7 +354,7 @@ async def test_device_remove_multiple_config_entries_1(
|
||||||
connections={(dr.CONNECTION_NETWORK_MAC, mac)}
|
connections={(dr.CONNECTION_NETWORK_MAC, mac)}
|
||||||
)
|
)
|
||||||
assert device_entry is not None
|
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(
|
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)}
|
connections={(dr.CONNECTION_NETWORK_MAC, mac)}
|
||||||
)
|
)
|
||||||
assert device_entry is not None
|
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
|
assert other_device_entry.id != device_entry.id
|
||||||
|
|
||||||
# Remove other config entry from the device
|
# 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)}
|
connections={(dr.CONNECTION_NETWORK_MAC, mac)}
|
||||||
)
|
)
|
||||||
assert device_entry is not None
|
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()
|
mqtt_mock.async_publish.assert_not_called()
|
||||||
|
|
||||||
# Remove other config entry from the other device - Tasmota should not do any cleanup
|
# Remove other config entry from the other device - Tasmota should not do any cleanup
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'Bridge',
|
'model': 'Bridge',
|
||||||
'name': 'Bridge-AB1C',
|
'name': 'Bridge-AB1C',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': '0000-0000',
|
'serial_number': '0000-0000',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -70,6 +70,7 @@
|
||||||
'model': 'Tedee PRO',
|
'model': 'Tedee PRO',
|
||||||
'name': 'Lock-1A2B',
|
'name': 'Lock-1A2B',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -147,6 +148,7 @@
|
||||||
'model': 'Tedee GO',
|
'model': 'Tedee GO',
|
||||||
'name': 'Lock-2C3D',
|
'name': 'Lock-2C3D',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
'model': 'Powerwall 2, Tesla Backup Gateway 2',
|
'model': 'Powerwall 2, Tesla Backup Gateway 2',
|
||||||
'name': 'Energy Site',
|
'name': 'Energy Site',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': '123456',
|
'serial_number': '123456',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -53,6 +54,7 @@
|
||||||
'model': 'Model X',
|
'model': 'Model X',
|
||||||
'name': 'Test',
|
'name': 'Test',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': 'LRWXF7EK4KC700000',
|
'serial_number': 'LRWXF7EK4KC700000',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -83,6 +85,7 @@
|
||||||
'model': 'Gen 3 Wall Connector',
|
'model': 'Gen 3 Wall Connector',
|
||||||
'name': 'Wall Connector',
|
'name': 'Wall Connector',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': '123',
|
'serial_number': '123',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -113,6 +116,7 @@
|
||||||
'model': 'Gen 3 Wall Connector',
|
'model': 'Gen 3 Wall Connector',
|
||||||
'name': 'Wall Connector',
|
'name': 'Wall Connector',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': '234',
|
'serial_number': '234',
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -361,6 +361,7 @@
|
||||||
'model': 'HS100',
|
'model': 'HS100',
|
||||||
'name': 'my_device',
|
'name': 'my_device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
|
|
@ -119,6 +119,7 @@
|
||||||
'model': 'HS100',
|
'model': 'HS100',
|
||||||
'name': 'my_device',
|
'name': 'my_device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
|
|
@ -86,6 +86,7 @@
|
||||||
'model': 'HS100',
|
'model': 'HS100',
|
||||||
'name': 'thermostat',
|
'name': 'thermostat',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
|
|
@ -186,6 +186,7 @@
|
||||||
'model': 'HS100',
|
'model': 'HS100',
|
||||||
'name': 'my_device',
|
'name': 'my_device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
'model': 'HS100',
|
'model': 'HS100',
|
||||||
'name': 'my_device',
|
'name': 'my_device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
'model': 'HS100',
|
'model': 'HS100',
|
||||||
'name': 'my_device',
|
'name': 'my_device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
'model': 'HS100',
|
'model': 'HS100',
|
||||||
'name': 'my_device',
|
'name': 'my_device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
'model': 'HS100',
|
'model': 'HS100',
|
||||||
'name': 'my_device',
|
'name': 'my_device',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '1.0.0',
|
'sw_version': '1.0.0',
|
||||||
|
|
|
@ -101,6 +101,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Twente Milieu',
|
'name': 'Twente Milieu',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -70,6 +70,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Twente Milieu',
|
'name': 'Twente Milieu',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -147,6 +148,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Twente Milieu',
|
'name': 'Twente Milieu',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -224,6 +226,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Twente Milieu',
|
'name': 'Twente Milieu',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -301,6 +304,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Twente Milieu',
|
'name': 'Twente Milieu',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -378,6 +382,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Twente Milieu',
|
'name': 'Twente Milieu',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -63,6 +63,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'Uptime',
|
'name': 'Uptime',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'LV-PUR131S',
|
'model': 'LV-PUR131S',
|
||||||
'name': 'Air Purifier 131s',
|
'name': 'Air Purifier 131s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -114,6 +115,7 @@
|
||||||
'model': 'Core200S',
|
'model': 'Core200S',
|
||||||
'name': 'Air Purifier 200s',
|
'name': 'Air Purifier 200s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -209,6 +211,7 @@
|
||||||
'model': 'LAP-C401S-WJP',
|
'model': 'LAP-C401S-WJP',
|
||||||
'name': 'Air Purifier 400s',
|
'name': 'Air Purifier 400s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -306,6 +309,7 @@
|
||||||
'model': 'LAP-C601S-WUS',
|
'model': 'LAP-C601S-WUS',
|
||||||
'name': 'Air Purifier 600s',
|
'name': 'Air Purifier 600s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -403,6 +407,7 @@
|
||||||
'model': 'ESL100',
|
'model': 'ESL100',
|
||||||
'name': 'Dimmable Light',
|
'name': 'Dimmable Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -439,6 +444,7 @@
|
||||||
'model': 'ESWD16',
|
'model': 'ESWD16',
|
||||||
'name': 'Dimmer Switch',
|
'name': 'Dimmer Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -491,6 +497,7 @@
|
||||||
'model': 'wifi-switch-1.3',
|
'model': 'wifi-switch-1.3',
|
||||||
'name': 'Outlet',
|
'name': 'Outlet',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -527,6 +534,7 @@
|
||||||
'model': 'ESL100CW',
|
'model': 'ESL100CW',
|
||||||
'name': 'Temperature Light',
|
'name': 'Temperature Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -563,6 +571,7 @@
|
||||||
'model': 'ESWL01',
|
'model': 'ESWL01',
|
||||||
'name': 'Wall Switch',
|
'name': 'Wall Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'LV-PUR131S',
|
'model': 'LV-PUR131S',
|
||||||
'name': 'Air Purifier 131s',
|
'name': 'Air Purifier 131s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -60,6 +61,7 @@
|
||||||
'model': 'Core200S',
|
'model': 'Core200S',
|
||||||
'name': 'Air Purifier 200s',
|
'name': 'Air Purifier 200s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -96,6 +98,7 @@
|
||||||
'model': 'LAP-C401S-WJP',
|
'model': 'LAP-C401S-WJP',
|
||||||
'name': 'Air Purifier 400s',
|
'name': 'Air Purifier 400s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -132,6 +135,7 @@
|
||||||
'model': 'LAP-C601S-WUS',
|
'model': 'LAP-C601S-WUS',
|
||||||
'name': 'Air Purifier 600s',
|
'name': 'Air Purifier 600s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -168,6 +172,7 @@
|
||||||
'model': 'ESL100',
|
'model': 'ESL100',
|
||||||
'name': 'Dimmable Light',
|
'name': 'Dimmable Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -256,6 +261,7 @@
|
||||||
'model': 'ESWD16',
|
'model': 'ESWD16',
|
||||||
'name': 'Dimmer Switch',
|
'name': 'Dimmer Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -362,6 +368,7 @@
|
||||||
'model': 'wifi-switch-1.3',
|
'model': 'wifi-switch-1.3',
|
||||||
'name': 'Outlet',
|
'name': 'Outlet',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -398,6 +405,7 @@
|
||||||
'model': 'ESL100CW',
|
'model': 'ESL100CW',
|
||||||
'name': 'Temperature Light',
|
'name': 'Temperature Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -501,6 +509,7 @@
|
||||||
'model': 'ESWL01',
|
'model': 'ESWL01',
|
||||||
'name': 'Wall Switch',
|
'name': 'Wall Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'LV-PUR131S',
|
'model': 'LV-PUR131S',
|
||||||
'name': 'Air Purifier 131s',
|
'name': 'Air Purifier 131s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -152,6 +153,7 @@
|
||||||
'model': 'Core200S',
|
'model': 'Core200S',
|
||||||
'name': 'Air Purifier 200s',
|
'name': 'Air Purifier 200s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -236,6 +238,7 @@
|
||||||
'model': 'LAP-C401S-WJP',
|
'model': 'LAP-C401S-WJP',
|
||||||
'name': 'Air Purifier 400s',
|
'name': 'Air Purifier 400s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -413,6 +416,7 @@
|
||||||
'model': 'LAP-C601S-WUS',
|
'model': 'LAP-C601S-WUS',
|
||||||
'name': 'Air Purifier 600s',
|
'name': 'Air Purifier 600s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -590,6 +594,7 @@
|
||||||
'model': 'ESL100',
|
'model': 'ESL100',
|
||||||
'name': 'Dimmable Light',
|
'name': 'Dimmable Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -626,6 +631,7 @@
|
||||||
'model': 'ESWD16',
|
'model': 'ESWD16',
|
||||||
'name': 'Dimmer Switch',
|
'name': 'Dimmer Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -678,6 +684,7 @@
|
||||||
'model': 'wifi-switch-1.3',
|
'model': 'wifi-switch-1.3',
|
||||||
'name': 'Outlet',
|
'name': 'Outlet',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1008,6 +1015,7 @@
|
||||||
'model': 'ESL100CW',
|
'model': 'ESL100CW',
|
||||||
'name': 'Temperature Light',
|
'name': 'Temperature Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -1044,6 +1052,7 @@
|
||||||
'model': 'ESWL01',
|
'model': 'ESWL01',
|
||||||
'name': 'Wall Switch',
|
'name': 'Wall Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
'model': 'LV-PUR131S',
|
'model': 'LV-PUR131S',
|
||||||
'name': 'Air Purifier 131s',
|
'name': 'Air Purifier 131s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -60,6 +61,7 @@
|
||||||
'model': 'Core200S',
|
'model': 'Core200S',
|
||||||
'name': 'Air Purifier 200s',
|
'name': 'Air Purifier 200s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -96,6 +98,7 @@
|
||||||
'model': 'LAP-C401S-WJP',
|
'model': 'LAP-C401S-WJP',
|
||||||
'name': 'Air Purifier 400s',
|
'name': 'Air Purifier 400s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -132,6 +135,7 @@
|
||||||
'model': 'LAP-C601S-WUS',
|
'model': 'LAP-C601S-WUS',
|
||||||
'name': 'Air Purifier 600s',
|
'name': 'Air Purifier 600s',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -168,6 +172,7 @@
|
||||||
'model': 'ESL100',
|
'model': 'ESL100',
|
||||||
'name': 'Dimmable Light',
|
'name': 'Dimmable Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -204,6 +209,7 @@
|
||||||
'model': 'ESWD16',
|
'model': 'ESWD16',
|
||||||
'name': 'Dimmer Switch',
|
'name': 'Dimmer Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -256,6 +262,7 @@
|
||||||
'model': 'wifi-switch-1.3',
|
'model': 'wifi-switch-1.3',
|
||||||
'name': 'Outlet',
|
'name': 'Outlet',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -336,6 +343,7 @@
|
||||||
'model': 'ESL100CW',
|
'model': 'ESL100CW',
|
||||||
'name': 'Temperature Light',
|
'name': 'Temperature Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -372,6 +380,7 @@
|
||||||
'model': 'ESWL01',
|
'model': 'ESWL01',
|
||||||
'name': 'Wall Switch',
|
'name': 'Wall Switch',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -69,6 +69,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -146,6 +147,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -227,6 +229,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -304,6 +307,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -381,6 +385,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -457,6 +462,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -533,6 +539,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -609,6 +616,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
@ -685,6 +693,7 @@
|
||||||
'model': None,
|
'model': None,
|
||||||
'name': 'home-assistant.io',
|
'name': 'home-assistant.io',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': None,
|
'sw_version': None,
|
||||||
|
|
|
@ -74,6 +74,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
|
|
@ -82,6 +82,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
@ -171,6 +172,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
|
|
@ -84,6 +84,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
@ -269,6 +270,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
@ -358,6 +360,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGBW Light',
|
'name': 'WLED RGBW Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.6b4',
|
'sw_version': '0.8.6b4',
|
||||||
|
@ -447,6 +450,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGBW Light',
|
'name': 'WLED RGBW Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.6b4',
|
'sw_version': '0.8.6b4',
|
||||||
|
|
|
@ -76,6 +76,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
@ -156,6 +157,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
@ -237,6 +239,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
@ -318,6 +321,7 @@
|
||||||
'model': 'DIY light',
|
'model': 'DIY light',
|
||||||
'name': 'WLED RGB Light',
|
'name': 'WLED RGB Light',
|
||||||
'name_by_user': None,
|
'name_by_user': None,
|
||||||
|
'primary_config_entry': <ANY>,
|
||||||
'serial_number': None,
|
'serial_number': None,
|
||||||
'suggested_area': None,
|
'suggested_area': None,
|
||||||
'sw_version': '0.8.5',
|
'sw_version': '0.8.5',
|
||||||
|
|
|
@ -90,7 +90,7 @@ async def test_get_or_create_returns_same_entry(
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
# Only 2 update events. The third entry did not generate any changes.
|
# 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 == {
|
assert update_events[0].data == {
|
||||||
"action": "create",
|
"action": "create",
|
||||||
"device_id": entry.id,
|
"device_id": entry.id,
|
||||||
|
@ -170,9 +170,10 @@ async def test_multiple_config_entries(
|
||||||
assert len(device_registry.devices) == 1
|
assert len(device_registry.devices) == 1
|
||||||
assert entry.id == entry2.id
|
assert entry.id == entry2.id
|
||||||
assert entry.id == entry3.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}
|
||||||
# the 3rd get_or_create was a primary update, so that's now first config entry
|
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.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])
|
@pytest.mark.parametrize("load_registries", [False])
|
||||||
|
@ -202,6 +203,7 @@ async def test_loading_from_storage(
|
||||||
"model": "model",
|
"model": "model",
|
||||||
"name_by_user": "Test Friendly Name",
|
"name_by_user": "Test Friendly Name",
|
||||||
"name": "name",
|
"name": "name",
|
||||||
|
"primary_config_entry": mock_config_entry.entry_id,
|
||||||
"serial_number": "serial_no",
|
"serial_number": "serial_no",
|
||||||
"sw_version": "version",
|
"sw_version": "version",
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -233,7 +235,7 @@ async def test_loading_from_storage(
|
||||||
)
|
)
|
||||||
assert entry == dr.DeviceEntry(
|
assert entry == dr.DeviceEntry(
|
||||||
area_id="12345A",
|
area_id="12345A",
|
||||||
config_entries=[mock_config_entry.entry_id],
|
config_entries={mock_config_entry.entry_id},
|
||||||
configuration_url="https://example.com/config",
|
configuration_url="https://example.com/config",
|
||||||
connections={("Zigbee", "01.23.45.67.89")},
|
connections={("Zigbee", "01.23.45.67.89")},
|
||||||
disabled_by=dr.DeviceEntryDisabler.USER,
|
disabled_by=dr.DeviceEntryDisabler.USER,
|
||||||
|
@ -246,11 +248,12 @@ async def test_loading_from_storage(
|
||||||
model="model",
|
model="model",
|
||||||
name_by_user="Test Friendly Name",
|
name_by_user="Test Friendly Name",
|
||||||
name="name",
|
name="name",
|
||||||
|
primary_config_entry=mock_config_entry.entry_id,
|
||||||
serial_number="serial_no",
|
serial_number="serial_no",
|
||||||
suggested_area=None, # Not stored
|
suggested_area=None, # Not stored
|
||||||
sw_version="version",
|
sw_version="version",
|
||||||
)
|
)
|
||||||
assert isinstance(entry.config_entries, list)
|
assert isinstance(entry.config_entries, set)
|
||||||
assert isinstance(entry.connections, set)
|
assert isinstance(entry.connections, set)
|
||||||
assert isinstance(entry.identifiers, set)
|
assert isinstance(entry.identifiers, set)
|
||||||
|
|
||||||
|
@ -263,26 +266,27 @@ async def test_loading_from_storage(
|
||||||
model="model",
|
model="model",
|
||||||
)
|
)
|
||||||
assert entry == dr.DeviceEntry(
|
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")},
|
connections={("Zigbee", "23.45.67.89.01")},
|
||||||
id="bcdefghijklmn",
|
id="bcdefghijklmn",
|
||||||
identifiers={("serial", "3456ABCDEF12")},
|
identifiers={("serial", "3456ABCDEF12")},
|
||||||
manufacturer="manufacturer",
|
manufacturer="manufacturer",
|
||||||
model="model",
|
model="model",
|
||||||
|
primary_config_entry=mock_config_entry.entry_id,
|
||||||
)
|
)
|
||||||
assert entry.id == "bcdefghijklmn"
|
assert entry.id == "bcdefghijklmn"
|
||||||
assert isinstance(entry.config_entries, list)
|
assert isinstance(entry.config_entries, set)
|
||||||
assert isinstance(entry.connections, set)
|
assert isinstance(entry.connections, set)
|
||||||
assert isinstance(entry.identifiers, set)
|
assert isinstance(entry.identifiers, set)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("load_registries", [False])
|
@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: HomeAssistant,
|
||||||
hass_storage: dict[str, Any],
|
hass_storage: dict[str, Any],
|
||||||
mock_config_entry: MockConfigEntry,
|
mock_config_entry: MockConfigEntry,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test migration from version 1.1 to 1.5."""
|
"""Test migration from version 1.1 to 1.6."""
|
||||||
hass_storage[dr.STORAGE_KEY] = {
|
hass_storage[dr.STORAGE_KEY] = {
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"minor_version": 1,
|
"minor_version": 1,
|
||||||
|
@ -371,6 +375,7 @@ async def test_migration_1_1_to_1_5(
|
||||||
"model": "model",
|
"model": "model",
|
||||||
"name": "name",
|
"name": "name",
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
|
"primary_config_entry": mock_config_entry.entry_id,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": "new_version",
|
"sw_version": "new_version",
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -390,6 +395,7 @@ async def test_migration_1_1_to_1_5(
|
||||||
"model": None,
|
"model": None,
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
"name": None,
|
"name": None,
|
||||||
|
"primary_config_entry": None,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": None,
|
"sw_version": None,
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -409,12 +415,12 @@ async def test_migration_1_1_to_1_5(
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("load_registries", [False])
|
@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: HomeAssistant,
|
||||||
hass_storage: dict[str, Any],
|
hass_storage: dict[str, Any],
|
||||||
mock_config_entry: MockConfigEntry,
|
mock_config_entry: MockConfigEntry,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test migration from version 1.2 to 1.5."""
|
"""Test migration from version 1.2 to 1.6."""
|
||||||
hass_storage[dr.STORAGE_KEY] = {
|
hass_storage[dr.STORAGE_KEY] = {
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"minor_version": 2,
|
"minor_version": 2,
|
||||||
|
@ -502,6 +508,7 @@ async def test_migration_1_2_to_1_5(
|
||||||
"model": "model",
|
"model": "model",
|
||||||
"name": "name",
|
"name": "name",
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
|
"primary_config_entry": mock_config_entry.entry_id,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": "new_version",
|
"sw_version": "new_version",
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -521,6 +528,7 @@ async def test_migration_1_2_to_1_5(
|
||||||
"model": None,
|
"model": None,
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
"name": None,
|
"name": None,
|
||||||
|
"primary_config_entry": None,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": None,
|
"sw_version": None,
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -532,12 +540,12 @@ async def test_migration_1_2_to_1_5(
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("load_registries", [False])
|
@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: HomeAssistant,
|
||||||
hass_storage: dict[str, Any],
|
hass_storage: dict[str, Any],
|
||||||
mock_config_entry: MockConfigEntry,
|
mock_config_entry: MockConfigEntry,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test migration from version 1.3 to 1.5."""
|
"""Test migration from version 1.3 to 1.6."""
|
||||||
hass_storage[dr.STORAGE_KEY] = {
|
hass_storage[dr.STORAGE_KEY] = {
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"minor_version": 3,
|
"minor_version": 3,
|
||||||
|
@ -627,6 +635,7 @@ async def test_migration_1_3_to_1_5(
|
||||||
"model": "model",
|
"model": "model",
|
||||||
"name": "name",
|
"name": "name",
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
|
"primary_config_entry": mock_config_entry.entry_id,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": "new_version",
|
"sw_version": "new_version",
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -644,8 +653,9 @@ async def test_migration_1_3_to_1_5(
|
||||||
"labels": [],
|
"labels": [],
|
||||||
"manufacturer": None,
|
"manufacturer": None,
|
||||||
"model": None,
|
"model": None,
|
||||||
"name_by_user": None,
|
|
||||||
"name": None,
|
"name": None,
|
||||||
|
"name_by_user": None,
|
||||||
|
"primary_config_entry": None,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": None,
|
"sw_version": None,
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -657,12 +667,12 @@ async def test_migration_1_3_to_1_5(
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("load_registries", [False])
|
@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: HomeAssistant,
|
||||||
hass_storage: dict[str, Any],
|
hass_storage: dict[str, Any],
|
||||||
mock_config_entry: MockConfigEntry,
|
mock_config_entry: MockConfigEntry,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test migration from version 1.4 to 1.5."""
|
"""Test migration from version 1.4 to 1.6."""
|
||||||
hass_storage[dr.STORAGE_KEY] = {
|
hass_storage[dr.STORAGE_KEY] = {
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"minor_version": 4,
|
"minor_version": 4,
|
||||||
|
@ -754,6 +764,7 @@ async def test_migration_1_4_to_1_5(
|
||||||
"model": "model",
|
"model": "model",
|
||||||
"name": "name",
|
"name": "name",
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
|
"primary_config_entry": mock_config_entry.entry_id,
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": "new_version",
|
"sw_version": "new_version",
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -773,6 +784,138 @@ async def test_migration_1_4_to_1_5(
|
||||||
"model": None,
|
"model": None,
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
"name": 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,
|
"serial_number": None,
|
||||||
"sw_version": None,
|
"sw_version": None,
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -818,7 +961,7 @@ async def test_removing_config_entries(
|
||||||
assert len(device_registry.devices) == 2
|
assert len(device_registry.devices) == 2
|
||||||
assert entry.id == entry2.id
|
assert entry.id == entry2.id
|
||||||
assert entry.id != entry3.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)
|
device_registry.async_clear_config_entry(config_entry_1.entry_id)
|
||||||
entry = device_registry.async_get_device(identifiers={("bridgeid", "0123")})
|
entry = device_registry.async_get_device(identifiers={("bridgeid", "0123")})
|
||||||
|
@ -826,7 +969,7 @@ async def test_removing_config_entries(
|
||||||
identifiers={("bridgeid", "4567")}
|
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
|
assert entry3_removed is None
|
||||||
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@ -839,7 +982,9 @@ async def test_removing_config_entries(
|
||||||
assert update_events[1].data == {
|
assert update_events[1].data == {
|
||||||
"action": "update",
|
"action": "update",
|
||||||
"device_id": entry.id,
|
"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 == {
|
assert update_events[2].data == {
|
||||||
"action": "create",
|
"action": "create",
|
||||||
|
@ -849,7 +994,8 @@ async def test_removing_config_entries(
|
||||||
"action": "update",
|
"action": "update",
|
||||||
"device_id": entry.id,
|
"device_id": entry.id,
|
||||||
"changes": {
|
"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 == {
|
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 len(device_registry.deleted_devices) == 0
|
||||||
assert entry.id == entry2.id
|
assert entry.id == entry2.id
|
||||||
assert entry.id != entry3.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(entry.id)
|
||||||
device_registry.async_remove_device(entry3.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 == {
|
assert update_events[1].data == {
|
||||||
"action": "update",
|
"action": "update",
|
||||||
"device_id": entry2.id,
|
"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 == {
|
assert update_events[2].data == {
|
||||||
"action": "create",
|
"action": "create",
|
||||||
|
@ -1290,7 +1438,7 @@ async def test_update(
|
||||||
assert updated_entry != entry
|
assert updated_entry != entry
|
||||||
assert updated_entry == dr.DeviceEntry(
|
assert updated_entry == dr.DeviceEntry(
|
||||||
area_id="12345A",
|
area_id="12345A",
|
||||||
config_entries=[mock_config_entry.entry_id],
|
config_entries={mock_config_entry.entry_id},
|
||||||
configuration_url="https://example.com/config",
|
configuration_url="https://example.com/config",
|
||||||
connections={("mac", "65:43:21:fe:dc:ba")},
|
connections={("mac", "65:43:21:fe:dc:ba")},
|
||||||
disabled_by=dr.DeviceEntryDisabler.USER,
|
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_1.add_to_hass(hass)
|
||||||
config_entry_2 = MockConfigEntry()
|
config_entry_2 = MockConfigEntry()
|
||||||
config_entry_2.add_to_hass(hass)
|
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(
|
entry = device_registry.async_get_or_create(
|
||||||
config_entry_id=config_entry_1.entry_id,
|
config_entry_id=config_entry_1.entry_id,
|
||||||
|
@ -1495,20 +1645,34 @@ async def test_update_remove_config_entries(
|
||||||
manufacturer="manufacturer",
|
manufacturer="manufacturer",
|
||||||
model="model",
|
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 len(device_registry.devices) == 2
|
||||||
assert entry.id == entry2.id
|
assert entry.id == entry2.id == entry4.id
|
||||||
assert entry.id != entry3.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
|
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(
|
removed_entry = device_registry.async_update_device(
|
||||||
entry3.id, remove_config_entry_id=config_entry_1.entry_id
|
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
|
assert removed_entry is None
|
||||||
|
|
||||||
removed_entry = device_registry.async_get_device(identifiers={("bridgeid", "4567")})
|
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()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert len(update_events) == 5
|
assert len(update_events) == 7
|
||||||
assert update_events[0].data == {
|
assert update_events[0].data == {
|
||||||
"action": "create",
|
"action": "create",
|
||||||
"device_id": entry.id,
|
"device_id": entry.id,
|
||||||
|
@ -1525,7 +1689,9 @@ async def test_update_remove_config_entries(
|
||||||
assert update_events[1].data == {
|
assert update_events[1].data == {
|
||||||
"action": "update",
|
"action": "update",
|
||||||
"device_id": entry2.id,
|
"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 == {
|
assert update_events[2].data == {
|
||||||
"action": "create",
|
"action": "create",
|
||||||
|
@ -1535,10 +1701,29 @@ async def test_update_remove_config_entries(
|
||||||
"action": "update",
|
"action": "update",
|
||||||
"device_id": entry.id,
|
"device_id": entry.id,
|
||||||
"changes": {
|
"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 == {
|
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",
|
"action": "remove",
|
||||||
"device_id": entry3.id,
|
"device_id": entry3.id,
|
||||||
}
|
}
|
||||||
|
@ -1768,7 +1953,7 @@ async def test_restore_device(
|
||||||
assert len(device_registry.devices) == 2
|
assert len(device_registry.devices) == 2
|
||||||
assert len(device_registry.deleted_devices) == 0
|
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.connections, set)
|
||||||
assert isinstance(entry3.identifiers, 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.devices) == 1
|
||||||
assert len(device_registry.deleted_devices) == 0
|
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.connections, set)
|
||||||
assert isinstance(entry2.identifiers, 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.devices) == 1
|
||||||
assert len(device_registry.deleted_devices) == 0
|
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.connections, set)
|
||||||
assert isinstance(entry3.identifiers, 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.devices) == 1
|
||||||
assert len(device_registry.deleted_devices) == 0
|
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.connections, set)
|
||||||
assert isinstance(entry4.identifiers, set)
|
assert isinstance(entry4.identifiers, set)
|
||||||
|
|
||||||
|
@ -1949,7 +2134,7 @@ async def test_restore_shared_device(
|
||||||
"action": "update",
|
"action": "update",
|
||||||
"device_id": entry.id,
|
"device_id": entry.id,
|
||||||
"changes": {
|
"changes": {
|
||||||
"config_entries": [config_entry_1.entry_id],
|
"config_entries": {config_entry_1.entry_id},
|
||||||
"identifiers": {("entry_123", "0123")},
|
"identifiers": {("entry_123", "0123")},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1973,7 +2158,7 @@ async def test_restore_shared_device(
|
||||||
"action": "update",
|
"action": "update",
|
||||||
"device_id": entry.id,
|
"device_id": entry.id,
|
||||||
"changes": {
|
"changes": {
|
||||||
"config_entries": [config_entry_2.entry_id],
|
"config_entries": {config_entry_2.entry_id},
|
||||||
"identifiers": {("entry_234", "2345")},
|
"identifiers": {("entry_234", "2345")},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -2291,6 +2476,7 @@ async def test_loading_invalid_configuration_url_from_storage(
|
||||||
"model": None,
|
"model": None,
|
||||||
"name_by_user": None,
|
"name_by_user": None,
|
||||||
"name": None,
|
"name": None,
|
||||||
|
"primary_config_entry": "1234",
|
||||||
"serial_number": None,
|
"serial_number": None,
|
||||||
"sw_version": None,
|
"sw_version": None,
|
||||||
"via_device_id": None,
|
"via_device_id": None,
|
||||||
|
@ -2794,3 +2980,75 @@ async def test_device_registry_identifiers_collision(
|
||||||
device3_refetched = device_registry.async_get(device3.id)
|
device3_refetched = device_registry.async_get(device3.id)
|
||||||
device1_refetched = device_registry.async_get(device1.id)
|
device1_refetched = device_registry.async_get(device1.id)
|
||||||
assert not device1_refetched.identifiers.isdisjoint(device3_refetched.identifiers)
|
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
|
||||||
|
|
|
@ -1187,6 +1187,7 @@ async def test_device_info_called(
|
||||||
assert device.manufacturer == "test-manuf"
|
assert device.manufacturer == "test-manuf"
|
||||||
assert device.model == "test-model"
|
assert device.model == "test-model"
|
||||||
assert device.name == "test-name"
|
assert device.name == "test-name"
|
||||||
|
assert device.primary_config_entry == config_entry.entry_id
|
||||||
assert device.suggested_area == "Heliport"
|
assert device.suggested_area == "Heliport"
|
||||||
assert device.sw_version == "test-sw"
|
assert device.sw_version == "test-sw"
|
||||||
assert device.hw_version == "test-hw"
|
assert device.hw_version == "test-hw"
|
||||||
|
|
|
@ -1106,10 +1106,10 @@ async def test_remove_config_entry_from_device_removes_entities(
|
||||||
config_entry_id=config_entry_2.entry_id,
|
config_entry_id=config_entry_2.entry_id,
|
||||||
connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")},
|
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_1.entry_id,
|
||||||
config_entry_2.entry_id,
|
config_entry_2.entry_id,
|
||||||
]
|
}
|
||||||
|
|
||||||
# Create one entity for each config entry
|
# Create one entity for each config entry
|
||||||
entry_1 = entity_registry.async_get_or_create(
|
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,
|
config_entry_id=config_entry_2.entry_id,
|
||||||
connections={(dr.CONNECTION_NETWORK_MAC, "12:34:56:AB:CD:EF")},
|
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_1.entry_id,
|
||||||
config_entry_2.entry_id,
|
config_entry_2.entry_id,
|
||||||
]
|
}
|
||||||
|
|
||||||
# Create one entity for each config entry
|
# Create one entity for each config entry
|
||||||
entry_1 = entity_registry.async_get_or_create(
|
entry_1 = entity_registry.async_get_or_create(
|
||||||
|
|
|
@ -159,6 +159,8 @@ class HomeAssistantSnapshotSerializer(AmberDataSerializer):
|
||||||
)
|
)
|
||||||
if serialized["via_device_id"] is not None:
|
if serialized["via_device_id"] is not None:
|
||||||
serialized["via_device_id"] = ANY
|
serialized["via_device_id"] = ANY
|
||||||
|
if serialized["primary_config_entry"] is not None:
|
||||||
|
serialized["primary_config_entry"] = ANY
|
||||||
return serialized
|
return serialized
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue