以太网诊断 Cluster(EthernetNetworkDiagnostics)
Cluster ID: 0x0037 |
所在 Endpoint: Endpoint 0(Root Node)
EthernetNetworkDiagnostics 提供以太网接口的运行状态和统计信息 —— 链路速率、双工模式、收发包计数、错误计数等。 这个 Cluster 只有 1 个命令和 9 个属性,结构简单,主要用于网络健康监控和故障排查。
Hub 或桥接器通过以太网连接,想确认链路是否正常?读取 PHYRate 和 CarrierDetect 即可判断。 设备网络不稳定、丢包严重?检查 TxErrCount 和 CollisionCount 定位问题。 需要重新开始统计?发一个 ResetCounts 命令清零所有计数器。
Feature 位图
EthernetNetworkDiagnostics 通过 FeatureMap(0xFFFC)声明设备支持哪些诊断能力:
并非所有设备都支持全部属性。PacketRxCount / PacketTxCount 需要 PKTCNT 特性,
TxErrCount / CollisionCount / OverrunCount 需要 ERRCNT 特性。
读取前先检查 FeatureMap (0xFFFC) 确认设备支持哪些特性。
属性总览
点击属性 ID 可跳转到详细说明。带 Feature 标记的属性仅在设备支持对应特性时才存在。
| ID | 名称 | 类型 | Feature | 说明 |
|---|---|---|---|---|
0x00 |
PHYRate | enum8, nullable | — | 物理层链路速率 |
0x01 |
FullDuplex | bool, nullable | — | 是否全双工模式 |
0x02 |
PacketRxCount | uint64 | PKTCNT | 已接收的数据包总数 |
0x03 |
PacketTxCount | uint64 | PKTCNT | 已发送的数据包总数 |
0x04 |
TxErrCount | uint64 | ERRCNT | 发送错误次数 |
0x05 |
CollisionCount | uint64 | ERRCNT | 碰撞次数 |
0x06 |
OverrunCount | uint64 | ERRCNT | 缓冲区溢出次数 |
0x07 |
CarrierDetect | bool, nullable | — | 载波检测状态 |
0x08 |
TimeSinceReset | uint64 | — | 距上次计数器重置的秒数 |
PHYRate(物理层速率)
只读属性,表示当前以太网接口协商到的物理层链路速率。值为 null 时表示速率未知或接口未连接。
PHYRateEnum 枚举值
FullDuplex(全双工模式)
只读属性,表示当前以太网链路是否工作在全双工模式。true 为全双工,false 为半双工,
null 表示无法确定。现代以太网设备几乎都是全双工,半双工通常意味着协商异常。
PacketRxCount(接收包计数)
只读属性,自上次重置以来接收到的数据包总数。需要设备支持 PKTCNT 特性。 该计数器在调用 ResetCounts 命令或设备重启后归零。
PacketTxCount(发送包计数)
只读属性,自上次重置以来发送的数据包总数。需要设备支持 PKTCNT 特性。
TxErrCount(发送错误计数)
只读属性,自上次重置以来发送失败的次数。需要设备支持 ERRCNT 特性。 持续增长通常说明线缆质量差或交换机端口有问题。
CollisionCount(碰撞计数)
只读属性,自上次重置以来的碰撞次数。需要设备支持 ERRCNT 特性。 在全双工链路上此值应始终为 0;如果持续增长,说明链路可能降级到了半双工。
OverrunCount(溢出计数)
只读属性,自上次重置以来接收缓冲区溢出的次数。需要设备支持 ERRCNT 特性。 溢出意味着设备来不及处理收到的数据,可能是设备负载过高或网络流量过大。
CarrierDetect(载波检测)
只读属性,表示以太网接口是否检测到载波信号。true 表示网线已连接且对端设备正常,
false 表示网线断开或对端无响应,null 表示无法确定。
这是判断物理连接状态最直接的指标。
TimeSinceReset(计数器重置后经过时间)
只读属性,自上次计数器重置(ResetCounts 命令或设备重启)以来经过的秒数。 结合包计数和错误计数,可以计算出平均每秒的收发速率和错误率。
命令(Commands)
EthernetNetworkDiagnostics 只有一个命令。需要设备支持 PKTCNT 或 ERRCNT 特性才有实际意义。
| ID | 名称 | 说明 |
|---|---|---|
0x00 |
ResetCounts | 重置所有计数器归零 |
ResetCounts —— 重置计数器(0x00)
将 PacketRxCount、PacketTxCount、TxErrCount、CollisionCount、OverrunCount 全部归零, 同时 TimeSinceReset 也会重置为 0 并重新开始计时。无需任何参数,直接发送即可。
请求示例:
{
"invokeRequests": [{
"commandPath": {
"endpointId": 0,
"clusterId": "0x0037",
"commandId": "0x00" // ResetCounts
},
"commandFields": {}
}]
}
示例数据
读取一个以太网 Hub 设备的 EthernetNetworkDiagnostics Cluster 属性:
{
// --- 属性 ---
"0x0": 2, // PHYRate = Rate1G(千兆以太网)
"0x1": true, // FullDuplex = true(全双工)
"0x2": 1048576, // PacketRxCount = 1048576(已接收约 100 万包)
"0x3": 524288, // PacketTxCount = 524288(已发送约 50 万包)
"0x4": 3, // TxErrCount = 3(发送错误 3 次)
"0x5": 0, // CollisionCount = 0(无碰撞)
"0x6": 0, // OverrunCount = 0(无溢出)
"0x7": true, // CarrierDetect = true(载波检测正常)
"0x8": 86400 // TimeSinceReset = 86400(距上次重置 24 小时)
}
PHYRate 和 FullDuplex 反映的是链路协商结果,不会频繁变化,适合在设备详情页一次性展示。 包计数和错误计数则是累积值,适合定期轮询或订阅,用于绘制趋势图或触发告警。
常见场景
场景 1:链路健康检查
App 设备详情页展示以太网连接状态,帮助用户快速判断链路是否正常。
- 读取
CarrierDetect (0x07),确认物理连接正常(true) - 读取
PHYRate (0x00)和FullDuplex (0x01),展示链路速率和双工模式 - 如果 PHYRate 为
null或 CarrierDetect 为false,提示用户检查网线连接 - 如果 FullDuplex 为
false,提示链路降级到半双工,建议检查交换机端口配置
场景 2:网络故障排查
设备响应缓慢或通信不稳定时,通过计数器定位网络层问题。
- 先检查
FeatureMap (0xFFFC),确认设备支持 PKTCNT 和 ERRCNT - 发送
ResetCounts (0x00)清零所有计数器 - 等待一段时间后,读取 TxErrCount、CollisionCount、OverrunCount
- 用
TimeSinceReset (0x08)计算错误率:TxErrCount / TimeSinceReset - 错误率持续偏高 → 检查网线质量和交换机端口;CollisionCount 非零 → 检查双工模式配置