通用诊断 Cluster(GeneralDiagnostics)

Cluster ID: 0x0033  |  所在 Endpoint: 固定在 Endpoint 0(根端点)

GeneralDiagnostics 提供设备的健康状态和运行诊断信息 —— 包括网络接口详情、重启次数、运行时长、启动原因, 以及硬件/射频/网络三类故障的实时追踪。所有 Matter 设备都必须实现这个 Cluster,是设备运维和问题排查的第一入口。

Endpoint 0 专属

GeneralDiagnostics 只出现在 Endpoint 0(根端点),不会出现在功能端点上。 它反映的是整个设备的健康状态,不是某个功能模块的状态。 读取时请确保指定 endpointId = 0。

命令(Commands)

GeneralDiagnostics 只有两个命令。TestEventTrigger 用于测试认证,生产环境通常禁用; TimeSnapshot 用于获取设备当前的时间快照。 点击下方表格中的命令 ID 可跳转到对应的详细说明。

ID 名称 方向 说明
0x00 TestEventTrigger Client → Server 触发设备内部的测试事件
0x01 TimeSnapshot Client → Server 获取设备当前时间快照

TestEventTrigger —— 测试事件触发(0x00)

触发设备预置的测试事件。这个命令主要用于 Matter 认证测试期间,允许测试工具在不拆机的情况下模拟特定的设备行为 (如模拟传感器告警、触发故障状态等)。

参数类型说明
EnableKey octstr (16 bytes) 启用密钥 —— 必须与设备预设的密钥匹配,否则命令被拒绝。生产设备应将此密钥设为全零以禁用测试功能
EventTrigger uint64 触发器编号 —— 标识要触发的具体测试事件,由厂商或 Matter 测试规范定义
安全提示

TestEventTriggersEnabled 属性为 true 时此命令才生效。 生产环境的设备必须禁用测试触发器(将 EnableKey 设为全零),否则存在安全风险 —— 攻击者可能利用此命令模拟故障或篡改设备行为。

使用场景

Matter 认证测试时,测试工具通过此命令让设备模拟特定状态(如烟感报警、网络断开等), 验证设备的事件上报和故障处理逻辑是否符合规范。App 开发中几乎不会用到此命令。

TimeSnapshot —— 时间快照(0x01)

请求设备返回当前的系统时间。不需要参数。 设备会返回一个 TimeSnapshotResponse,包含系统启动后的毫秒计时和 POSIX 时间戳(如果设备有可靠时钟)。

TimeSnapshotResponse 响应字段

字段类型说明
SystemTimeMs uint64 设备启动后经过的毫秒数(单调递增,不受时钟校准影响)
PosixTimeMs uint64 / null POSIX 时间戳(毫秒精度)。如果设备没有可靠的 UTC 时钟,此字段为 null
使用场景

排查设备时间同步问题时使用。例如设备的日志时间戳明显偏差,可以通过 TimeSnapshot 确认设备当前的内部时钟是否准确。 SystemTimeMs 是从启动开始的单调时钟,配合 UpTime 属性可以交叉验证。

属性详解

GeneralDiagnostics 的属性按功能分为四组。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。

ID 名称 类型 分组 说明
0x0000 NetworkInterfaces list<NetworkInterface> 网络接口 设备所有网络接口信息
0x0001 RebootCount uint16 运行统计 累计重启次数
0x0002 UpTime uint64 运行统计 设备已运行时间(秒)
0x0003 TotalOperationalHours uint32 运行统计 累计运行小时数
0x0004 BootReason BootReasonEnum 运行统计 最近一次启动的原因
0x0005 ActiveHardwareFaults list<HardwareFaultEnum> 故障追踪 当前活跃的硬件故障列表
0x0006 ActiveRadioFaults list<RadioFaultEnum> 故障追踪 当前活跃的射频故障列表
0x0007 ActiveNetworkFaults list<NetworkFaultEnum> 故障追踪 当前活跃的网络故障列表
0x0008 TestEventTriggersEnabled bool 测试配置 测试事件触发器是否启用

网络接口(0x0000)

设备当前可用的所有网络接口的详细信息列表。

ID名称类型说明
0x0000 NetworkInterfaces
网络接口列表
list<NetworkInterface> 设备当前所有网络接口的信息列表。每个元素是一个 NetworkInterface 结构体,包含接口名称、状态、IP 地址等详情。最多 8 个接口
开发提示

NetworkInterfaces 是了解设备网络连接状况的最直接途径。 如果设备同时有 WiFi 和 Thread 接口,列表中会包含多个条目。 通过检查 IsOperational 可以判断哪个接口当前是活跃的。

