SDM 拦截器
Warning
自定义拦截器及其类型仍属于实验性能力。logger、dp-kit、matter-kit 可直接使用;若自行实现拦截器,请关注后续 API 调整。
interceptors 用来在 SDM 的初始化、下发和事件回调链路中插入统一逻辑,适合处理日志打印、协议转换、结构化数据映射以及条件短路等场景。
什么时候需要拦截器?
✅ 适合使用:
- 需要在
publishDps前后统一处理数据、日志或埋点 - 需要把设备原始上报转换为更适合业务消费的数据结构
- 需要复用
logger、dp-kit、matter-kit - 多个页面都依赖同一套初始化或协议处理逻辑
❌ 不需要使用:
- 只是单个页面的临时展示逻辑
- 只是读取简单 DP 功能点,
useProps / useActions已足够 - 不需要改写 SDM 初始化、下发或事件链路
内置拦截器怎么选?
Info
SDM 默认会在内置链路上挂载 logger。但当你手动配置某个拦截器数组时,该链路会被新数组覆盖;如果仍需要日志,请把 logger 显式放回数组里。
接入方式
Step 1: 选择拦截点
Step 2: 挂载到 SmartDeviceModel
src/devices/index.ts
如果只使用单个内置套件,也可以直接传入 interceptors: dpKit.interceptors 或 interceptors: matterKit.interceptors。
Step 3: 处理多个拦截器的顺序
- 同一链路中的拦截器按数组顺序包裹执行;数组越靠前,越早接收到输入
- 如果某个拦截器不调用
next(...),后续拦截器和底层方法都不会继续执行 - 同时使用
dp-kit和matter-kit处理publishDps时,通常让dp-kit在前、matter-kit在后
自定义拦截器
常用类型
群组场景还有
OnGroupDpDataChangeInterceptor与OnGroupInfoChangeInterceptor,本文聚焦单设备 SDM 的常用链路。
执行模型
Info
拦截器采用三层柯里化写法:ctx => next => data。
常见模式示例
1. 在下发前补充或改写数据
2. 将原始上报转换为业务数据
3. 在特定条件下短路后续链路
进阶阅读
logger
查看默认日志拦截器的接入方式与类型定义
dp-kit
复杂 DP 功能点解析、sendOptions 和结构化 hooks 的完整用法
matter-kit
Matter 照明设备的 DP 映射与组合方式
SmartDeviceModel
interceptors最终挂载在 SmartDeviceModel 上,完整初始化参数见 API 文档