烟雾/一氧化碳报警 Cluster(SmokeCOAlarm)
Cluster ID: 0x005C |
所在 Endpoint: 通常在 Endpoint 1(功能端点)
SmokeCOAlarm 是 Matter 中消防安全设备的核心 Cluster,负责烟雾探测、一氧化碳(CO)探测、电池状态监控、设备自检和联动报警。 住宅中常见的独立式烟感、烟雾/CO 二合一探测器、互联式报警系统都依赖这个 Cluster。
SmokeCOAlarm 的两个 Feature(SMOKE 和 CO)决定设备支持哪些报警类型。
纯烟感设备只启用 SMOKE,纯 CO 探测器只启用 CO,二合一设备同时启用两者。
Feature 的组合直接影响哪些属性和事件可用 —— 读取前务必先检查 FeatureMap (0xFFFC)。
Feature 位图
SmokeCOAlarm 通过 FeatureMap(0xFFFC)声明设备支持哪些报警能力:
FeatureMap = 0x01(Bit 0):纯烟感设备。
FeatureMap = 0x02(Bit 1):纯 CO 探测器。
FeatureMap = 0x03(Bit 0 + Bit 1):烟雾/CO 二合一设备(最常见的家用设备)。
命令(Commands)
SmokeCOAlarm Cluster 只有一个命令 —— 触发设备自检。报警设备的核心动作(报警、静音等) 由设备自主触发,不需要外部命令控制。
| ID | 名称 | 说明 | 所需特性 |
|---|---|---|---|
0x00 |
SelfTestRequest | 触发设备自检 | 无 |
SelfTestRequest —— 触发自检(0x00)
请求设备执行自检流程。设备会检测传感器、蜂鸣器、电池等是否正常工作。
自检期间 TestInProgress 属性变为 true,完成后触发 SelfTestComplete 事件。
不需要任何参数。
自检会让设备短暂发出报警声(测试蜂鸣器),需要提前告知用户。
如果设备当前已经处于报警状态(ExpressedState ≠ Normal),自检请求会被拒绝。
使用场景
用户在 App 中点击「设备自检」按钮时调用。建议每月定期自检一次以确保设备正常工作。
发送命令后,订阅 TestInProgress (0x0005) 属性变化来跟踪自检进度,
监听 SelfTestComplete 事件获取自检结果。
属性详解
SmokeCOAlarm Cluster 的属性按功能分为四组。点击下方汇总表中的属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x0000 |
ExpressedState | enum8 | 报警状态 | 设备当前最高优先级状态 |
0x0001 |
SmokeState | enum8 | 报警状态 | 烟雾探测状态(需 SMOKE feature) |
0x0002 |
COState | enum8 | 报警状态 | 一氧化碳探测状态(需 CO feature) |
0x0003 |
BatteryAlert | enum8 | 报警状态 | 电池电量报警级别 |
0x0004 |
DeviceMuted | enum8 | 设备控制 | 报警是否被静音 |
0x0005 |
TestInProgress | bool | 设备控制 | 是否正在自检 |
0x0006 |
HardwareFaultAlert | bool | 设备控制 | 是否存在硬件故障 |
0x0007 |
EndOfServiceAlert | enum8 | 设备控制 | 设备是否已到使用寿命 |
0x0008 |
InterconnectSmokeAlarm | enum8 | 联动报警 | 联动烟雾报警状态(需 SMOKE feature) |
0x0009 |
InterconnectCOAlarm | enum8 | 联动报警 | 联动 CO 报警状态(需 CO feature) |
0x000A |
ContaminationState | enum8 | 传感器与寿命 | 传感器污染程度 |
0x000B |
SmokeSensitivityLevel | enum8 | 传感器与寿命 | 烟雾灵敏度设置 |
0x000C |
ExpiryDate | epoch_s | 传感器与寿命 | 设备过期日期 |
报警状态(0x0000 - 0x0003)
描述设备当前的各类报警状态。ExpressedState 是所有状态的综合优先级结果,其他三个是分项状态。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0000 |
ExpressedState 综合状态 |
enum8 | 设备当前最高优先级的报警状态。当多个报警同时存在时,设备选择优先级最高的一个作为 ExpressedState(见下方枚举)。这是 SmokeCOAlarm 最核心的属性 |
0x0001 |
SmokeState 烟雾状态 |
enum8 | 烟雾传感器当前探测到的报警级别。需要 SMOKE feature |
0x0002 |
COState CO 状态 |
enum8 | 一氧化碳传感器当前探测到的报警级别。需要 CO feature |
0x0003 |
BatteryAlert 电池报警 |
enum8 | 电池电量状态的报警级别。电池供电的报警设备必须支持此属性 |
ExpressedState 枚举值
ExpressedState 反映设备当前最需要关注的状态。优先级从高到低排列:
当多种报警同时存在时,设备只在 ExpressedState 中反映优先级最高的那一个。
例如同时有烟雾报警和低电量,ExpressedState 会显示 SmokeAlarm (1)。
要获取所有分项状态,需要分别读取 SmokeState、COState、BatteryAlert 等属性。
SmokeState / COState / BatteryAlert / InterconnectSmokeAlarm / InterconnectCOAlarm 枚举值
以上五个属性共用同一套三级报警枚举:
Warning 表示传感器检测到了异常但尚未确认为紧急情况(如轻微烟雾、电池电量偏低), 通常是预警级别,设备可能发出间歇性提示音。 Critical 表示已确认的紧急状况(如持续浓烟、CO 浓度超标、电池严重不足), 设备会持续发出高音量报警。
设备控制(0x0004 - 0x0007)
描述设备的静音状态、自检进度、硬件健康和使用寿命。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0004 |
DeviceMuted 静音状态 |
enum8 | 报警是否已被用户静音。静音后设备停止发声,但报警状态仍然保持(见下方枚举) |
0x0005 |
TestInProgress 自检进行中 |
bool | 设备是否正在执行自检。true = 自检中,此时不接受新的 SelfTestRequest |
0x0006 |
HardwareFaultAlert 硬件故障 |
bool | 设备是否检测到自身硬件故障。true 表示设备可能无法正常工作,需要维修或更换 |
0x0007 |
EndOfServiceAlert 寿命到期 |
enum8 | 设备是否已达到使用寿命(见下方枚举) |
DeviceMuted 枚举值
静音是通过设备上的物理按键触发的,不能通过远程命令控制。 静音只会持续一段有限的时间(通常几分钟),之后报警会自动恢复。 如果危险持续存在,设备可能拒绝静音或缩短静音时间。
EndOfServiceAlert 枚举值
烟雾/CO 探测器的传感器会随时间老化。大多数设备的设计寿命是 7~10 年。
当 EndOfServiceAlert 变为 Expired 时,App 应提醒用户更换设备,
即使设备看起来仍能工作。配合 ExpiryDate (0x000C) 可以提前预告过期时间。
联动报警(0x0008 - 0x0009)
当多个报警设备互联时,一个设备触发报警后,其他设备会通过联动属性反映该状态。 联动报警让整栋房屋都能听到警报声,即使火源不在当前设备所在的房间。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x0008 |
InterconnectSmokeAlarm 联动烟雾报警 |
enum8 | 其他联动设备触发的烟雾报警状态。枚举值与 SmokeState 相同(Normal / Warning / Critical)。需要 SMOKE feature |
0x0009 |
InterconnectCOAlarm 联动 CO 报警 |
enum8 | 其他联动设备触发的 CO 报警状态。枚举值与 COState 相同(Normal / Warning / Critical)。需要 CO feature |
SmokeState 是本机传感器的探测结果,InterconnectSmokeAlarm 是其他联动设备传来的报警。
在 ExpressedState 的优先级中,本机报警(SmokeAlarm = 1)高于联动报警(InterconnectSmoke = 7),
因为本机探测到的烟雾意味着危险就在附近。
传感器与寿命(0x000A - 0x000C)
传感器健康状态和设备使用寿命相关信息。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x000A |
ContaminationState 污染状态 |
enum8 | 烟雾传感器的污染程度。灰尘、油烟等会影响传感器灵敏度(见下方枚举) |
0x000B |
SmokeSensitivityLevel 烟雾灵敏度 |
enum8 | 烟雾探测的灵敏度设置。可读可写(见下方枚举) |
0x000C |
ExpiryDate 过期日期 |
epoch_s | 设备的过期时间,以 Unix 时间戳(秒)表示。超过此时间后设备应被更换 |
ContaminationState 枚举值
SmokeSensitivityLevel 枚举值
SmokeSensitivityLevel 是可写属性,App 可以提供设置入口让用户调整。
如果设备安装在厨房附近频繁误报,可以建议用户调低灵敏度。
但要注意:低灵敏度意味着可能延迟发现真正的火灾,需要明确提示风险。
事件(Events)
SmokeCOAlarm 是 Matter 中事件最丰富的 Cluster 之一。事件记录了报警设备从触发到解除的完整生命周期, 是 App 推送通知和历史记录的主要数据来源。所有事件的优先级均为 Critical。
| ID | 事件名称 | 说明 | 所需特性 |
|---|---|---|---|
0x00 |
SmokeAlarm | 本机烟雾报警触发 | SMOKE |
0x01 |
COAlarm | 本机 CO 报警触发 | CO |
0x02 |
LowBattery | 电池电量低 | 无 |
0x03 |
HardwareFault | 硬件故障 | 无 |
0x04 |
EndOfService | 设备到达使用寿命 | 无 |
0x05 |
SelfTestComplete | 自检完成 | 无 |
0x06 |
AlarmMuted | 报警已被静音 | 无 |
0x07 |
MuteEnded | 静音结束,报警恢复 | 无 |
0x08 |
InterconnectSmokeAlarm | 联动烟雾报警触发 | SMOKE |
0x09 |
InterconnectCOAlarm | 联动 CO 报警触发 | CO |
0x0A |
AllClear | 所有报警已解除,恢复正常 | 无 |
事件是「发生了什么」(一次性记录),属性是「当前是什么」(持续状态)。
例如 SmokeAlarm 事件在烟雾报警触发时产生一次,
而 SmokeState 属性会一直保持 Warning 或 Critical 直到烟雾消散。
App 应同时订阅事件(用于推送通知)和属性(用于界面实时显示)。
事件的典型时序
一次完整的烟雾报警生命周期会产生以下事件序列:
SmokeAlarm— 传感器检测到烟雾,报警开始AlarmMuted— 用户按下静音按钮(可选)MuteEnded— 静音超时,报警恢复(如果烟雾未消散)AllClear— 烟雾消散,所有报警状态恢复正常
AllClear 事件只在所有报警都解除后才会触发。
如果烟雾报警解除但 CO 报警仍然存在,不会触发 AllClear。
收到 AllClear 后,ExpressedState 保证为 Normal (0)。
示例数据
一个支持烟雾和 CO 双报警的设备在正常状态下的 SmokeCOAlarm Cluster 读取结果:
{
// --- 报警综合状态 ---
"0x0000": 0, // ExpressedState = Normal(当前无报警)
"0x0001": 0, // SmokeState = Normal
"0x0002": 0, // COState = Normal
"0x0003": 0, // BatteryAlert = Normal
"0x0004": 0, // DeviceMuted = NotMuted(未静音)
"0x0005": false, // TestInProgress = false(未在自检)
"0x0006": false, // HardwareFaultAlert = false
"0x0007": 0, // EndOfServiceAlert = Normal
// --- 联动报警 ---
"0x0008": 0, // InterconnectSmokeAlarm = Normal
"0x0009": 0, // InterconnectCOAlarm = Normal
// --- 传感器与寿命 ---
"0x000A": 0, // ContaminationState = Normal
"0x000B": 1, // SmokeSensitivityLevel = Standard
"0x000C": 1893456000 // ExpiryDate = 2029-12-31(epoch_s)
}
实际读取数据时,建议先检查 FeatureMap (0xFFFC) 确定设备支持哪些特性。
纯烟感设备不会上报 COState (0x0002) 和 InterconnectCOAlarm (0x0009),
纯 CO 探测器不会上报 SmokeState (0x0001) 和 InterconnectSmokeAlarm (0x0008)。
ExpiryDate (0x000C) 的值是 Unix 时间戳(秒),需要转换为可读日期后展示给用户。
常见场景
场景 1:火灾探测与通知
- 订阅
SmokeAlarm事件 —— 收到后立即推送紧急通知给用户 - 读取
SmokeState (0x0001)确认报警级别(Warning / Critical) - 读取
ExpressedState (0x0000)了解设备综合状态 - 界面上用醒目颜色(红色)展示报警状态,提示用户检查现场并拨打消防电话
- 监听
AllClear事件确认报警解除,界面恢复正常
场景 2:一氧化碳泄漏处理
- 订阅
COAlarm事件 —— CO 泄漏比烟雾更危险(无色无味),推送必须即时 - 读取
COState (0x0002)确认报警级别 -
在通知中提供安全指引:
- 立即打开窗户通风
- 关闭燃气设备
- 撤离到室外安全区域
- 拨打 119 或燃气公司紧急电话
- 检查
InterconnectCOAlarm (0x0009)确认是否有其他区域也在报警
场景 3:设备维护与健康监控
- 定期读取
BatteryAlert (0x0003)—— 出现 Warning 时提醒用户更换电池 - 读取
ContaminationState (0x000A)—— 达到 Warning 时提醒用户清洁传感器 - 读取
ExpiryDate (0x000C)—— 临近过期时提前通知用户购买替换设备 - 监控
HardwareFaultAlert (0x0006)—— 为true时提醒用户联系售后 - 每月通过
SelfTestRequest (0x00)命令触发一次自检,确保设备正常 - 监听
SelfTestComplete事件获取自检结果