运行统计(0x0001-0x0004)

设备的运行时间统计和启动原因,是判断设备稳定性的关键指标。

ID名称类型说明
0x0001 RebootCount
重启次数
uint16 设备自出厂以来的累计重启次数。频繁重启通常意味着设备存在稳定性问题(电源不稳、固件崩溃等)
0x0002 UpTime
运行时间
uint64 设备自最近一次启动以来已运行的时间,单位秒。可用来判断设备是否刚刚重启过
0x0003 TotalOperationalHours
累计运行小时数
uint32 设备自出厂以来的累计运行小时数(取整)。这个值跨重启持久化保存,用于评估设备使用寿命
0x0004 BootReason
启动原因
BootReasonEnum 设备最近一次启动的原因(见下方枚举)。排查异常重启时首先检查此字段
时间单位注意

UpTime 的单位是秒,而 TotalOperationalHours 的单位是小时。 例如 UpTime = 86400 表示已运行 24 小时,而 TotalOperationalHours = 720 表示累计运行了 30 天。

故障追踪(0x0005-0x0007)

三个列表属性分别追踪硬件、射频和网络层面的当前活跃故障。 正常运行的设备这三个列表都应该为空。一旦出现非空值,说明设备检测到了对应类型的故障。

ID名称类型说明
0x0005 ActiveHardwareFaults
活跃硬件故障
list<HardwareFaultEnum> 当前存在的硬件故障列表。空列表 = 无故障。可能同时包含多个不同类型的故障
0x0006 ActiveRadioFaults
活跃射频故障
list<RadioFaultEnum> 当前存在的射频(无线通信)故障列表。WiFi/BLE/Thread 模块异常时会出现
0x0007 ActiveNetworkFaults
活跃网络故障
list<NetworkFaultEnum> 当前存在的网络层故障列表。如连接失败、网络干扰等
故障列表与事件的关系

这三个列表记录的是当前存在的故障。当故障状态发生变化时(新增或恢复),设备会同时发出对应的变更事件 (HardwareFaultChange、RadioFaultChange、NetworkFaultChange), 事件中包含变化前后的完整列表,方便追踪故障的出现和恢复过程。

测试配置(0x0008)

与认证测试相关的配置属性。

ID名称类型说明
0x0008 TestEventTriggersEnabled
测试触发器启用
bool 标识设备是否启用了 TestEventTrigger 命令。生产设备必须设为 false。如果在已上市的产品上读到 true,说明厂商的安全配置有缺陷

枚举速查

GeneralDiagnostics 涉及多个枚举类型,下面逐一列出所有枚举值。

BootReasonEnum —— 启动原因

描述设备最近一次启动的原因,对应 BootReason (0x0004) 属性和 BootReason 事件。

0
Unspecified 未指定 —— 设备无法确定启动原因
1
PowerOnReboot 正常上电 —— 设备接通电源后启动
2
BrownOutReset 欠压重启 —— 电源电压降到临界值以下触发复位
3
SoftwareWatchdogReset 软件看门狗重启 —— 固件运行异常,看门狗定时器超时触发复位
4
HardwareWatchdogReset 硬件看门狗重启 —— 硬件级别的看门狗超时,通常比软件看门狗更严重
5
SoftwareUpdateCompleted 固件更新完成 —— OTA 升级成功后自动重启
6
SoftwareReset 软件重启 —— 由软件主动触发的重启(如远程重启命令、恢复出厂设置)

HardwareFaultEnum —— 硬件故障

描述设备可能遇到的硬件层故障,对应 ActiveHardwareFaults (0x0005) 属性。

0
Unspecified 未指定的硬件故障
1
Radio 射频模块故障 —— 无线通信硬件异常
2
Sensor 传感器故障 —— 温度、湿度等传感器异常
3
ResettableOverTemp 可恢复过温 —— 温度过高,冷却后可自动恢复
4
NonResettableOverTemp 不可恢复过温 —— 严重过温,可能已造成永久损坏
5
PowerSource 电源故障 —— 供电模块异常
6
VisualDisplayFault 显示屏故障 —— 屏幕或 LED 指示异常
7
AudioOutputFault 音频输出故障 —— 扬声器或蜂鸣器异常
8
UserInterfaceFault 用户界面故障 —— 按键、触摸板等输入设备异常
9
NonVolatileMemoryError 非易失存储错误 —— Flash/EEPROM 读写异常,数据可能丢失
10
TamperDetected 检测到拆机 —— 设备外壳被打开或传感器触发防拆报警

