Skip to content

Commit 9ba17c6

Browse files
authored
Fix getting the wifi ssid as networkname (#521)
1 parent dd6f7b1 commit 9ba17c6

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

matter_server/client/client.py

+18-6
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,10 @@ async def node_diagnostics(self, node_id: int) -> NodeDiagnostics:
304304
thread_cluster: Clusters.ThreadNetworkDiagnostics = node.get_cluster(
305305
0, Clusters.ThreadNetworkDiagnostics
306306
)
307-
network_name = thread_cluster.networkName
307+
if isinstance(thread_cluster.networkName, bytes):
308+
network_name = thread_cluster.networkName.decode("utf-8")
309+
else:
310+
network_name = thread_cluster.networkName
308311
# parse routing role to (diagnostics) node type
309312
if (
310313
thread_cluster.routingRole
@@ -322,12 +325,21 @@ async def node_diagnostics(self, node_id: int) -> NodeDiagnostics:
322325
):
323326
node_type = NodeType.END_DEVICE
324327
elif network_type == NetworkType.WIFI:
325-
wifi_cluster: Clusters.WiFiNetworkDiagnostics = node.get_cluster(
326-
0, Clusters.WiFiNetworkDiagnostics
327-
)
328-
if wifi_cluster and wifi_cluster.bssid:
329-
network_name = wifi_cluster.bssid
330328
node_type = NodeType.END_DEVICE
329+
# use lastNetworkID from NetworkCommissioning cluster as fallback to get the network name
330+
# this allows getting the SSID as the wifi diagnostics cluster only has the BSSID
331+
last_network_id: bytes | str | None
332+
if not network_name and (
333+
last_network_id := node.get_attribute_value(
334+
0,
335+
cluster=None,
336+
attribute=Clusters.NetworkCommissioning.Attributes.LastNetworkID,
337+
)
338+
):
339+
if isinstance(last_network_id, bytes):
340+
network_name = last_network_id.decode("utf-8")
341+
else:
342+
network_name = last_network_id
331343
# override node type if node is a bridge
332344
if node.node_data.is_bridge:
333345
node_type = NodeType.BRIDGE

0 commit comments

Comments
 (0)