WiFi 网络诊断 Cluster(WiFiNetworkDiagnostics)
Cluster ID: 0x0036 |
所在 Endpoint: Endpoint 0(Root / Network Endpoint)
WiFiNetworkDiagnostics 提供设备 WiFi 连接的实时健康信息 —— 包括信号强度(RSSI)、当前接入点(BSSID)、安全类型、信道、WiFi 协议版本, 以及可选的数据包计数和错误统计。 它是排查设备「离线」「响应慢」「不稳定」等网络问题的第一站。
此 Cluster 定义了两个可选特性: PKTCNT(数据包计数)和 ERRCNT(错误计数)。 启用后分别提供收发包统计和过载/关联失败计数。 基础连接信息(BSSID、RSSI、信道等)不需要任何特性即可读取。
Feature 位图
通过 FeatureMap(0xFFFC)声明设备支持哪些诊断能力:
命令(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 |
-30 ~ -50 dBm:优秀,设备就在路由器旁边
-50 ~ -60 dBm:良好,日常使用无问题
-60 ~ -70 dBm:一般,可能偶有延迟
-70 ~ -80 dBm:较差,建议移近路由器或加信号扩展器
低于 -80 dBm:极差,设备可能频繁掉线
数据包计数(0x0005 ~ 0x000A)
详细的收发包统计信息,用于分析网络质量。
这组属性需要设备启用 PKTCNT(PacketCounts) 特性。
可通过 ResetCounts 命令将所有计数器归零。
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(安全类型)
WiFiVersionEnum(WiFi 版本)
AssociationFailureCauseEnum(关联失败原因)
ConnectionStatusEnum(连接状态)
事件(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 连接质量,在问题发生前预警。
- 订阅
RSSI (0x0004)属性变化,设置合理的上报间隔(如每 60 秒或变化超过 5 dBm) - 订阅
Disconnection和ConnectionStatus事件,实时感知断连 - 定期读取
BeaconLostCount和BeaconRxCount,计算 Beacon 丢失率 - 当 RSSI 低于 -75 dBm 或 Beacon 丢失率超过 5% 时,App 提示用户「设备信号较弱,建议移近路由器」
- 结合
ChannelNumber信息,建议用户是否需要切换路由器信道避开拥堵
场景 2:信号强度排查
用户反馈设备「响应慢」或「经常离线」,通过诊断数据定位问题。
- 读取
RSSI (0x0004),判断信号强度是否充足 - 读取
WiFiVersion (0x0002),确认设备使用的协议版本(如仍在用 802.11b/g 说明设备能力有限) - 读取
CurrentMaxRate (0x000B),确认协商速率是否正常 - 调用
ResetCounts (0x00)清零计数器,等待 5~10 分钟后读取各包计数 - 计算丢包率:如果
BeaconLostCount增长很快,问题在无线环境(距离/干扰);如果OverrunCount增长很快,问题在设备处理能力
场景 3:漫游分析(多 AP 环境)
在 Mesh 或多 AP 网络中,追踪设备在不同接入点之间的切换行为。
- 定期读取
BSSID (0x0000),记录设备连接的 AP MAC 地址变化 - 订阅
Disconnection和ConnectionStatus事件,捕捉每次漫游 - 每次 BSSID 变化时,同步读取
RSSI和ChannelNumber,记录新 AP 的信号质量 - 分析漫游频率:频繁漫游(如每分钟切换)说明设备处于两个 AP 信号交界处,信号都不强
- 如果
AssociationFailure事件伴随漫游出现,说明切换过程不顺利,可能需要调整 AP 配置