RadioFaultEnum —— 射频故障

描述设备无线通信模块的故障类型,对应 ActiveRadioFaults (0x0006) 属性。

0
Unspecified 未指定的射频故障
1
WiFiFault WiFi 模块故障
2
CellularFault 蜂窝网络模块故障
3
ThreadFault Thread 模块故障
4
NFCFault NFC 模块故障
5
BLEFault 蓝牙低功耗模块故障
6
EthernetFault 以太网模块故障

NetworkFaultEnum —— 网络故障

描述设备网络层面的故障类型,对应 ActiveNetworkFaults (0x0007) 属性。

0
Unspecified 未指定的网络故障
1
HardwareFailure 网络硬件故障 —— 网卡或物理连接异常
2
NetworkJammed 网络干扰 —— 检测到信道拥塞或电磁干扰
3
ConnectionFailed 连接失败 —— 无法建立或维持网络连接

InterfaceTypeEnum —— 网络接口类型

描述网络接口的物理类型,对应 NetworkInterface 结构体中的 Type 字段。

0
Unspecified 未指定类型
1
WiFi WiFi 无线接口
2
Ethernet 以太网有线接口
3
Cellular 蜂窝移动网络接口
4
Thread Thread 网格网络接口

数据结构

NetworkInterface 结构体

描述一个网络接口的完整信息,是 NetworkInterfaces (0x0000) 属性中每个列表元素的结构。

字段类型说明
Name string (max 32) 接口名称,如 "wlan0"、"eth0"、"Thread"
IsOperational bool 接口是否正在运行并可用于通信
OffPremiseServicesReachableIPv4 bool / null 通过此接口的 IPv4 是否可达外部(互联网)服务。null = 未知
OffPremiseServicesReachableIPv6 bool / null 通过此接口的 IPv6 是否可达外部服务。null = 未知
HardwareAddress octstr (6 or 8 bytes) 接口的硬件地址(MAC 地址)。WiFi/Ethernet 为 6 字节,IEEE 802.15.4(Thread)为 8 字节
IPv4Addresses list<octstr> 分配给此接口的所有 IPv4 地址列表
IPv6Addresses list<octstr> 分配给此接口的所有 IPv6 地址列表(通常包含链路本地地址和全局地址)
Type InterfaceTypeEnum 接口的物理类型

NetworkInterface 数据示例:

{
  "Name": "wlan0",                              // 接口名称
  "IsOperational": true,                        // 接口正在运行
  "OffPremiseServicesReachableIPv4": true,       // IPv4 可达外部服务
  "OffPremiseServicesReachableIPv6": null,       // IPv6 可达性未知
  "HardwareAddress": "AA:BB:CC:DD:EE:FF",       // MAC 地址
  "IPv4Addresses": ["192.168.1.100"],            // IPv4 地址列表
  "IPv6Addresses": ["fe80::1", "2001:db8::1"],  // IPv6 地址列表
  "Type": 1                                     // WiFi 接口
}

事件(Events)

GeneralDiagnostics 定义了 4 个事件,均为 Critical 优先级。 前三个分别对应硬件/射频/网络故障状态的变更通知,第四个是设备启动原因通知。 订阅这些事件可以实时感知设备健康状态的变化。

ID 名称 优先级 说明
0x00 HardwareFaultChange Critical 硬件故障列表发生变化
0x01 RadioFaultChange Critical 射频故障列表发生变化
0x02 NetworkFaultChange Critical 网络故障列表发生变化
0x03 BootReason Critical 设备启动时上报启动原因

HardwareFaultChange —— 硬件故障变更(0x00)

当设备的硬件故障状态发生变化时触发 —— 无论是新增故障还是故障恢复。 事件数据中同时包含变化前后的完整故障列表,方便对比分析。

字段类型说明
Current list<HardwareFaultEnum> 变化后的当前硬件故障列表(与 ActiveHardwareFaults 属性一致)
Previous list<HardwareFaultEnum> 变化前的硬件故障列表
解读示例

假设收到事件 Previous = [3],Current = [3, 9]。 说明之前已有「可恢复过温(3)」故障,现在又新增了「非易失存储错误(9)」。 如果后续收到 Previous = [3, 9],Current = [9],说明过温故障已恢复,但存储错误仍在。

RadioFaultChange —— 射频故障变更(0x01)

当设备的射频故障状态发生变化时触发。结构与 HardwareFaultChange 相同。

