WiFi 网络诊断 Cluster(WiFiNetworkDiagnostics)

Cluster ID: 0x0036  |  所在 Endpoint: Endpoint 0(Root / Network Endpoint)

WiFiNetworkDiagnostics 提供设备 WiFi 连接的实时健康信息 —— 包括信号强度(RSSI)、当前接入点(BSSID)、安全类型、信道、WiFi 协议版本, 以及可选的数据包计数和错误统计。 它是排查设备「离线」「响应慢」「不稳定」等网络问题的第一站。

Feature 依赖

此 Cluster 定义了两个可选特性: PKTCNT(数据包计数)和 ERRCNT(错误计数)。 启用后分别提供收发包统计和过载/关联失败计数。 基础连接信息(BSSID、RSSI、信道等)不需要任何特性即可读取。

Feature 位图

通过 FeatureMap(0xFFFC)声明设备支持哪些诊断能力:

Bit 0
PKTCNT(PacketCounts) 数据包计数 —— 启用后提供 Beacon、组播、单播的收发包统计
Bit 1
ERRCNT(ErrorCounts) 错误计数 —— 启用后提供 OverrunCount(缓冲区溢出)计数

命令(Commands)

WiFiNetworkDiagnostics Cluster 仅有 1 个命令,用于重置统计计数器。 此命令需要设备启用 PKTCNT 或 ERRCNT 特性才有意义。

ID 名称 说明 所需特性
0x00 ResetCounts 重置数据包和错误计数器 PKTCNT | ERRCNT

ResetCounts —— 重置计数器(0x00)

将设备维护的数据包计数器和错误计数器全部归零。 不需要任何参数。执行后,BeaconLostCount、BeaconRxCount、 各类收发包计数、OverrunCount 等统计值都会重置为 0。

使用场景

排查网络问题时,先调用 ResetCounts 清零所有计数器, 然后观察一段时间内各计数器的增长情况,判断丢包率和错误频率。 也可在设备移至新位置后重置,开始新一轮的网络质量基线测量。

属性详解

WiFiNetworkDiagnostics Cluster 共有 14 个应用属性,按功能分为三组。 点击属性 ID 可跳转到对应的详细说明。

ID 名称 类型 分组 说明
0x0000 BSSID octstr / null 连接信息 当前关联 AP 的 MAC 地址
0x0001 SecurityType enum / null 连接信息 WiFi 安全认证类型
0x0002 WiFiVersion enum / null 连接信息 当前使用的 802.11 协议版本
0x0003 ChannelNumber uint16 / null 连接信息 当前使用的 WiFi 信道号
0x0004 RSSI int8 / null 连接信息 接收信号强度(dBm)
0x0005 BeaconLostCount uint32 / null 数据包计数 丢失的 Beacon 帧数
0x0006 BeaconRxCount uint32 / null 数据包计数 成功接收的 Beacon 帧数
0x0007 PacketMulticastRxCount uint32 / null 数据包计数 接收的组播包数
0x0008 PacketMulticastTxCount uint32 / null 数据包计数 发送的组播包数
0x0009 PacketUnicastRxCount uint32 / null 数据包计数 接收的单播包数
0x000A PacketUnicastTxCount uint32 / null 数据包计数 发送的单播包数
0x000B CurrentMaxRate uint64 / null 错误与速率 当前最大传输速率(bps)
0x000C OverrunCount uint64 / null 错误与速率 缓冲区溢出次数

连接信息(0x0000 ~ 0x0004)

描述设备当前 WiFi 连接的基本信息。这些属性是基础属性,不需要任何 Feature。 当设备未连接 WiFi 时,所有 Nullable 属性返回 null。

ID 名称 类型 说明
0x0000 BSSID octstr / null 当前关联的接入点(AP)的 MAC 地址,6 字节。未连接时为 null。可用于判断设备连的是哪个 AP(在多 AP 环境下尤其有用)
0x0001 SecurityType(安全类型) SecurityTypeEnum / null 当前 WiFi 连接使用的安全认证方式。未连接时为 null。见下方 SecurityTypeEnum
0x0002 WiFiVersion(WiFi 版本) WiFiVersionEnum / null 当前连接使用的 802.11 协议版本。未连接时为 null。见下方 WiFiVersionEnum
0x0003 ChannelNumber(信道号) uint16 / null 当前使用的 WiFi 信道号。2.4 GHz 通常为 1~13,5 GHz 为 36~165。未连接时为 null
0x0004 RSSI(信号强度) int8 / null 接收信号强度指示,单位 dBm,取值范围 -120 ~ 0。数值越大(越接近 0)信号越强。未连接时为 null
RSSI 信号强度参考

