From c5f69259480996f03518f77ffe69d9b2485a369b Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Wed, 20 Mar 2024 15:31:48 +0100 Subject: [PATCH] Add matter device serial number (#113878) --- homeassistant/components/matter/adapter.py | 9 +++++++-- tests/components/matter/test_adapter.py | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/matter/adapter.py b/homeassistant/components/matter/adapter.py index e6185de17a6..a3536435ded 100644 --- a/homeassistant/components/matter/adapter.py +++ b/homeassistant/components/matter/adapter.py @@ -185,10 +185,14 @@ class MatterAdapter: endpoint, ) identifiers = {(DOMAIN, f"{ID_TYPE_DEVICE_ID}_{node_device_id}")} + serial_number: str | None = None # if available, we also add the serialnumber as identifier - if basic_info.serialNumber and "test" not in basic_info.serialNumber.lower(): + if ( + basic_info_serial_number := basic_info.serialNumber + ) and "test" not in basic_info_serial_number.lower(): # prefix identifier with 'serial_' to be able to filter it - identifiers.add((DOMAIN, f"{ID_TYPE_SERIAL}_{basic_info.serialNumber}")) + identifiers.add((DOMAIN, f"{ID_TYPE_SERIAL}_{basic_info_serial_number}")) + serial_number = basic_info_serial_number model = ( get_clean_name(basic_info.productName) or device_type.__name__ @@ -203,6 +207,7 @@ class MatterAdapter: sw_version=basic_info.softwareVersionString, manufacturer=basic_info.vendorName or endpoint.node.device_info.vendorName, model=model, + serial_number=serial_number, via_device=(DOMAIN, bridge_device_id) if bridge_device_id else None, ) diff --git a/tests/components/matter/test_adapter.py b/tests/components/matter/test_adapter.py index 603e984779e..5f6c48dfcc6 100644 --- a/tests/components/matter/test_adapter.py +++ b/tests/components/matter/test_adapter.py @@ -56,6 +56,7 @@ async def test_device_registry_single_node_device( assert entry.model == "Mock Light" assert entry.hw_version == "v1.0" assert entry.sw_version == "v1.0" + assert entry.serial_number == "12345678" # This tests needs to be adjusted to remove lingering tasks @@ -84,6 +85,7 @@ async def test_device_registry_single_node_device_alt( # test serial id NOT present as additional identifier assert (DOMAIN, "serial_TEST_SN") not in entry.identifiers + assert entry.serial_number is None @pytest.mark.skip("Waiting for a new test fixture")