基本信息 Cluster(BasicInformation)
Cluster ID: 0x0028 |
所在 Endpoint: 仅在 Endpoint 0(Root Node)
BasicInformation 提供设备的核心元数据 —— 包括厂商信息、产品标识、硬件/软件版本、序列号、设备外观和协议能力。
这是每个 Matter 设备必须实现的 Cluster,且只存在于 Endpoint 0。
它的属性大多是只读的,仅 NodeLabel 和 LocalConfigDisabled 可写。
与大多数功能 Cluster 不同,BasicInformation 只能出现在 Endpoint 0(Root Node Endpoint)。
如果你在 Endpoint 1 上读取这个 Cluster,会得到 UNSUPPORTED_CLUSTER 错误。
在代码中读取设备信息时,始终指定 endpointId = 0。
App 里显示的厂商、型号、固件版本、序列号都来自这个 Cluster。它和 Descriptor(设备类型与 Cluster 列表)一起, 构成了配网后识别一台设备的完整信息,见 概念总览 · 配网后怎么读出设备能力。 想看真实数据长什么样,打开 JSON 解析器 点“设备原始数据”示例。
属性总览
BasicInformation 共有 23 个属性,按功能分为五组。点击属性 ID 可跳转到对应的详细说明。
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x00 |
DataModelRevision | uint16 | 厂商信息 | Data Model 版本号 |
0x01 |
VendorName | string | 厂商信息 | 厂商名称 |
0x02 |
VendorID | vendor-id | 厂商信息 | 厂商 ID(CSA 分配) |
0x03 |
ProductName | string | 厂商信息 | 产品名称 |
0x04 |
ProductID | uint16 | 厂商信息 | 产品 ID(厂商自定义) |
0x05 |
NodeLabel | string | 产品信息 | 用户自定义设备名称(可写) |
0x06 |
Location | string | 产品信息 | ISO 3166-1 alpha-2 国家代码 |
0x0B |
ManufacturingDate | string | 产品信息 | 生产日期(ISO 8601 格式) |
0x0C |
PartNumber | string | 产品信息 | 零件编号 |
0x0D |
ProductURL | string | 产品信息 | 产品页面 URL |
0x0E |
ProductLabel | string | 产品信息 | 产品标签(面向用户的简称) |
0x0F |
SerialNumber | string | 产品信息 | 序列号 |
0x12 |
UniqueID | string | 产品信息 | 设备唯一标识符 |
0x07 |
HardwareVersion | uint16 | 版本信息 | 硬件版本号 |
0x08 |
HardwareVersionString | string | 版本信息 | 硬件版本字符串 |
0x09 |
SoftwareVersion | uint32 | 版本信息 | 软件版本号(用于 OTA 比较) |
0x0A |
SoftwareVersionString | string | 版本信息 | 软件版本字符串(面向用户) |
0x10 |
LocalConfigDisabled | bool | 设备状态 | 是否禁用本地配置(可写) |
0x11 |
Reachable | bool | 设备状态 | 设备是否可达 |
0x13 |
CapabilityMinima | struct | 规格能力 | 设备最小能力声明 |
0x14 |
ProductAppearance | struct | 规格能力 | 产品外观描述(材质 + 颜色) |
0x15 |
SpecificationVersion | uint32 | 规格能力 | 设备实现的 Matter 规范版本 |
0x16 |
MaxPathsPerInvoke | uint16 | 规格能力 | 单次 Invoke 最大路径数 |
厂商信息(0x00 – 0x04)
设备的厂商和产品标识,由 CSA 分配或厂商自行设定。这些属性在设备出厂时就已固定,运行时不可更改。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x00 |
DataModelRevision(数据模型版本) | uint16 | 设备实现的 Data Model 版本号。用于判断设备支持哪些数据模型特性 |
0x01 |
VendorName(厂商名称) | string | 厂商的人类可读名称,最长 32 字符。如 "Acme Corp"、"Espressif" |
0x02 |
VendorID(厂商 ID) | vendor-id | 由 CSA(Connectivity Standards Alliance)统一分配的厂商编号。测试用 VID 为 0xFFF1–0xFFF4 |
0x03 |
ProductName(产品名称) | string | 产品的人类可读名称,最长 32 字符。如 "Smart Light"、"Door Lock Pro" |
0x04 |
ProductID(产品 ID) | uint16 | 由厂商自行分配的产品编号,与 VendorID 组合唯一标识一款产品 |
VendorID 和 ProductID 的组合可以唯一标识一款 Matter 产品。
在配网流程中,Commissioner(如手机 App)通过这两个值匹配正确的设备驱动和 UI 配置。
DCL(Distributed Compliance Ledger)也使用这个组合来查询设备的认证信息。
产品信息(0x05 – 0x06, 0x0B – 0x0F, 0x12)
描述产品的详细信息 —— 用户标签、生产日期、序列号等。 这些属性中大部分是可选的,实际设备可能只实现其中几个。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x05 |
NodeLabel(设备标签) | string | 用户自定义的设备名称,最长 32 字符。可写 —— App 可以通过 Write 操作修改,如改为 "客厅灯" |
0x06 |
Location(位置) | string | 设备所在国家/地区,ISO 3166-1 alpha-2 格式,如 "CN"、"US"。固定 2 字符 |
0x0B |
ManufacturingDate(生产日期) | string | 生产日期,ISO 8601 格式,如 "2025-01-15"。可选属性 |
0x0C |
PartNumber(零件编号) | string | 厂商内部的零件编号,最长 32 字符。可选属性 |
0x0D |
ProductURL(产品链接) | string | 产品页面 URL,最长 256 字符。可选属性。用于引导用户查看产品详情或手册 |
0x0E |
ProductLabel(产品标签) | string | 面向用户的产品简称,最长 64 字符。通常比 ProductName 更短,适合在 UI 上展示 |
0x0F |
SerialNumber(序列号) | string | 设备序列号,最长 32 字符。每台设备唯一 |
0x12 |
UniqueID(唯一标识) | string | 设备全局唯一标识符,最长 32 字符。即使恢复出厂设置也不会变化,可用于设备去重 |
BasicInformation 的 23 个属性中,只有 NodeLabel 和 LocalConfigDisabled 支持 Write 操作。
其中 NodeLabel 是最常用的 —— 用户在 App 里重命名设备时,实际就是修改这个属性。
写入时需要通过 ACL 权限检查,默认需要 Manage 级别权限。
版本信息(0x07 – 0x0A)
设备的硬件和软件版本信息。OTA 升级流程依赖这些版本号来判断是否需要更新。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x07 |
HardwareVersion(硬件版本号) | uint16 | 硬件版本数字编号,厂商自定义。用于区分不同硬件批次 |
0x08 |
HardwareVersionString(硬件版本字符串) | string | 人类可读的硬件版本,1–64 字符,如 "v1.0"、"Rev B" |
0x09 |
SoftwareVersion(软件版本号) | uint32 | 固件版本数字编号。OTA Provider 用这个值与新固件的版本号比较,决定是否推送更新。值越大版本越新 |
0x0A |
SoftwareVersionString(软件版本字符串) | string | 人类可读的软件版本,1–64 字符,如 "v2.0.1"。展示给用户看的版本号 |
每个版本都有两个属性:数字编号(Version)和字符串(VersionString)。
数字编号用于程序逻辑比较(如 OTA 版本判断),字符串用于 UI 展示。
App 展示固件版本时应使用 SoftwareVersionString;
判断是否需要升级时应比较 SoftwareVersion 的数值大小。
设备状态(0x10 – 0x11)
描述设备当前的运行状态和配置模式。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x10 |
LocalConfigDisabled(禁用本地配置) | bool | 可写。设为 true 时,设备应禁止通过物理按钮等本地方式修改配置。默认 false |
0x11 |
Reachable(可达状态) | bool | 设备是否当前可达。对于 Bridged 设备尤其重要 —— Bridge 通过此属性告知 Controller 子设备的在线状态。直连设备通常始终为 true |
对于直接连入 Matter Fabric 的设备,Reachable 基本等同于 "只要能通信就是 true"。
但对于通过 Bridge 接入的子设备(如 Zigbee 灯泡通过 Matter Bridge 暴露),Reachable 反映的是
Bridge 到子设备之间的连接状态。当子设备离线时,Bridge 会将 Reachable 设为 false
并触发 ReachableChanged 事件。
规格能力(0x13 – 0x16)
描述设备支持的协议能力和产品外观。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x13 |
CapabilityMinima(最小能力) | struct | 设备声明的最小协议能力(见下方结构体说明) |
0x14 |
ProductAppearance(产品外观) | struct | 产品的物理外观描述:表面材质和主要颜色(见下方结构体和枚举说明) |
0x15 |
SpecificationVersion(规范版本) | uint32 | 设备实现的 Matter 规范版本。编码为 Major.Minor.Patch.Reserved,每段 8 位。例如 0x01010000 = Matter 1.1.0 |
0x16 |
MaxPathsPerInvoke(单次调用最大路径数) | uint16 | 单次 Invoke Request 中允许携带的最大 Command 路径数。至少为 1 |
CapabilityMinima 结构体
描述设备的最小协议处理能力,Controller 可据此调整交互策略。
| 字段 | 类型 | 说明 |
|---|---|---|
| CaseSessionsPerFabric | uint16 | 每个 Fabric 支持的最大并发 CASE Session 数量。至少为 3 |
| SubscriptionsPerFabric | uint16 | 每个 Fabric 支持的最大并发 Subscription 数量。至少为 3 |
如果 Controller 需要为同一台设备建立多个 CASE Session(如同时做 OTA 和控制),
应先检查 CaseSessionsPerFabric 确认设备是否支持。
SubscriptionsPerFabric 同理 —— 如果 App 需要订阅多组属性变更通知,
需要确保总订阅数不超过设备声明的上限。
ProductAppearance 结构体
描述产品的物理外观特征,用于在 App 中展示设备图标或配色。
| 字段 | 类型 | 说明 |
|---|---|---|
| Finish | ProductFinishEnum | 产品表面材质(见下方枚举) |
| PrimaryColor | ColorEnum | 产品主要颜色(见下方枚举)。Nullable —— 不适用时为 null |
ProductFinishEnum(表面材质)
ColorEnum(产品颜色)
Command
早期版本的 BasicInformation 有一个可选的 Command;较新版本(本站对照 v1.6)中这个 Cluster 已经没有任何命令:
| ID | 名称 | 方向 | 必选 | 说明 |
|---|---|---|---|---|
0x00 |
MfgSpecificPing 新版已移除 | Client → Server | 可选 | 厂商自定义的 Ping 命令,用于检测设备响应。无参数,无返回值 |
这个命令只出现在早期的定义里,而且是可选的,实际上很少有设备实现;较新版本的 Matter 已经没有它。
如果需要检测设备是否在线,通常直接读取任意属性(如 SoftwareVersion)即可 ——
能读成功就说明设备在线。
示例数据
一个典型 Matter 设备的 BasicInformation Cluster 读取结果:
{
// --- 厂商信息 ---
"0x0": 17, // DataModelRevision = 17
"0x1": "Acme Corp", // VendorName
"0x2": 65521, // VendorID = 0xFFF1(测试厂商)
"0x3": "Smart Light", // ProductName
"0x4": 32769, // ProductID = 0x8001
// --- 产品信息 ---
"0x5": "Living Room Light", // NodeLabel(用户自定义名称)
"0x6": "CN", // Location = 中国
"0xB": "2025-01-15", // ManufacturingDate
"0xC": "ABC-1234", // PartNumber
"0xD": "https://example.com/product", // ProductURL
"0xE": "Smart Light Pro", // ProductLabel
"0xF": "SN20250115001", // SerialNumber
"0x12": "a1b2c3d4e5f6", // UniqueID
// --- 版本信息 ---
"0x7": 1, // HardwareVersion = 1
"0x8": "v1.0", // HardwareVersionString
"0x9": 2, // SoftwareVersion = 2
"0xA": "v2.0.1", // SoftwareVersionString
// --- 设备状态 ---
"0x10": false, // LocalConfigDisabled = false(允许本地配置)
"0x11": true, // Reachable = true(设备可达)
// --- 规格能力 ---
"0x13": { // CapabilityMinima
"CaseSessionsPerFabric": 3,
"SubscriptionsPerFabric": 3
},
"0x14": { // ProductAppearance
"Finish": 1, // Matte(哑光)
"PrimaryColor": 7 // Gray(灰色)
},
"0x15": 65792, // SpecificationVersion = 0x01010000 → 1.1.0.0
"0x16": 1 // MaxPathsPerInvoke = 1
}
App 首次连接到设备后,通常会读取 BasicInformation 来展示设备详情页:
- 读取
VendorName (0x01)+ProductName (0x03)作为设备标题 - 读取
NodeLabel (0x05)展示用户自定义名称(如果有) - 读取
SoftwareVersionString (0x0A)展示当前固件版本 - 读取
SerialNumber (0x0F)用于售后或设备管理 - 读取
Reachable (0x11)判断设备在线状态(Bridged 设备)
注意所有读取都要指定 endpointId = 0,因为 BasicInformation 只在 Root Node 上。