-30 ~ -50 dBm:优秀,设备就在路由器旁边
-50 ~ -60 dBm:良好,日常使用无问题
-60 ~ -70 dBm:一般,可能偶有延迟
-70 ~ -80 dBm:较差,建议移近路由器或加信号扩展器
低于 -80 dBm:极差,设备可能频繁掉线

数据包计数(0x0005 ~ 0x000A)

详细的收发包统计信息,用于分析网络质量。 这组属性需要设备启用 PKTCNT(PacketCounts) 特性。 可通过 ResetCounts 命令将所有计数器归零。

Beacon 丢包比

BeaconLostCount / (BeaconLostCount + BeaconRxCount) 是衡量 WiFi 稳定性的关键指标。 正常情况下 Beacon 丢失率应低于 1%,超过 5% 说明信号很不稳定,需要检查设备与路由器之间的距离和遮挡。

ID 名称 类型 说明
0x0005 BeaconLostCount uint32 / null 自上次重置以来,设备期望但未收到的 Beacon 帧数量。数值持续增长说明信号不稳定。需要 PKTCNT
0x0006 BeaconRxCount uint32 / null 自上次重置以来,成功接收到的 Beacon 帧数量。需要 PKTCNT
0x0007 PacketMulticastRxCount uint32 / null 接收的组播数据包数量。需要 PKTCNT
0x0008 PacketMulticastTxCount uint32 / null 发送的组播数据包数量。需要 PKTCNT
0x0009 PacketUnicastRxCount uint32 / null 接收的单播数据包数量。单播是设备与路由器之间的一对一通信,是主要流量。需要 PKTCNT
0x000A PacketUnicastTxCount uint32 / null 发送的单播数据包数量。需要 PKTCNT

错误与速率(0x000B ~ 0x000C)

当前连接的最大传输速率和缓冲区溢出统计。注意:关联失败原因不是属性,而是随 AssociationFailure 事件(0x01)上报。

ID 名称 类型 说明
0x000B CurrentMaxRate uint64 / null 当前连接协商的最大传输速率,单位 bps(比特/秒)。例如 866700000 = 866.7 Mbps(802.11ac 的典型速率)。未连接时为 null
0x000C OverrunCount uint64 / null 接收端因缓冲区满而丢弃的数据包数量。持续增长说明设备处理能力跟不上网络流量。需要 ERRCNT

枚举速查

SecurityTypeEnum(安全类型)

0
Unspecified 未指定
1
None 无加密(开放网络)
2
WEP WEP 加密(已淘汰,极不安全)
3
WPA WPA-Personal
4
WPA2 WPA2-Personal(最常见)
5
WPA3 WPA3-Personal(最新标准)

WiFiVersionEnum(WiFi 版本)

0
a 802.11a(5 GHz,54 Mbps)
1
b 802.11b(2.4 GHz,11 Mbps)
2
g 802.11g(2.4 GHz,54 Mbps)
3
n 802.11n / WiFi 4(双频,600 Mbps)
4
ac 802.11ac / WiFi 5(5 GHz,6.9 Gbps)
5
ax 802.11ax / WiFi 6(双频,9.6 Gbps)
6
ah 802.11ah / WiFi HaLow(Sub-1GHz,IoT 专用)

AssociationFailureCauseEnum(关联失败原因)

0
Unknown 原因未知
1
AssociationFailed 关联失败 —— AP 拒绝了设备的关联请求
2
AuthenticationFailed 认证失败 —— 通常是密码错误
3
SsidNotFound 找不到 SSID —— 目标网络不在范围内或已关闭

ConnectionStatusEnum(连接状态)

0
Connected 已连接
1
NotConnected 未连接

事件(Events)

WiFiNetworkDiagnostics 定义了 3 个事件,覆盖断连、关联失败、连接状态变化三种情况。 订阅这些事件是实时监控设备网络健康的推荐方式。

ID 名称 优先级 说明
0x00 Disconnection Info 设备与 AP 断开连接时触发
0x01 AssociationFailure Info WiFi 关联或认证失败时触发
0x02 ConnectionStatus Info 连接状态发生变化时触发

Disconnection —— 断连事件(0x00)

设备与当前接入点断开连接时触发。事件数据中携带 802.11 标准的断连原因码(ReasonCode), 可用于诊断断连的具体原因。

字段ID类型说明
ReasonCode 0x00 uint16 802.11 断连原因码。常见值:1 = Unspecified,4 = Disassociated due to inactivity,8 = Deauthenticated because sending station is leaving

