桥接设备基本信息 Cluster(BridgedDeviceBasicInformation)
Cluster ID: 0x0039 |
所在 Endpoint: 桥接子设备的 Endpoint(Endpoint 1+)
BridgedDeviceBasicInformation 是 BasicInformation(0x0028) 的子集版本, 专门用于描述通过 Bridge 接入 Matter 网络的非原生设备 —— 比如 Zigbee 温度传感器、Z-Wave 门锁、蓝牙灯泡等。 这些设备本身不具备 Matter 能力,由 Bridge 代理它们暴露为 Matter 节点。
与 BasicInformation 相比,它去掉了若干仅属于根节点的属性
(如 DataModelRevision、Location、CapabilityMinima),
保留了对子设备有意义的信息(厂商、版本、序列号等),
并强调了 Reachable 属性和 ReachableChanged 事件 —— 这是桥接场景的核心机制。
Matter Bridge 是一个特殊的 Matter 设备:它自身是 Matter 原生节点(Endpoint 0 上有 BasicInformation),
同时把它管理的多个非 Matter 子设备"映射"为不同的 Endpoint。
每个子设备的 Endpoint 上放置 BridgedDeviceBasicInformation Cluster,
而不是 BasicInformation。
例如,一个 Zigbee 网关桥接了 3 个传感器,Matter 网络看到的就是:
- Endpoint 0:Bridge 自身 —
BasicInformation(网关信息) - Endpoint 1:温度传感器 —
BridgedDeviceBasicInformation - Endpoint 2:湿度传感器 —
BridgedDeviceBasicInformation - Endpoint 3:门窗传感器 —
BridgedDeviceBasicInformation
属性总览
BridgedDeviceBasicInformation 共有 17 个属性,是 BasicInformation 的子集。按功能分为五组:
| ID | 名称 | 类型 | 分组 | 说明 |
|---|---|---|---|---|
0x01 |
VendorName | string | 厂商信息 | 子设备厂商名称 |
0x02 |
VendorID | vendor-id | 厂商信息 | 子设备厂商 ID |
0x03 |
ProductName | string | 厂商信息 | 子设备产品名称 |
0x04 |
ProductID | uint16 | 厂商信息 | 子设备产品 ID |
0x05 |
NodeLabel | string | 产品信息 | 用户自定义设备名称(可写) |
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 | 版本信息 | 软件版本号 |
0x0A |
SoftwareVersionString | string | 版本信息 | 软件版本字符串 |
0x11 |
Reachable | bool | 设备状态 | 子设备是否当前可达(核心属性) |
0x14 |
ProductAppearance | struct | 产品外观 | 产品外观描述(材质 + 颜色) |
BridgedDeviceBasicInformation 是 BasicInformation 的严格子集,去掉了以下属性:
DataModelRevision (0x00)— 桥接子设备不直接参与数据模型版本协商Location (0x06)— 子设备的位置由 Bridge 统一管理LocalConfigDisabled (0x10)— 子设备无 Matter 本地配置概念CapabilityMinima (0x13)— 子设备不直接处理 CASE Session 和 SubscriptionSpecificationVersion (0x15)— 子设备不声明 Matter 规范版本MaxPathsPerInvoke (0x16)— 子设备不直接处理 Invoke 请求
这些"根节点级"属性只在 Bridge 自身的 Endpoint 0(BasicInformation)上才有意义。
厂商信息(0x01 – 0x04)
子设备原始厂商和产品标识。注意这里的厂商信息描述的是被桥接的子设备本身,
而不是 Bridge 网关。比如一个 Aqara 网关桥接了一个 Philips Hue 灯泡,
这里的 VendorName 应该是 "Philips" 而不是 "Aqara"。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x01 |
VendorName(厂商名称) | string | 子设备厂商的人类可读名称,最长 32 字符。如 "Philips"、"IKEA" |
0x02 |
VendorID(厂商 ID) | vendor-id | 子设备厂商的编号。如果原始设备不是 Matter 设备(如 Zigbee),Bridge 可能使用厂商自行映射的值 |
0x03 |
ProductName(产品名称) | string | 子设备的产品名称,最长 32 字符。如 "Temperature Sensor" |
0x04 |
ProductID(产品 ID) | uint16 | 子设备的产品编号,由 Bridge 从原始协议信息映射而来 |
对于 Zigbee 设备,Bridge 通常从 Zigbee Basic Cluster 的 ManufacturerName
和 ModelIdentifier 映射到 Matter 的 VendorName 和 ProductName。
对于 Z-Wave 设备,则从 Manufacturer ID 和 Product Type ID 映射。
映射逻辑由 Bridge 厂商实现,不同网关的映射方式可能不同。
产品信息(0x05, 0x0B – 0x0F, 0x12)
子设备的详细产品信息。这些属性大部分是可选的,Bridge 会尽力从原始协议中提取并填充。
其中 NodeLabel 是唯一可写的属性。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x05 |
NodeLabel(设备标签) | string | 用户自定义的设备名称,最长 32 字符。可写 —— 用户在 App 里给桥接子设备重命名时修改的就是这个属性 |
0x0B |
ManufacturingDate(生产日期) | string | 生产日期,ISO 8601 格式。可选 —— 很多低功耗子设备不提供此信息 |
0x0C |
PartNumber(零件编号) | string | 厂商内部的零件/型号编号,最长 32 字符。如 Zigbee 设备的 Model Identifier |
0x0D |
ProductURL(产品链接) | string | 产品页面 URL,最长 256 字符。可选 |
0x0E |
ProductLabel(产品标签) | string | 面向用户的产品简称,最长 64 字符。适合在 App 列表中展示 |
0x0F |
SerialNumber(序列号) | string | 子设备序列号,最长 32 字符。如果原始设备有序列号,Bridge 会填充 |
0x12 |
UniqueID(唯一标识) | string | 子设备全局唯一标识符,最长 32 字符。Bridge 通常使用原始设备的 IEEE 地址或类似唯一 ID 来生成 |
当 Bridge 重启或子设备重新加入时,Controller 需要识别"这还是之前那个设备"。
UniqueID 提供了这种稳定性 —— 即使子设备的 Endpoint 编号在 Bridge 重启后发生变化,
Controller 仍可通过 UniqueID 匹配到同一台物理设备,保持自动化规则和房间分配不变。
版本信息(0x07 – 0x0A)
子设备的硬件和软件版本信息。如果子设备支持 OTA(通过原始协议升级),这些版本号会反映其当前状态。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x07 |
HardwareVersion(硬件版本号) | uint16 | 子设备硬件版本数字编号 |
0x08 |
HardwareVersionString(硬件版本字符串) | string | 人类可读的硬件版本,1–64 字符 |
0x09 |
SoftwareVersion(软件版本号) | uint32 | 子设备固件版本数字编号 |
0x0A |
SoftwareVersionString(软件版本字符串) | string | 人类可读的固件版本,1–64 字符,如 "v1.2.1" |
设备状态(0x11)
桥接场景下最关键的属性 —— 子设备的在线状态。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x11 |
Reachable(可达状态) | bool |
Bridge 是否能与子设备正常通信。true = 子设备在线且响应正常;
false = 子设备离线、信号丢失、电池耗尽或其他原因导致不可达
|
Reachable 是 BridgedDeviceBasicInformation 中最重要的属性,
也是它区别于 BasicInformation 的关键所在。
对于直接接入 Matter 网络的设备,"是否在线"由 Matter 协议栈的通信层判断 —— 能收到回复就是在线。 但桥接设备不同:Controller 与 Bridge 之间的 Matter 通信可能完全正常, 但 Bridge 与子设备之间的 Zigbee/Z-Wave/蓝牙链路可能已经断开。
Reachable 正是用来反映后半段链路(Bridge ↔ 子设备)的状态。
当子设备离线时:
- Bridge 将
Reachable设为false - Bridge 触发
ReachableChanged事件 - 订阅了该事件的 Controller(如手机 App)可以立即在 UI 上标记设备为离线
- 当子设备重新上线时,流程反转 ——
Reachable回到true,再次触发事件
产品外观(0x14)
子设备的物理外观描述。
| ID | 名称 | 类型 | 说明 |
|---|---|---|---|
0x14 |
ProductAppearance(产品外观) | struct | 产品的物理外观描述,包含材质和颜色(见下方结构体和枚举说明) |
ProductAppearance 结构体
描述子设备的物理外观特征,App 可据此展示设备图标配色。
| 字段 | 类型 | 说明 |
|---|---|---|
| Finish | ProductFinishEnum | 产品表面材质(见下方枚举) |
| PrimaryColor | ColorEnum | 产品主要颜色(见下方枚举)。Nullable —— 不适用时为 null |
ProductFinishEnum(表面材质)
ColorEnum(产品颜色)
Command
BridgedDeviceBasicInformation 没有定义任何 Command。
与早期版本的 BasicInformation 不同(它曾有一个可选的 MfgSpecificPing,新版已移除),
BridgedDeviceBasicInformation 纯粹是一个信息展示 Cluster。
所有对子设备的控制操作(开关、调光、读传感器等)通过各自的功能 Cluster 完成,
而不是通过基本信息 Cluster。如果需要检测子设备是否在线,直接读取 Reachable 属性即可。
事件(Events)
BridgedDeviceBasicInformation 定义了 4 个事件,用于通知 Controller 子设备的生命周期和可达状态变化。
| ID | 名称 | 优先级 | 说明 |
|---|---|---|---|
0x00 |
StartUp | Critical |
子设备启动完成。携带 SoftwareVersion 字段,
Controller 可据此检测固件是否在离线期间被升级
|
0x01 |
ShutDown | Critical | 子设备正在关闭。无附加字段 |
0x02 |
Leave | Info | 子设备从 Bridge 中移除(取消配对 / 解绑)。无附加字段 |
0x03 |
ReachableChanged | Info |
子设备可达状态发生变化。携带 ReachableNewValue(bool)字段,
表示变化后的新状态
|
ReachableChanged 是 BridgedDeviceBasicInformation 中最关键的事件,
也是该 Cluster 独有的(BasicInformation 没有这个事件)。
典型触发场景:
- Zigbee 子设备电池耗尽 → Bridge 检测到通信超时 → 触发
ReachableChanged(false) - Z-Wave 门锁信号恢复 → Bridge 重新收到响应 → 触发
ReachableChanged(true) - 蓝牙灯泡被移出 Bridge 蓝牙范围 → 触发
ReachableChanged(false)
App 开发建议:订阅所有桥接子设备 Endpoint 上的 ReachableChanged 事件,
在收到事件时立即更新设备列表的在线状态图标。不要依赖轮询 Reachable 属性 ——
事件驱动更及时、更省资源。
示例数据
一个通过 Zigbee Bridge 接入的温度传感器的 BridgedDeviceBasicInformation Cluster 读取结果:
{
// --- 厂商信息 ---
"0x1": "Aqara", // VendorName
"0x2": 4447, // VendorID = 0x115F(Aqara)
"0x3": "Temperature Sensor", // ProductName
"0x4": 514, // ProductID = 0x0202
// --- 产品信息 ---
"0x5": "客厅温度计", // NodeLabel(用户自定义名称)
"0xB": "2024-08-20", // ManufacturingDate
"0xC": "WSDCGQ11LM", // PartNumber
"0xD": "https://www.aqara.com/sensor", // ProductURL
"0xE": "Aqara Temp Sensor", // ProductLabel
"0xF": "AQ20240820T001", // SerialNumber
"0x12": "aqara-wsdcgq11lm-001", // UniqueID
// --- 版本信息 ---
"0x7": 2, // HardwareVersion = 2
"0x8": "v2.0", // HardwareVersionString
"0x9": 3, // SoftwareVersion = 3
"0xA": "v1.2.1", // SoftwareVersionString
// --- 设备状态 ---
"0x11": true, // Reachable = true(当前可达)
// --- 产品外观 ---
"0x14": { // ProductAppearance
"Finish": 1, // Matte(哑光)
"PrimaryColor": 14 // White(白色)
}
}
当发现一个 Bridge 设备后,App 需要枚举所有桥接子设备并获取其信息:
- 读取 Bridge 的 Endpoint 0 上的
DescriptorCluster 的PartsList,获取所有子设备 Endpoint 列表 - 对每个子设备 Endpoint,读取
BridgedDeviceBasicInformation:ProductName (0x03)+NodeLabel (0x05)作为设备显示名Reachable (0x11)判断在线状态SoftwareVersionString (0x0A)展示固件版本
- 订阅每个子设备 Endpoint 上的
ReachableChanged事件 - 注意:读取时指定的是子设备的 Endpoint(如 1、2、3),不是 Endpoint 0
使用场景
场景一:Zigbee 网关桥接多个子设备
一个常见的 Matter Bridge 场景:Zigbee 网关(如 Aqara Hub M2)同时管理多个 Zigbee 子设备, 通过 Matter 协议将它们暴露给 Apple Home / Google Home / Amazon Alexa。
| Endpoint | 设备类型 | Cluster | VendorName | ProductName | Reachable |
|---|---|---|---|---|---|
| 0 | Bridge(网关自身) | BasicInformation | Aqara | Hub M2 | — |
| 1 | Temperature Sensor | BridgedDeviceBasicInfo | Aqara | Temp Sensor | true |
| 2 | Contact Sensor | BridgedDeviceBasicInfo | Aqara | Door Sensor | true |
| 3 | Smart Plug | BridgedDeviceBasicInfo | IKEA | TRADFRI Plug | false |
注意 Endpoint 3 的 Reachable 为 false ——
这意味着该 IKEA 智能插座当前不可达(可能是信号问题或已断电)。
App 应在设备列表中将其标记为离线状态。
场景二:Reachable 状态监控
App 需要实时追踪桥接子设备的在线状态,以提供准确的 UI 反馈和可靠的自动化执行。
-
初始化:App 连接 Bridge 后,读取所有子设备 Endpoint 的
Reachable属性, 建立初始在线状态表 -
订阅:对每个子设备 Endpoint 订阅
ReachableChanged事件 -
响应:收到
ReachableChanged事件后:- 如果
ReachableNewValue = false:设备列表标灰、禁用控制按钮、通知用户 - 如果
ReachableNewValue = true:恢复设备图标、启用控制按钮
- 如果
-
自动化:在执行包含桥接设备的自动化之前,先检查
Reachable, 避免向不可达设备发送命令导致超时
场景三:设备识别与去重
当 Bridge 重启或固件升级后,子设备的 Endpoint 编号可能发生变化。 App 需要正确识别"这还是之前那台设备",避免出现重复设备或丢失用户配置。
推荐的设备识别优先级:
-
UniqueID (0x12)(最优先):全局唯一且在 Bridge 重启后不变。 Bridge 通常使用子设备的 Zigbee IEEE 地址(如00:15:8d:00:02:3a:4b:5c) 或 Z-Wave DSK 生成 -
SerialNumber (0x0F):如果子设备提供序列号,可作为辅助标识 -
VendorID + ProductID:仅能识别产品型号,不能区分同型号的不同设备。 结合 Endpoint 编号使用时需注意 Endpoint 可能在 Bridge 重启后变化
最佳实践:以 UniqueID 作为主键存储设备信息,
当 Bridge 重启后重新枚举子设备时,用 UniqueID 匹配已有记录,
即使 Endpoint 编号变了也能正确恢复房间归属、设备名称和自动化规则。