Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add serial_number to device registry entries #102334

Merged
merged 5 commits into from
Oct 22, 2023
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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