烟雾/一氧化碳报警 Cluster(SmokeCOAlarm)

Cluster ID: 0x005C  |  所在 Endpoint: 通常在 Endpoint 1(功能端点)

SmokeCOAlarm 是 Matter 中消防安全设备的核心 Cluster,负责烟雾探测、一氧化碳(CO)探测、电池状态监控、设备自检和联动报警。 住宅中常见的独立式烟感、烟雾/CO 二合一探测器、互联式报警系统都依赖这个 Cluster。

Feature 驱动的能力声明

SmokeCOAlarm 的两个 Feature(SMOKE 和 CO)决定设备支持哪些报警类型。 纯烟感设备只启用 SMOKE,纯 CO 探测器只启用 CO,二合一设备同时启用两者。 Feature 的组合直接影响哪些属性和事件可用 —— 读取前务必先检查 FeatureMap (0xFFFC)。

Feature 位图

SmokeCOAlarm 通过 FeatureMap(0xFFFC)声明设备支持哪些报警能力:

Bit 0
SMOKE(烟雾报警) 启用烟雾探测能力 —— 提供 SmokeState 属性和 SmokeAlarm / InterconnectSmokeAlarm 事件
Bit 1
CO(一氧化碳报警) 启用 CO 探测能力 —— 提供 COState 属性和 COAlarm / InterconnectCOAlarm 事件
常见组合

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 反映设备当前最需要关注的状态。优先级从高到低排列:

0
Normal 正常 —— 无任何报警,一切正常
1
SmokeAlarm 烟雾报警 —— 检测到烟雾,可能有火灾
2
COAlarm CO 报警 —— 检测到一氧化碳泄漏
3
BatteryAlert 电池报警 —— 电量低或电池故障
4
Testing 自检中 —— 设备正在执行自检流程
5
HardwareFault 硬件故障 —— 设备自身检测到故障
6
EndOfService 寿命到期 —— 设备已达使用年限,需更换
7
InterconnectSmoke 联动烟雾 —— 其他联动设备触发了烟雾报警
8
InterconnectCO 联动 CO —— 其他联动设备触发了 CO 报警
ExpressedState 的优先级机制

当多种报警同时存在时,设备只在 ExpressedState 中反映优先级最高的那一个。 例如同时有烟雾报警和低电量,ExpressedState 会显示 SmokeAlarm (1)。 要获取所有分项状态,需要分别读取 SmokeState、COState、BatteryAlert 等属性。

SmokeState / COState / BatteryAlert / InterconnectSmokeAlarm / InterconnectCOAlarm 枚举值

以上五个属性共用同一套三级报警枚举:

0
Normal 正常 —— 未检测到异常
1
Warning 预警 —— 检测到轻微异常,需注意
2
Critical 严重 —— 确认危险,需要立即处理
Warning 与 Critical 的区别

Warning 表示传感器检测到了异常但尚未确认为紧急情况(如轻微烟雾、电池电量偏低), 通常是预警级别,设备可能发出间歇性提示音。 Critical 表示已确认的紧急状况(如持续浓烟、CO 浓度超标、电池严重不足), 设备会持续发出高音量报警。

设备控制(0x0004 - 0x0007)

描述设备的静音状态、自检进度、硬件健康和使用寿命。

ID 名称 类型 说明
0x0004 DeviceMuted
静音状态
enum8 报警是否已被用户静音。静音后设备停止发声,但报警状态仍然保持(见下方枚举)
0x0005 TestInProgress
自检进行中
bool 设备是否正在执行自检。true = 自检中,此时不接受新的 SelfTestRequest
0x0006 HardwareFaultAlert
硬件故障
bool 设备是否检测到自身硬件故障。true 表示设备可能无法正常工作,需要维修或更换
0x0007 EndOfServiceAlert
寿命到期
enum8 设备是否已达到使用寿命(见下方枚举)

DeviceMuted 枚举值

0
NotMuted 未静音 —— 报警声正常发出
1
Muted 已静音 —— 报警声被抑制,但报警状态仍保持
静音的限制

静音是通过设备上的物理按键触发的,不能通过远程命令控制。 静音只会持续一段有限的时间(通常几分钟),之后报警会自动恢复。 如果危险持续存在,设备可能拒绝静音或缩短静音时间。

EndOfServiceAlert 枚举值

0
Normal 正常 —— 设备在使用寿命内
1
Expired 已过期 —— 设备已达使用年限,传感器可能不再准确,应尽快更换
烟感的使用寿命

烟雾/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 枚举值

0
Normal 正常 —— 传感器清洁
1
Low 轻度污染 —— 不影响正常使用
2
Warning 中度污染 —— 灵敏度可能降低,建议清洁
3
Critical 严重污染 —— 传感器可能无法正常工作,必须清洁或更换

SmokeSensitivityLevel 枚举值

0
High 高灵敏度 —— 轻微烟雾即触发,适合卧室等重要区域
1
Standard 标准灵敏度 —— 默认设置,适合大多数场景
2
Low 低灵敏度 —— 降低误报,适合厨房等容易产生烟雾的区域
灵敏度调整建议

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 应同时订阅事件(用于推送通知)和属性(用于界面实时显示)。

事件的典型时序

一次完整的烟雾报警生命周期会产生以下事件序列:

  1. SmokeAlarm — 传感器检测到烟雾,报警开始
  2. AlarmMuted — 用户按下静音按钮(可选)
  3. MuteEnded — 静音超时,报警恢复(如果烟雾未消散)
  4. AllClear — 烟雾消散,所有报警状态恢复正常
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:火灾探测与通知
  1. 订阅 SmokeAlarm 事件 —— 收到后立即推送紧急通知给用户
  2. 读取 SmokeState (0x0001) 确认报警级别(Warning / Critical)
  3. 读取 ExpressedState (0x0000) 了解设备综合状态
  4. 界面上用醒目颜色(红色)展示报警状态,提示用户检查现场并拨打消防电话
  5. 监听 AllClear 事件确认报警解除,界面恢复正常
场景 2:一氧化碳泄漏处理
  1. 订阅 COAlarm 事件 —— CO 泄漏比烟雾更危险(无色无味),推送必须即时
  2. 读取 COState (0x0002) 确认报警级别
  3. 在通知中提供安全指引:
    • 立即打开窗户通风
    • 关闭燃气设备
    • 撤离到室外安全区域
    • 拨打 119 或燃气公司紧急电话
  4. 检查 InterconnectCOAlarm (0x0009) 确认是否有其他区域也在报警
场景 3:设备维护与健康监控
  1. 定期读取 BatteryAlert (0x0003) —— 出现 Warning 时提醒用户更换电池
  2. 读取 ContaminationState (0x000A) —— 达到 Warning 时提醒用户清洁传感器
  3. 读取 ExpiryDate (0x000C) —— 临近过期时提前通知用户购买替换设备
  4. 监控 HardwareFaultAlert (0x0006) —— 为 true 时提醒用户联系售后
  5. 每月通过 SelfTestRequest (0x00) 命令触发一次自检,确保设备正常
  6. 监听 SelfTestComplete 事件获取自检结果