概念总览
- Matter 用四层结构描述一个设备能做什么
- Node、Endpoint、Cluster、Attribute、Command 分别是什么意思
- 看到 "Endpoint 1 / Cluster 0x0101 / Attribute 0x0 = 0x01" 时,能直接翻译成人话
- 不管你是 App 开发、固件工程、测试还是产品,都能看懂设备数据
这一章讲清楚 Matter 协议的核心概念,不需要特定技术背景,每个人都能看懂。 读完之后,你看到 "Endpoint 1 / Cluster 0x0101 / Attribute 0x0 = 0x01" 这样的数据,就能直接知道它在说什么。
什么是 Matter
Matter 是一个智能家居统一标准协议,由 Apple、Google、Amazon、三星等公司联合制定(组织叫 CSA,Connectivity Standards Alliance)。
在 Matter 出现之前,同一个智能灯泡想同时被 HomeKit、Google Home、Alexa 控制,厂商得分别接入三套完全不同的协议。 Matter 的目标很简单:定义一套标准的数据模型和通信方式,所有平台都认。
打个比方:Matter 就像 USB-C 接口。以前每家手机一个充电口,现在统一成 USB-C,线和设备都可以互换。 Matter 做的事一样 —— 给智能家居设备定义了一个"统一接口"。
从技术上看,Matter 是一个应用层协议:它只定义上面几层(设备能做什么、怎么交互、怎么加密),下面直接跑在现有的 Wi-Fi、Thread、以太网这些 IP 网络上;蓝牙只在配网阶段临时用一下。
想知道 Matter 和 Zigbee、Z-Wave、蓝牙 Mesh 这些协议各管哪几层、有什么异同,见 协议对比。 设备该走 Thread 还是 Wi-Fi、家里要不要网关,见 Thread 还是 Wi-Fi 和 要不要网关。
Matter 的四层数据模型
Matter 把一个设备的所有能力组织成四个层次。这是 Matter 最核心的概念,理解了它就理解了大半。
想象一栋智能大楼 —— 这个类比能帮你一下子看懂整个结构:
如果觉得大楼不够直观,也可以想成你的手机:Node = 手机本身,Endpoint = 手机里的一个 App,Cluster = App 里的一个功能模块,Attribute = 能看到的信息(电量 80%),Command = 能执行的操作(拍照、发消息)。
下面逐层展开说明。
Node(设备节点)
Node 就是网络中的一个物理设备。一个门锁是一个 Node,一个灯泡也是一个 Node。
类比:一栋智能大楼。大楼本身就是一个 Node,里面有不同的房间,每个房间装了不同的设备系统。
一把 Matter 门锁就是一个 Node。它通过 WiFi 或 Thread 网络加入 Matter 网络后,控制端(比如手机 App)就能发现并操作它。
Endpoint(端点)
一个 Node 上可以有多个 Endpoint,每个 Endpoint 是一个独立的功能区域。
类比:大楼里的不同房间。物业办公室管大楼本身的事务(水电、维修),住户房间才是实际生活的地方。Endpoint 也是这样,不同的端点承担不同的职责。
Matter 规定了两类 Endpoint:
Endpoint 0 是每个 Matter 设备都必须有的,里面放的是设备的"身份证"和"系统设置"。日常工作中主要打交道的是 Endpoint 1(功能端点),门锁的开/关锁、用户管理都在那里。
Cluster(簇)
Cluster 是 Matter 数据模型里最关键的概念。一个 Cluster 定义了一组相关的能力 —— 包括它有哪些状态(Attribute)和支持哪些操作(Command)。
类比:房间里的一套设备系统。比如房间里有灯光系统、空调系统、门锁系统,每套系统管一类事情,有自己的状态和操作方式。Cluster 就是这样的一套功能系统。
每个 Cluster 都有一个标准 ID(十六进制),由 CSA 统一分配:
| Cluster ID | 名称 | 是什么 |
|---|---|---|
0x0101 |
DoorLock | 门锁系统 —— 开锁、关锁、管理用户 |
0x002F |
PowerSource | 供电系统 —— 电池电量、充电状态 |
0x0006 |
OnOff | 开关系统 —— 开、关、切换 |
0x0028 |
BasicInformation | 铭牌信息 —— 厂商、产品名、固件版本 |
0x001D |
Descriptor | 目录清单 —— 列出端点里有哪些 Cluster |
一把 Matter 门锁的 Endpoint 1 上通常有这些 Cluster:
- DoorLock (0x0101) —— 核心功能:开锁、关锁、管理用户和凭据
- PowerSource (0x002F) —— 电池信息:电量、充电状态
- Identify (0x0003) —— 标识功能:让门锁闪灯或响铃,方便用户找到它
Attribute(属性)
Attribute 是 Cluster 里的状态信息,每个 Attribute 也有一个 ID。可以理解为设备仪表盘上的一个读数 —— 你可以去看它,有些还可以调整。
有些 Attribute 是只读的(比如锁当前的状态),有些可以写入(比如设置自动回锁时间)。
| Attribute ID | 所属 Cluster | 名称 | 含义 |
|---|---|---|---|
0x0 |
DoorLock | LockState | 门锁当前状态(锁了没有?) |
0x23 |
DoorLock | AutoRelockTime | 自动回锁时间(开门后多久自动锁上?) |
0xC |
PowerSource | BatPercentRemaining | 电池剩余电量(还剩多少电?) |
Command(命令)
Command 是 Cluster 支持的操作,就像遥控器上的按钮 —— 按下去,设备就执行对应的动作。
| Command ID | 所属 Cluster | 名称 | 含义 |
|---|---|---|---|
0x0 |
DoorLock | LockDoor | 上锁(按下"锁门"按钮) |
0x1 |
DoorLock | UnlockDoor | 解锁(按下"开门"按钮) |
0x26 |
DoorLock | SetUser | 添加/修改用户(录入新住户信息) |
完整示例:门锁的 Matter 数据结构
把上面的概念串起来,一个门锁设备的 Matter 数据结构长这样:
Node(门锁设备 —— 整栋大楼)
├── Endpoint 0(管理端点 —— 物业办公室)
│ ├── BasicInformation (0x0028) → 厂商名、产品名、序列号
│ ├── Descriptor (0x001D) → 列出本端点有哪些 Cluster
│ └── NetworkCommissioning (0x0031)→ WiFi/Thread 网络配置
│
└── Endpoint 1(功能端点 —— 住户房间)
├── DoorLock (0x0101) → 门锁系统
│ ├── Attribute 0x0: LockState = 0x01(已锁定)
│ ├── Attribute 0x23: AutoRelockTime = 30(30秒自动回锁)
│ ├── Command 0x0: LockDoor → 上锁
│ └── Command 0x1: UnlockDoor → 解锁
│
├── PowerSource (0x002F) → 供电系统
│ ├── Attribute 0x0: Status = 1(Active)
│ └── Attribute 0xC: BatPercent = 180(实际 90%)
│
└── Identify (0x0003) → 定位系统
└── Command 0x0: Identify → 闪灯/响铃
当有人说 "Endpoint 1 / Cluster 0x0101 / Attribute 0x0 的值是 0x01",翻译成人话就是:功能端点上的门锁模块,当前锁状态是"已锁定"。
Device Type(设备类型)
Device Type 规定了一种设备必须支持哪些 Cluster。它就像一份资质清单。
比如 "DoorLock" 这个 Device Type 要求设备至少实现 DoorLock Cluster、Identify Cluster 等。 "Dimmable Light" 则要求实现 OnOff Cluster 和 LevelControl Cluster。
类比:就像酒店要被评为"五星级",就必须有健身房、泳池、24 小时前台等设施。设备要声称自己是"门锁"类型,就必须具备 Matter 规定的那些能力。
每种设备类型都有一个编号,例如门锁是 0x000A、可调光灯是 0x0101、每台设备都有的根节点是 0x0016。
设备在每个端点的 Descriptor.DeviceTypeList 里声明自己是什么类型,一个端点可以同时声明多个(比如“门锁 + 电源”)。
全部编号见 Matter ID 查询 · 设备类型速查。
同样声明为门锁 0x000A,一把支持指纹和用户管理,另一把只支持密码,这完全合规。设备类型只规定必须有的部分,
可选能力要看每个 Cluster 的 FeatureMap、AttributeList、AcceptedCommandList,见下文
配网后怎么读出设备能力。
Fabric(信任域)
Fabric 是 Matter 网络中的信任域。同一个 Fabric 里的设备互相信任,可以直接通信和控制。
类比:公司内网。你的电脑连上公司 VPN 就在一个信任域里,可以访问内部服务。不在 VPN 里的人访问不了。
一个设备可以同时加入多个 Fabric。比如一个门锁可以同时被 Apple Home 和 Google Home 控制 —— 它在两个 Fabric 里各有一个身份。
Commissioner 与配网
把设备加入 Fabric 的过程叫做 Commissioning(配网)。执行这个操作的设备叫 Commissioner。
配网流程简单来说:
- Commissioner(通常是手机 App)扫描设备的二维码或输入配对码
- 通过蓝牙 BLE 发现设备(设备还没进网络,只能靠蓝牙沟通)
- 通过 PASE(Passcode-Authenticated Session Establishment)建立安全会话
- Commissioner 给设备分配证书(NOC),设备正式加入 Fabric
- 把 Wi-Fi 或 Thread 的网络凭据发给设备,让它接入家庭网络
- 配网完成后,手机 App 或智能音箱作为 Controller 就可以读取 Attribute、发送 Command 来控制设备了
Commissioner 是配网时的角色(负责把设备拉进来),Controller 是日常控制的角色。手机 App 通常同时扮演这两个角色。
配网后:怎么知道设备是什么、能做什么
配网只是把设备拉进网络。接下来 App 要回答两个问题:这是什么设备?它支持哪些功能? Matter 没有单独的“设备说明书”文件,答案就在几个标准字段里。每台设备都必须提供这些字段,任何 Controller 都能读。
| 想知道 | 读哪个字段 | 在哪里(Cluster / 属性) | 门锁的例子 |
|---|---|---|---|
| 设备有哪些端点 | Descriptor.PartsList | 端点 0 · 0x001D / 0x0003 | [1] |
| 每个端点是什么设备 | Descriptor.DeviceTypeList | 每个端点 · 0x001D / 0x0000 | 0x000A 门锁 + 0x0011 电源 |
| 每个端点有哪些功能模块 | Descriptor.ServerList | 每个端点 · 0x001D / 0x0001 | 0x0003 0x001D 0x002F 0x0101 |
| 某个模块开了哪些可选功能 | FeatureMap(全局属性) | 每个 Cluster · 0xFFFC | 389 = 密码 + 指纹 + 远程密码 + 用户管理 |
| 能对它发哪些命令 | AcceptedCommandList(全局属性) | 每个 Cluster · 0xFFF9 | LockDoor、UnlockDoor、SetUser… |
| 实现了哪些属性 | AttributeList(全局属性) | 每个 Cluster · 0xFFFB | LockState、AutoRelockTime… |
| 厂商、型号、版本、序列号 | BasicInformation | 端点 0 · 0x0028 | VendorName、ProductName、SoftwareVersionString |
Controller 的标准读取顺序:
- 读端点 0 的 PartsList,拿到所有端点编号
- 逐个端点读 DeviceTypeList,知道每个端点“是什么”
- 逐个端点读 ServerList,知道每个端点“有哪些 Cluster”
- 逐个 Cluster 读 FeatureMap / AcceptedCommandList / AttributeList,知道具体“能做什么”
- 读端点 0 的 BasicInformation,拿到厂商、型号、固件版本
能不能直接拿到设备的原始功能集?
能。Matter 支持通配读取(Wildcard Read):端点、Cluster、属性都填“全部”,一次把设备上所有属性读回来,上表里的字段全在里面。 这就是一台设备最原始、最完整的能力描述,各家 App 显示的设备信息都是从这里解读出来的。
- chip-tool(官方命令行工具):
chip-tool any read-by-id 0xFFFFFFFF 0xFFFFFFFF <节点ID> 0xFFFF,三个 F 分别代表全部 Cluster、全部属性、全部端点 - 只读某一项:
chip-tool descriptor read device-type-list <节点ID> 1读端点 1 的设备类型 - 各平台 SDK:Android、iOS、Web 都有对应接口,见 SDK 指南 · 读取设备类型与能力
- Home Assistant:设备页面 → 下载诊断数据,其中
attributes就是通配读取的结果,键名是端点/Cluster/属性(十进制)
打开 JSON 解析器,点“设备原始数据”示例再点解析。它会把一台门锁的通配读取结果整理成设备画像, 并在每一项旁边标出它来自哪个字段。遇到不认识的 ID,用 Matter ID 查询 查。
ID 编号规范
Matter 中几乎所有东西都用十六进制 ID 标识。了解编号范围有助于你快速判断一个 ID 的含义。
规范里 Cluster、属性、命令、事件、设备类型的 ID 都是 32 位:前 16 位是厂商前缀,后 16 位是编号。
标准定义的前缀都是 0x0000,平时省略不写,所以门锁 Cluster 完整写法是 0x0000_0101,简写成 0x0101。
厂商私有扩展必须带上自己的厂商 ID,例如 0x1234_FC00。
| 类型 | 编号范围(后 16 位) | 说明 |
|---|---|---|
| 标准 Cluster | 0x0000 ~ 0x7FFF |
CSA 官方定义,前缀固定为 0x0000 |
| 厂商自定义 Cluster | 0xFC00 ~ 0xFFFE |
前缀必须是厂商 ID,完整写法如 0x1234_FC00 |
| 标准 Attribute | 0x0000 ~ 0x4FFF |
Cluster 内的标准属性 |
| 全局 Attribute | 0xF000 ~ 0xFFFE |
每个 Cluster 都有:FeatureMap 0xFFFC、AttributeList 0xFFFB、AcceptedCommandList 0xFFF9、ClusterRevision 0xFFFD 等 |
| 标准 Command | 0x00 ~ 0xFF |
Cluster 内的标准命令 |
| 标准 Device Type | 0x0000 ~ 0xBFFF |
设备类型,如 0x000A 门锁、0x0016 根节点 |
拿到一个不认识的 ID?用 Matter ID 查询 直接查,十六进制、十进制都能认。
注意同一个数字在不同字段里含义不同:0x0101 作为 Cluster 是门锁,作为设备类型却是可调光灯。
常见 Cluster ID 速查
| ID | Cluster | 用途 |
|---|---|---|
0x001D | Descriptor | 描述端点包含的 Cluster 列表 |
0x0028 | BasicInformation | 设备基本信息(厂商、产品名、固件版本) |
0x002F | PowerSource | 电源/电池状态 |
0x0031 | NetworkCommissioning | 网络配置(WiFi/Thread) |
0x0003 | Identify | 设备标识(闪灯/响铃) |
0x0006 | OnOff | 开关控制 |
0x0008 | LevelControl | 亮度/级别控制 |
0x0101 | DoorLock | 门锁控制 |
0x0300 | ColorControl | 颜色控制(色温、HSV) |
Matter 完整规范由 CSA 发布,成员可在 csa-iot.org 下载。开源实现在 connectedhomeip 仓库,其中 src/app/zap-templates/zcl/data-model/chip/*.xml 包含所有标准 Cluster 定义。