AssociationFailure —— 关联失败事件(0x01)

设备尝试连接 WiFi 但关联或认证失败时触发。 携带失败原因和 802.11 状态码,是排查「设备连不上 WiFi」问题的关键信息来源。

字段ID类型说明
AssociationFailureCause 0x00 AssociationFailureCauseEnum 失败原因分类,见上方 枚举
Status 0x01 uint16 802.11 关联/认证状态码,提供更细粒度的失败信息

ConnectionStatus —— 连接状态变更事件(0x02)

设备的 WiFi 连接状态发生变化时触发(连接成功或断开)。 相比 Disconnection 事件,这个事件同时覆盖了「连上」和「断开」两个方向。

字段ID类型说明
ConnectionStatus 0x00 ConnectionStatusEnum 新的连接状态。见上方 ConnectionStatusEnum

示例数据

一个已连接 WiFi 的 Matter 设备(支持 PKTCNT + ERRCNT)读取 WiFiNetworkDiagnostics Cluster 的完整结果:

{
  // --- 连接信息 ---
  "0x0000": "A4:CF:12:XX:XX:XX",  // BSSID(当前关联的 AP MAC 地址)
  "0x0001": 4,                     // SecurityType = WPA2
  "0x0002": 4,                     // WiFiVersion = ac (802.11ac)
  "0x0003": 6,                     // ChannelNumber = 6
  "0x0004": -45,                   // RSSI = -45 dBm(信号良好)

  // --- 数据包计数(需要 PKTCNT 特性)---
  "0x0005": 12,                    // BeaconLostCount = 12
  "0x0006": 98432,                 // BeaconRxCount = 98432
  "0x0007": 1024,                  // PacketMulticastRxCount
  "0x0008": 256,                   // PacketMulticastTxCount
  "0x0009": 502310,                // PacketUnicastRxCount
  "0x000A": 389120,                // PacketUnicastTxCount

  // --- 速率 ---
  "0x000B": 866700000,             // CurrentMaxRate = 866.7 Mbps

  // --- 错误计数(需要 ERRCNT 特性)---
  "0x000C": 0                      // OverrunCount = 0
}
开发提示

并非所有设备都支持 PKTCNT 和 ERRCNT 特性。读取前先检查 FeatureMap (0xFFFC)。 对于仅需判断「设备 WiFi 是否正常」的简单场景, 只读 RSSI (0x0004) 和 SecurityType (0x0001) 就够了。

常见场景

场景 1:WiFi 健康监控

持续监控设备的 WiFi 连接质量,在问题发生前预警。

  1. 订阅 RSSI (0x0004) 属性变化,设置合理的上报间隔(如每 60 秒或变化超过 5 dBm)
  2. 订阅 Disconnection 和 ConnectionStatus 事件,实时感知断连
  3. 定期读取 BeaconLostCount 和 BeaconRxCount,计算 Beacon 丢失率
  4. 当 RSSI 低于 -75 dBm 或 Beacon 丢失率超过 5% 时,App 提示用户「设备信号较弱,建议移近路由器」
  5. 结合 ChannelNumber 信息,建议用户是否需要切换路由器信道避开拥堵
场景 2:信号强度排查

用户反馈设备「响应慢」或「经常离线」,通过诊断数据定位问题。

  1. 读取 RSSI (0x0004),判断信号强度是否充足
  2. 读取 WiFiVersion (0x0002),确认设备使用的协议版本(如仍在用 802.11b/g 说明设备能力有限)
  3. 读取 CurrentMaxRate (0x000B),确认协商速率是否正常
  4. 调用 ResetCounts (0x00) 清零计数器,等待 5~10 分钟后读取各包计数
  5. 计算丢包率:如果 BeaconLostCount 增长很快,问题在无线环境(距离/干扰);如果 OverrunCount 增长很快,问题在设备处理能力
场景 3:漫游分析(多 AP 环境)

在 Mesh 或多 AP 网络中,追踪设备在不同接入点之间的切换行为。

  1. 定期读取 BSSID (0x0000),记录设备连接的 AP MAC 地址变化
  2. 订阅 Disconnection 和 ConnectionStatus 事件,捕捉每次漫游
  3. 每次 BSSID 变化时,同步读取 RSSI 和 ChannelNumber,记录新 AP 的信号质量
  4. 分析漫游频率:频繁漫游(如每分钟切换)说明设备处于两个 AP 信号交界处,信号都不强
  5. 如果 AssociationFailure 事件伴随漫游出现,说明切换过程不顺利,可能需要调整 AP 配置