字段类型说明
Current list<RadioFaultEnum> 变化后的当前射频故障列表
Previous list<RadioFaultEnum> 变化前的射频故障列表

NetworkFaultChange —— 网络故障变更(0x02)

当设备的网络故障状态发生变化时触发。结构与 HardwareFaultChange 相同。

字段类型说明
Current list<NetworkFaultEnum> 变化后的当前网络故障列表
Previous list<NetworkFaultEnum> 变化前的网络故障列表

BootReason —— 启动原因事件(0x03)

设备每次启动时都会发出此事件,上报启动的原因。 这是排查设备异常重启的第一手线索 —— 配合 RebootCount 属性使用效果更佳。

字段类型说明
BootReason BootReasonEnum 本次启动的原因
解读示例

收到 BootReason = 3(SoftwareWatchdogReset),说明设备因固件异常被看门狗强制重启。 如果短时间内多次收到同一原因的 BootReason 事件,强烈建议联系厂商排查固件问题。

示例数据

一个正常运行中的 WiFi 智能设备的 GeneralDiagnostics Cluster 读取结果:

{
  // --- 网络接口 ---
  "0x0000": [                   // NetworkInterfaces
    {
      "Name": "wlan0",
      "IsOperational": true,
      "OffPremiseServicesReachableIPv4": true,
      "OffPremiseServicesReachableIPv6": null,
      "HardwareAddress": "AA:BB:CC:DD:EE:FF",
      "IPv4Addresses": ["192.168.1.100"],
      "IPv6Addresses": ["fe80::1"],
      "Type": 1                 // WiFi
    }
  ],

  // --- 运行统计 ---
  "0x0001": 12,                 // RebootCount = 12(累计重启 12 次)
  "0x0002": 86400,              // UpTime = 86400 秒(已运行 24 小时)
  "0x0003": 720,                // TotalOperationalHours = 720(累计运行 30 天)
  "0x0004": 1,                  // BootReason = PowerOnReboot(正常上电启动)

  // --- 故障状态 ---
  "0x0005": [],                 // ActiveHardwareFaults = [](无硬件故障)
  "0x0006": [],                 // ActiveRadioFaults = [](无射频故障)
  "0x0007": [],                 // ActiveNetworkFaults = [](无网络故障)

  // --- 测试配置 ---
  "0x0008": false               // TestEventTriggersEnabled = false(测试触发器未启用)
}
开发提示

正常设备的三个故障列表(0x0005 ~ 0x0007)都应该为空数组。如果读到非空值,说明设备当前存在异常。 配合 BootReason (0x0004) 和 RebootCount (0x0001) 可以初步判断设备的稳定性 —— 频繁重启 + 看门狗原因 + 硬件故障列表非空,基本可以断定设备硬件有问题。

常见场景

场景 1:设备健康状态总览
  1. 读取 UpTime (0x0002) 确认设备运行时间,判断是否刚刚重启过
  2. 读取 BootReason (0x0004),如果不是 PowerOnReboot(1) 或 SoftwareReset(6),可能存在异常
  3. 读取 ActiveHardwareFaults (0x0005)、ActiveRadioFaults (0x0006)、ActiveNetworkFaults (0x0007),确认无活跃故障
  4. 读取 RebootCount (0x0001),如果值异常高,配合 TotalOperationalHours (0x0003) 计算平均重启频率
场景 2:排查设备离线问题
  1. 设备重新上线后,读取 BootReason (0x0004) —— 看是重启了还是只是网络断开
  2. 读取 NetworkInterfaces (0x0000),检查 IsOperational 和 OffPremiseServicesReachableIPv4 状态
  3. 检查 ActiveNetworkFaults (0x0007),看是否有 ConnectionFailed(3) 或 NetworkJammed(2)
  4. 订阅 NetworkFaultChange 事件,监控后续是否再次出现网络异常
场景 3:固件更新后验证
  1. OTA 升级完成后,设备应自动重启
  2. 读取 BootReason (0x0004),期望值为 SoftwareUpdateCompleted (5)
  3. 如果是 SoftwareWatchdogReset (3) 或 HardwareWatchdogReset (4),说明新固件可能有问题
  4. 持续监控 ActiveHardwareFaults 和 RebootCount,确保新版本运行稳定
场景 4:生产安全检查
  1. 读取 TestEventTriggersEnabled (0x0008),必须为 false
  2. 如果为 true,设备未关闭测试模式,存在安全风险 —— 攻击者可通过 TestEventTrigger 命令操纵设备行为
  3. 这个检查通常在产品出厂前和安全审计时执行