4
4
5
5
from typing import TYPE_CHECKING , cast
6
6
7
+ from chip .clusters .Objects import GeneralDiagnostics
7
8
from matter_server .client .models .device_types import BridgedDevice
9
+ from matter_server .common .helpers .util import convert_mac_address
8
10
from matter_server .common .models import EventType , ServerInfoMessage
9
11
10
12
from homeassistant .config_entries import ConfigEntry
22
24
from matter_server .client .models .node import MatterEndpoint , MatterNode
23
25
24
26
27
+ def get_connections_for_endpoint (endpoint : MatterEndpoint ) -> set [tuple [str , str ]]:
28
+ """Return a set of connections for a MatterEndpoint."""
29
+ network_interfaces : list [GeneralDiagnostics .Structs .NetworkInterface ] = (
30
+ endpoint .get_attribute_value (
31
+ None , GeneralDiagnostics .Attributes .NetworkInterfaces
32
+ )
33
+ or []
34
+ )
35
+
36
+ hardware_addresses : set [str ] = {
37
+ convert_mac_address (network_interface .hardwareAddress )
38
+ for network_interface in network_interfaces
39
+ if network_interface .hardwareAddress
40
+ }
41
+
42
+ return {
43
+ (dr .CONNECTION_NETWORK_MAC , address )
44
+ if len (address ) == 17
45
+ else (dr .CONNECTION_ZIGBEE , address )
46
+ for address in hardware_addresses
47
+ if len (address ) in (17 , 23 ) # EUI-48 -> 17, EUI-64 -> 23
48
+ }
49
+
50
+
25
51
def get_clean_name (name : str | None ) -> str | None :
26
52
"""Strip spaces and null char from the name."""
27
53
if name is None :
@@ -185,6 +211,9 @@ def _create_device_registry(
185
211
endpoint ,
186
212
)
187
213
identifiers = {(DOMAIN , f"{ ID_TYPE_DEVICE_ID } _{ node_device_id } " )}
214
+
215
+ connections = get_connections_for_endpoint (endpoint )
216
+
188
217
serial_number : str | None = None
189
218
# if available, we also add the serialnumber as identifier
190
219
if (
@@ -203,6 +232,7 @@ def _create_device_registry(
203
232
name = name ,
204
233
config_entry_id = self .config_entry .entry_id ,
205
234
identifiers = identifiers ,
235
+ connections = connections ,
206
236
hw_version = basic_info .hardwareVersionString ,
207
237
sw_version = basic_info .softwareVersionString ,
208
238
manufacturer = basic_info .vendorName or endpoint .node .device_info .vendorName ,
0 commit comments