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 组合示例

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 才会出现此属性。

如何理解 Condition 值

这个百分比由设备固件根据使用时长、风量、颗粒物浓度等因素综合计算。 不同厂商的算法可能不同,但对 App 开发者来说只需关注这个 0-100 的值即可。 建议在 App 中用进度条或环形图展示,低于 20% 时高亮提醒。

DegradationDirection(劣化方向)

指示 Condition 值的劣化方向 —— 即数值变大还是变小代表滤芯状态变差。 需要设备声明 WAR Feature 才会出现此属性。

DegradationDirectionEnum 枚举值

0
Up 数值越高表示越差(如污染指数从 0 升到 100)
1
Down 数值越低表示越差(如剩余寿命从 100 降到 0)
为什么需要劣化方向

不同厂商对 Condition 值的定义可能相反:有的用「剩余百分比」(越低越差),有的用「污染程度」(越高越差)。 DegradationDirection 让 App 能正确解读 Condition 值,无论厂商如何定义。

ChangeIndication(更换指示)

滤芯当前的更换状态。这是一个必选属性,即使设备不支持 Condition 百分比,也必须报告更换指示。

ChangeIndicationEnum 枚举值

0
OK 滤芯状态正常,无需更换
1
Warning 滤芯开始老化,建议近期更换
2
Critical 滤芯已严重老化,必须立即更换

InPlaceIndicator(滤芯安装状态)

布尔值,表示滤芯是否已物理安装到设备中。true 表示滤芯在位,false 表示滤芯未安装或已取出。 这是一个可选属性,取决于设备是否有物理检测传感器。

App 端提示

当 InPlaceIndicator = false 时,App 应提示用户「滤芯未安装」并禁止开机运行。 用户更换滤芯的流程通常是:取出旧滤芯(false)→ 装入新滤芯(true)→ 发送 ResetCondition 命令。

LastChangedTime(上次更换时间)

上次更换滤芯的 UTC 时间戳(epoch 秒数)。可以为 null,表示设备未记录过更换时间。 当用户发送 ResetCondition 命令后,设备会将此属性更新为当前时间。

ReplacementProductList(替换产品列表)

推荐的替换产品列表,每个条目包含产品标识类型和标识值。 需要设备声明 REP Feature 才会出现此属性。 列表可以包含多个条目,用不同的编码体系标识同一款替换滤芯。

ReplacementProductStruct 结构

字段 类型 说明
ProductIdentifierType enum8 产品标识编码体系
ProductIdentifierValue string 产品标识值(条码号、编号等)

ProductIdentifierTypeEnum 枚举值

0
UPC 通用产品代码(北美 12 位条码)
1
GTIN8 全球贸易项目代码(8 位短条码)
2
EAN 欧洲商品编码(13 位国际条码)
3
GTIN14 全球贸易项目代码(14 位物流条码)
4
OEM 厂商自定义编号(如型号名称)

命令(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 中的滤芯管理功能推荐这样实现:

  1. 首页卡片展示 Condition 百分比,用环形进度条直观呈现
  2. 订阅 ChangeIndication 属性变化,当值变为 Warning 时推送 App 通知
  3. 当值变为 Critical 时,在设备卡片上显示红色警告标识
  4. 提供「已更换滤芯」按钮,点击后发送 ResetCondition 命令
  5. 如果设备支持 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 编号跳转厂商官网
}
开发建议

替换产品信息的使用方式:

  1. 读取 ReplacementProductList,遍历所有条目
  2. 如果有 UPC / EAN / GTIN 类型的条目,可以直接跳转到电商平台搜索对应条码
  3. 如果有 OEM 类型的条目,用厂商编号在品牌官网或授权渠道搜索
  4. 在 App 的「滤芯更换」页面展示所有可用的产品标识,让用户自行选择购买渠道

同一款滤芯可能同时有 UPC 和 OEM 两种标识,App 应同时展示,适应不同地区用户的购买习惯。