Skip to content

Commit

Permalink
Add serial_number to device registry entries (#102334)
Browse files Browse the repository at this point in the history
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
  • Loading branch information
emontnemery and joostlek committed Oct 22, 2023
1 parent b3bd34a commit 1621310
Show file tree
Hide file tree
Showing 34 changed files with 444 additions and 22 deletions.
17 changes: 16 additions & 1 deletion homeassistant/helpers/device_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
EVENT_DEVICE_REGISTRY_UPDATED = "device_registry_updated"
STORAGE_KEY = "core.device_registry"
STORAGE_VERSION_MAJOR = 1
STORAGE_VERSION_MINOR = 3
STORAGE_VERSION_MINOR = 4
SAVE_DELAY = 10
CLEANUP_DELAY = 10

Expand Down Expand Up @@ -79,6 +79,7 @@ class DeviceInfo(TypedDict, total=False):
manufacturer: str | None
model: str | None
name: str | None
serial_number: str | None
suggested_area: str | None
sw_version: str | None
hw_version: str | None
Expand All @@ -102,6 +103,7 @@ class DeviceInfo(TypedDict, total=False):
"manufacturer",
"model",
"name",
"serial_number",
"suggested_area",
"sw_version",
"via_device",
Expand Down Expand Up @@ -229,6 +231,7 @@ class DeviceEntry:
model: str | None = attr.ib(default=None)
name_by_user: str | None = attr.ib(default=None)
name: str | None = attr.ib(default=None)
serial_number: str | None = attr.ib(default=None)
suggested_area: str | None = attr.ib(default=None)
sw_version: str | None = attr.ib(default=None)
via_device_id: str | None = attr.ib(default=None)
Expand Down Expand Up @@ -257,6 +260,7 @@ def dict_repr(self) -> dict[str, Any]:
"model": self.model,
"name_by_user": self.name_by_user,
"name": self.name,
"serial_number": self.serial_number,
"sw_version": self.sw_version,
"via_device_id": self.via_device_id,
}
Expand Down Expand Up @@ -359,6 +363,10 @@ async def _async_migrate_func(
# Version 1.3 adds hw_version
for device in old_data["devices"]:
device["hw_version"] = None
if old_minor_version < 4:
# Introduced in 2023.11
for device in old_data["devices"]:
device["serial_number"] = None

if old_major_version > 1:
raise NotImplementedError
Expand Down Expand Up @@ -490,6 +498,7 @@ def async_get_or_create(
manufacturer: str | None | UndefinedType = UNDEFINED,
model: str | None | UndefinedType = UNDEFINED,
name: str | None | UndefinedType = UNDEFINED,
serial_number: str | None | UndefinedType = UNDEFINED,
suggested_area: str | None | UndefinedType = UNDEFINED,
sw_version: str | None | UndefinedType = UNDEFINED,
via_device: tuple[str, str] | None | UndefinedType = UNDEFINED,
Expand All @@ -514,6 +523,7 @@ def async_get_or_create(
("manufacturer", manufacturer),
("model", model),
("name", name),
("serial_number", serial_number),
("suggested_area", suggested_area),
("sw_version", sw_version),
("via_device", via_device),
Expand Down Expand Up @@ -591,6 +601,7 @@ def async_get_or_create(
merge_identifiers=identifiers or UNDEFINED,
model=model,
name=name,
serial_number=serial_number,
suggested_area=suggested_area,
sw_version=sw_version,
via_device_id=via_device_id,
Expand Down Expand Up @@ -620,6 +631,7 @@ def async_update_device(
name: str | None | UndefinedType = UNDEFINED,
new_identifiers: set[tuple[str, str]] | UndefinedType = UNDEFINED,
remove_config_entry_id: str | UndefinedType = UNDEFINED,
serial_number: str | None | UndefinedType = UNDEFINED,
suggested_area: str | None | UndefinedType = UNDEFINED,
sw_version: str | None | UndefinedType = UNDEFINED,
via_device_id: str | None | UndefinedType = UNDEFINED,
Expand Down Expand Up @@ -709,6 +721,7 @@ def async_update_device(
("model", model),
("name", name),
("name_by_user", name_by_user),
("serial_number", serial_number),
("suggested_area", suggested_area),
("sw_version", sw_version),
("via_device_id", via_device_id),
Expand Down Expand Up @@ -802,6 +815,7 @@ async def async_load(self) -> None:
model=device["model"],
name_by_user=device["name_by_user"],
name=device["name"],
serial_number=device["serial_number"],
sw_version=device["sw_version"],
via_device_id=device["via_device_id"],
)
Expand Down Expand Up @@ -851,6 +865,7 @@ def _data_to_save(self) -> dict[str, list[dict[str, Any]]]:
"model": entry.model,
"name_by_user": entry.name_by_user,
"name": entry.name,
"serial_number": entry.serial_number,
"sw_version": entry.sw_version,
"via_device_id": entry.via_device_id,
}
Expand Down
3 changes: 3 additions & 0 deletions tests/components/config/test_device_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ async def test_list_devices(
"model": "model",
"name_by_user": None,
"name": None,
"serial_number": None,
"sw_version": None,
"via_device_id": None,
},
Expand All @@ -79,6 +80,7 @@ async def test_list_devices(
"model": "model",
"name_by_user": None,
"name": None,
"serial_number": None,
"sw_version": None,
"via_device_id": dev1,
},
Expand Down Expand Up @@ -108,6 +110,7 @@ class Unserializable:
"model": "model",
"name_by_user": None,
"name": None,
"serial_number": None,
"sw_version": None,
"via_device_id": None,
}
Expand Down
2 changes: 2 additions & 0 deletions tests/components/elgato/snapshots/test_button.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down Expand Up @@ -144,6 +145,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down
3 changes: 3 additions & 0 deletions tests/components/elgato/snapshots/test_light.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
'model': 'Elgato Key Light',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.3 (192)',
'via_device_id': None,
Expand Down Expand Up @@ -210,6 +211,7 @@
'model': 'Elgato Key Light',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.3 (192)',
'via_device_id': None,
Expand Down Expand Up @@ -319,6 +321,7 @@
'model': 'Elgato Key Light',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.3 (192)',
'via_device_id': None,
Expand Down
5 changes: 5 additions & 0 deletions tests/components/elgato/snapshots/test_sensor.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down Expand Up @@ -161,6 +162,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down Expand Up @@ -246,6 +248,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down Expand Up @@ -328,6 +331,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down Expand Up @@ -413,6 +417,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down
2 changes: 2 additions & 0 deletions tests/components/elgato/snapshots/test_switch.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down Expand Up @@ -144,6 +145,7 @@
'model': 'Elgato Key Light Mini',
'name': 'Frenck',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.0.4 (229)',
'via_device_id': None,
Expand Down
6 changes: 6 additions & 0 deletions tests/components/energyzero/snapshots/test_sensor.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,7 @@
'model': None,
'name': 'Energy market price',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
Expand Down Expand Up @@ -584,6 +585,7 @@
'model': None,
'name': 'Energy market price',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
Expand Down Expand Up @@ -649,6 +651,7 @@
'model': None,
'name': 'Energy market price',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
Expand Down Expand Up @@ -715,6 +718,7 @@
'model': None,
'name': 'Energy market price',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
Expand Down Expand Up @@ -780,6 +784,7 @@
'model': None,
'name': 'Energy market price',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
Expand Down Expand Up @@ -848,6 +853,7 @@
'model': None,
'name': 'Gas market price',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': None,
'via_device_id': None,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
'model': 'Mock Model',
'name': 'Mock Title',
'name_by_user': None,
'serial_number': None,
'suggested_area': None,
'sw_version': '1.2.3',
'via_device_id': None,
Expand Down

0 comments on commit 1621310

Please sign in to comment.