HEPA 滤芯监测 Cluster(HepaFilterMonitoring)
Cluster ID: 0x0071 |
所在 Endpoint: 功能端点(通常 Endpoint 1)
HepaFilterMonitoring 用于监测空气净化器中 HEPA 滤芯的生命周期状态,包括剩余寿命百分比、劣化程度、是否需要更换, 以及推荐的替换产品信息。当用户更换滤芯后,可以通过命令重置状态,开始新一轮监测周期。
空气净化器需要定期更换 HEPA 滤芯。这个 Cluster 让 App 能实时展示滤芯剩余寿命, 在滤芯接近耗尽时推送提醒,甚至直接提供替换滤芯的购买链接。 用户更换完滤芯后,发一个 ResetCondition 命令就能重新开始计时。
Feature Map(功能特性)
HepaFilterMonitoring 通过 Feature Map 控制可选功能的启用。设备可以根据硬件能力声明支持哪些特性。
| Bit | 代码 | 名称 | 说明 |
|---|---|---|---|
0 |
CON | Condition | 支持滤芯剩余寿命百分比(Condition 属性) |
1 |
WAR | Warning | 支持劣化程度等级(DegradationDirection 属性) |
2 |
REP | ReplacementProductList | 支持替换产品列表(ReplacementProductList 属性) |
Feature Map = 0b111(7):同时支持寿命百分比、劣化方向和替换产品列表 —— 这是功能最完整的配置。
Feature Map = 0b001(1):只支持寿命百分比,适合低成本设备。
Feature Map = 0b101(5):支持寿命百分比 + 替换产品列表,不报告劣化方向。
属性总览
HepaFilterMonitoring 的属性分为必选和可选两部分,可选属性取决于设备声明的 Feature。
| ID | 名称 | 类型 | 读写 | 必选 | 说明 |
|---|---|---|---|---|---|
0x00 |
Condition | uint8 | 只读 | CON | 滤芯剩余寿命百分比(0-100%) |
0x01 |
DegradationDirection | enum8 | 只读 | WAR | 劣化方向:数值升高还是降低表示更差 |
0x02 |
ChangeIndication | enum8 | 只读 | 是 | 更换指示:正常 / 警告 / 临界 |
0x03 |
InPlaceIndicator | bool | 只读 | 否 | 滤芯是否已物理安装 |
0x04 |
LastChangedTime | epoch_s | 只读 | 否 | 上次更换滤芯的时间(可为 null) |
0x05 |
ReplacementProductList | list | 只读 | REP | 推荐的替换产品列表 |
Condition(滤芯剩余寿命)
表示滤芯剩余寿命的百分比,范围 0 到 100。
100 表示全新滤芯,0 表示滤芯已完全耗尽。
需要设备声明 CON Feature 才会出现此属性。
这个百分比由设备固件根据使用时长、风量、颗粒物浓度等因素综合计算。 不同厂商的算法可能不同,但对 App 开发者来说只需关注这个 0-100 的值即可。 建议在 App 中用进度条或环形图展示,低于 20% 时高亮提醒。
DegradationDirection(劣化方向)
指示 Condition 值的劣化方向 —— 即数值变大还是变小代表滤芯状态变差。 需要设备声明 WAR Feature 才会出现此属性。
DegradationDirectionEnum 枚举值
不同厂商对 Condition 值的定义可能相反:有的用「剩余百分比」(越低越差),有的用「污染程度」(越高越差)。 DegradationDirection 让 App 能正确解读 Condition 值,无论厂商如何定义。
ChangeIndication(更换指示)
滤芯当前的更换状态。这是一个必选属性,即使设备不支持 Condition 百分比,也必须报告更换指示。
ChangeIndicationEnum 枚举值
InPlaceIndicator(滤芯安装状态)
布尔值,表示滤芯是否已物理安装到设备中。true 表示滤芯在位,false 表示滤芯未安装或已取出。
这是一个可选属性,取决于设备是否有物理检测传感器。
当 InPlaceIndicator = false 时,App 应提示用户「滤芯未安装」并禁止开机运行。
用户更换滤芯的流程通常是:取出旧滤芯(false)→ 装入新滤芯(true)→ 发送 ResetCondition 命令。
LastChangedTime(上次更换时间)
上次更换滤芯的 UTC 时间戳(epoch 秒数)。可以为 null,表示设备未记录过更换时间。
当用户发送 ResetCondition 命令后,设备会将此属性更新为当前时间。
ReplacementProductList(替换产品列表)
推荐的替换产品列表,每个条目包含产品标识类型和标识值。 需要设备声明 REP Feature 才会出现此属性。 列表可以包含多个条目,用不同的编码体系标识同一款替换滤芯。
ReplacementProductStruct 结构
| 字段 | 类型 | 说明 |
|---|---|---|
| ProductIdentifierType | enum8 | 产品标识编码体系 |
| ProductIdentifierValue | string | 产品标识值(条码号、编号等) |
ProductIdentifierTypeEnum 枚举值
命令(Commands)
HepaFilterMonitoring 只有一个命令,由 Client 发给 Server(即 App 发给设备)。 用于在用户更换滤芯后重置监测状态。
| ID | 名称 | 说明 |
|---|---|---|
0x00 |
ResetCondition | 重置滤芯状态(更换滤芯后调用) |
ResetCondition —— 重置滤芯状态(0x00)
用户更换完 HEPA 滤芯后,发送此命令通知设备重新开始生命周期监测。
设备收到后会将 Condition 重置为 100,ChangeIndication 重置为 OK,
并更新 LastChangedTime 为当前时间。
此命令没有参数,直接发送即可。
请求示例:
{
"invokeRequests": [{
"commandPath": {
"endpointId": 1,
"clusterId": "0x0071",
"commandId": "0x00" // ResetCondition
},
"commandFields": {}
}]
}
ResetCondition 不会检查滤芯是否真的被物理更换。如果设备支持 InPlaceIndicator,
App 可以先确认该属性从 false 变为 true(用户取出旧滤芯再装入新滤芯)后再发送此命令,
避免误操作。
示例数据
读取一台空气净化器的 HepaFilterMonitoring Cluster 全部属性:
{
// --- 属性 ---
"0x0": 72, // Condition = 72%(滤芯剩余寿命)
"0x1": 1, // DegradationDirection = Down(数值越低越差)
"0x2": 0, // ChangeIndication = OK(状态正常)
"0x3": true, // InPlaceIndicator = true(滤芯已安装)
"0x4": 1695206400, // LastChangedTime = 2023-09-20T16:00:00Z
"0x5": [ // ReplacementProductList
{
"0": 0, // ProductIdentifierType = UPC
"1": "012345678905" // ProductIdentifierValue
}
]
}
场景一:滤芯生命周期追踪
一台空气净化器从安装新滤芯到滤芯耗尽再到更换的完整流程。 App 通过订阅属性变化来实时更新 UI,在关键节点推送通知。
{
// 场景:空气净化器运行 6 个月后,滤芯开始老化
// 第一次读取 —— 滤芯状态良好
"readAttributes": {
"0x0": 72, // Condition = 72%
"0x2": 0 // ChangeIndication = OK
},
// 两个月后 —— 滤芯进入警告区间
"readAttributes_later": {
"0x0": 18, // Condition = 18%
"0x2": 1 // ChangeIndication = Warning
},
// 继续使用 —— 滤芯进入临界状态
"readAttributes_critical": {
"0x0": 3, // Condition = 3%
"0x2": 2 // ChangeIndication = Critical
},
// 用户更换滤芯后,发送 ResetCondition 命令
"resetCommand": {
"endpointId": 1,
"clusterId": "0x0071",
"commandId": "0x00"
},
// 重置后的状态
"readAttributes_after_reset": {
"0x0": 100, // Condition = 100%(已重置)
"0x2": 0 // ChangeIndication = OK
}
}
App 中的滤芯管理功能推荐这样实现:
- 首页卡片展示
Condition百分比,用环形进度条直观呈现 - 订阅
ChangeIndication属性变化,当值变为Warning时推送 App 通知 - 当值变为
Critical时,在设备卡片上显示红色警告标识 - 提供「已更换滤芯」按钮,点击后发送
ResetCondition命令 - 如果设备支持
InPlaceIndicator,在按钮点击前先检查滤芯是否已装入
场景二:替换产品购买引导
当滤芯需要更换时,App 读取设备中的替换产品列表,帮助用户快速找到正确的替换滤芯并完成购买。
{
// 场景:App 读取替换产品信息,引导用户购买
"readAttributes": {
"0x2": 2, // ChangeIndication = Critical(需要更换)
"0x5": [ // ReplacementProductList
{
"0": 0, // ProductIdentifierType = UPC
"1": "012345678905"
},
{
"0": 4, // ProductIdentifierType = OEM
"1": "HEPA-H13-PRO-2024"
}
]
}
// App 可以用 UPC 码跳转电商搜索,或用 OEM 编号跳转厂商官网
}
替换产品信息的使用方式:
- 读取
ReplacementProductList,遍历所有条目 - 如果有
UPC/EAN/GTIN类型的条目,可以直接跳转到电商平台搜索对应条码 - 如果有
OEM类型的条目,用厂商编号在品牌官网或授权渠道搜索 - 在 App 的「滤芯更换」页面展示所有可用的产品标识,让用户自行选择购买渠道
同一款滤芯可能同时有 UPC 和 OEM 两种标识,App 应同时展示,适应不同地区用户的购买习惯。