桥接设备基本信息 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 事件 —— 这是桥接场景的核心机制。

Bridge 架构概念

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 产品外观 产品外观描述(材质 + 颜色)
与 BasicInformation 的区别

BridgedDeviceBasicInformation 是 BasicInformation 的严格子集,去掉了以下属性:

  • DataModelRevision (0x00) — 桥接子设备不直接参与数据模型版本协商
  • Location (0x06) — 子设备的位置由 Bridge 统一管理
  • LocalConfigDisabled (0x10) — 子设备无 Matter 本地配置概念
  • CapabilityMinima (0x13) — 子设备不直接处理 CASE Session 和 Subscription
  • SpecificationVersion (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 从原始协议信息映射而来
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 来生成
UniqueID 对桥接设备尤为重要

当 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 —— 桥接场景的核心机制

Reachable 是 BridgedDeviceBasicInformation 中最重要的属性, 也是它区别于 BasicInformation 的关键所在。

对于直接接入 Matter 网络的设备,"是否在线"由 Matter 协议栈的通信层判断 —— 能收到回复就是在线。 但桥接设备不同:Controller 与 Bridge 之间的 Matter 通信可能完全正常, 但 Bridge 与子设备之间的 Zigbee/Z-Wave/蓝牙链路可能已经断开。

Reachable 正是用来反映后半段链路(Bridge ↔ 子设备)的状态。 当子设备离线时:

  1. Bridge 将 Reachable 设为 false
  2. Bridge 触发 ReachableChanged 事件
  3. 订阅了该事件的 Controller(如手机 App)可以立即在 UI 上标记设备为离线
  4. 当子设备重新上线时,流程反转 —— Reachable 回到 true,再次触发事件

产品外观(0x14)

子设备的物理外观描述。

ID 名称 类型 说明
0x14 ProductAppearance(产品外观) struct 产品的物理外观描述,包含材质和颜色(见下方结构体和枚举说明)

ProductAppearance 结构体

描述子设备的物理外观特征,App 可据此展示设备图标配色。

字段 类型 说明
Finish ProductFinishEnum 产品表面材质(见下方枚举)
PrimaryColor ColorEnum 产品主要颜色(见下方枚举)。Nullable —— 不适用时为 null

ProductFinishEnum(表面材质)

0
Other 其他
1
Matte 哑光
2
Satin 缎面
3
Polished 抛光
4
Rugged 粗糙(工业风)
5
Fabric 织物

ColorEnum(产品颜色)

0
Black 黑色
1
Navy 藏青
2
Green 绿色
3
Teal 青色
4
Maroon 栗色
5
Purple 紫色
6
Olive 橄榄色
7
Gray 灰色
8
Blue 蓝色
9
Lime 青柠色
10
Aqua 水蓝色
11
Red 红色
12
Fuchsia 品红色
13
Yellow 黄色
14
White 白色
15
Nickel 镍色
16
Chrome 铬色
17
Brass 黄铜色
18
Copper 铜色
19
Silver 银色
20
Gold 金色

Command

BridgedDeviceBasicInformation 没有定义任何 Command。

为什么没有 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 —— 桥接设备必须关注的事件

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 需要枚举所有桥接子设备并获取其信息:

  1. 读取 Bridge 的 Endpoint 0 上的 Descriptor Cluster 的 PartsList,获取所有子设备 Endpoint 列表
  2. 对每个子设备 Endpoint,读取 BridgedDeviceBasicInformation:
    • ProductName (0x03) + NodeLabel (0x05) 作为设备显示名
    • Reachable (0x11) 判断在线状态
    • SoftwareVersionString (0x0A) 展示固件版本
  3. 订阅每个子设备 Endpoint 上的 ReachableChanged 事件
  4. 注意:读取时指定的是子设备的 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 反馈和可靠的自动化执行。

监控流程
  1. 初始化:App 连接 Bridge 后,读取所有子设备 Endpoint 的 Reachable 属性, 建立初始在线状态表
  2. 订阅:对每个子设备 Endpoint 订阅 ReachableChanged 事件
  3. 响应:收到 ReachableChanged 事件后:
    • 如果 ReachableNewValue = false:设备列表标灰、禁用控制按钮、通知用户
    • 如果 ReachableNewValue = true:恢复设备图标、启用控制按钮
  4. 自动化:在执行包含桥接设备的自动化之前,先检查 Reachable, 避免向不可达设备发送命令导致超时

场景三:设备识别与去重

当 Bridge 重启或固件升级后,子设备的 Endpoint 编号可能发生变化。 App 需要正确识别"这还是之前那台设备",避免出现重复设备或丢失用户配置。

识别策略

推荐的设备识别优先级:

  1. UniqueID (0x12)(最优先):全局唯一且在 Bridge 重启后不变。 Bridge 通常使用子设备的 Zigbee IEEE 地址(如 00:15:8d:00:02:3a:4b:5c) 或 Z-Wave DSK 生成
  2. SerialNumber (0x0F):如果子设备提供序列号,可作为辅助标识
  3. VendorID + ProductID:仅能识别产品型号,不能区分同型号的不同设备。 结合 Endpoint 编号使用时需注意 Endpoint 可能在 Bridge 重启后变化

最佳实践:以 UniqueID 作为主键存储设备信息, 当 Bridge 重启后重新枚举子设备时,用 UniqueID 匹配已有记录, 即使 Endpoint 编号变了也能正确恢复房间归属、设备名称和自动化规则。