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")