Matter ASR 平台桥接示例(Bridge App)构建、配网与动态端点实战指南

发布时间:2026/9/18 17:06:49
Matter ASR 平台桥接示例(Bridge App)构建、配网与动态端点实战指南 Matter ASR 平台桥接示例Bridge App构建、配网与动态端点实战指南【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip本指南以 connectedhomeip 仓库中的 examples/bridge-app/asr/README.md 为核心系统讲解 Matter Bridge 应用在 ASR 平台上的实现原理与完整实操流程。你将掌握桥接设备如何通过动态端点Dynamic Endpoint挂载非 Matter 设备、如何用build_examples.py构建固件、如何联合 chip-tool 与 DOGO 工具完成配网、ACL 授权与 Binding 绑定以及如何通过实体按键验证桥接的灯控链路。概述什么是 Matter Bridge 与动态端点Bridge桥接是 Matter 中一种典型的聚合型设备形态一个 Matter 节点桥同时承载多个子设备把这些子设备以Endpoint端点的形式暴露给整个 Matter 网络使得子设备可以被统一配网、统一控制。本示例是一个原型应用prototype application演示了动态端点dynamic endpoint机制结合设备配网commissioning与集群控制cluster control的完整流程将 4 个非 CHIP非 Matter设备作为端点添加到桥Matter 设备上。从 examples/bridge-app/asr/subdevice/subdevice_test.cpp 可以看到本示例添加了 4 个支持On/Off 集群的灯设备作为端点Light1位于端点 3Light2位于端点 4Light3位于端点 5Light4位于端点 6也就是说该桥接节点自身的端点布局为Endpoint设备类型说明0根节点Root Node承载基础与网络配网集群1聚合节点Aggregate Node / Bridge桥的本身2固定占位端点运行时被禁用详见下文3 ~ 6桥接灯LO_ON_OFF_LIGHT BRIDGED_NODE动态添加的 4 盏灯其中端点 3~6 的映射关系在源码中有明确注释Add lights 1..4 -- will be mapped to ZCL endpoints 3..6见 subdevice_test.cpp。目录结构与源码模块ASR 平台的 Bridge 示例位于examples/bridge-app/asr/其核心源码构成如下examples/bridge-app/asr/ ├── include/ # AppConfig.h / AppTask.h / CHIPProjectConfig.h / DeviceCallbacks.h ├── src/ │ ├── AppTask.cpp # 应用任务入口初始化 Matter 栈、服务器与网络配网实例 │ ├── DeviceCallbacks.cpp # 设备事件IPv4/IPv6 连接、MDNS 等回调 │ └── main.cpp # 主函数初始化 ASR 平台并启动 FreeRTOS 调度器 ├── subdevice/ │ ├── SubDevice.h/.cpp # 子设备抽象类状态、可达性、名称/位置与变更回调 │ ├── SubDeviceManager.cpp # 动态端点增删、外部属性读写回调与状态上报 │ └── subdevice_test.cpp # 添加 Light1~4 到端点 3~6 的测试例程 ├── BUILD.gn # GN 构建脚本产出 chip-asr-bridge-example.out ├── args.gni / cfg.gni # 构建参数 └── README.md # 本指南对应的官方说明子设备抽象SubDevice 类每个桥接子设备都由 SubDevice 类建模。该类维护了子设备的核心状态开关状态mStatekState_On/kState_Off通过IsOn()/SetOnOff()访问可达性mReachable表示该子设备当前是否在线通过IsReachable()/SetReachable()访问名称与位置mName/mLocation各 32 字节缓冲对应 Bridged Device Basic Information 集群中的 NodeLabel 属性端点号mEndpointId子设备被分配到的动态端点号变更回调mChanged_CB状态、可达性、位置、名称任一变化时触发由Changed_t掩码kChanged_Reachable/kChanged_State/kChanged_Location/kChanged_Name标识变化类型。在 SubDevice.cpp 中可以看到当SetOnOff(true)时除了更新内部状态并打印SubDevice[xxx]: ON日志外在启用了CONFIG_ENABLE_ASR_APP_MESH的情况下还会把开关命令下发给 ASR 应用 Mesh 层app_mesh_control_light/app_mesh_control_fan实现真正的物理设备控制。动态端点管理SubDeviceManagerSubDeviceManager.cpp 实现了桥的核心能力——动态端点dynamic endpoint的注册与注销AddDeviceEndpoint()在gSubDevices[]表中找到空槽调用emberAfSetDynamicEndpoint()将子设备挂载到当前端点号若端点号已被占用CHIP_ERROR_ENDPOINT_EXISTS则递增端点号并回绕到gFirstDynamicEndpointId重试RemoveDeviceEndpoint()通过emberAfClearDynamicEndpoint()摘除子设备对应的动态端点并清空槽位。桥在启动时通过Init_Bridge_Endpoint()SubDeviceManager.cpp完成初始化清空gSubDevices数据库计算第一个动态端点号gFirstDynamicEndpointId 最后一个固定端点号 1禁用最后一个固定占位端点它仅为让 ZAP 生成全部所需集群代码而存在为端点 0 设置DEVICE_TYPE_ROOT_NODE、为端点 1 设置DEVICE_TYPE_BRIDGE设备类型。这些动态端点的属性并不存储在本地 ZCL 属性表中而是通过外部属性读写回调动态提供emberAfExternalAttributeReadCallback负责响应 On/Off 与 Bridged Device Basic Information 集群的属性读取例如Reachable、NodeLabel、OnOffemberAfExternalAttributeWriteCallback则响应 OnOff 属性的写入SubDeviceManager.cpp。此外HandleDeviceStatusChanged()会在子设备可达性、状态或名称变化时通过MatterReportingAttributeChangeCallback主动向 Matter 网络推送属性变更报告subscription/reporting保证桥对端点的状态总是最新。构建固件ASR 平台的完整构建与烧录环境准备请先阅读平台的入门指南 docs/platforms/asr/asr_getting_started_guide.md其 Building the example application 一节说明了 SDK 环境与工具链配置然后执行以下命令构建 Bridge 示例./scripts/build/build_examples.py --target asr-$ASR_BOARD-bridge build其中$ASR_BOARD需要替换为你使用的 ASR 开发板标识具体取值以 docs/platforms/asr/asr_getting_started_guide.md 中列出的板型为准。该命令会通过仓库根目录下的 GN 构建流水线产出名为chip-asr-bridge-example.out的可执行固件见 examples/bridge-app/asr/BUILD.gn。从构建脚本 examples/bridge-app/asr/BUILD.gn 还可以看到该示例默认启用ENABLE_ASR_BRIDGE_SUBDEVICE_TEST宏即上文的子设备测试例程会被编译进固件并复用测试用 Setup PIN Code 与 Discriminator 作为配网参数。配网与功能验证完成构建烧录后按以下步骤完成配网与桥接验证。验证过程需要额外的一台 light-switch灯开关设备用于作为 Matter 控制器侧的发起来源。第一步分别配网两台设备将桥bridge设备配网节点 IDnode-id记为1将 light-switch 设备配网节点 IDnode-id记为2。配网通常通过 Matter 控制器如 chip-tool / DOGO扫描桥的配网二维码或 on-network 广播完成。桥设备启动后会在串口日志中打印 onboarding 二维码信息见 AppTask.cpp根据CONFIG_NETWORK_LAYER_BLE决定打印 BLE 或 on-network 方式的配网码。第二步同步子设备并写入 ACL两台设备均配网成功后使用 ASR 平台的GUI 工具DOGO连接桥设备输入AT 命令subdevice sync触发桥执行Sync_SubDevice_test()——将 Light1~Light4 全部置为可达SetReachable(true)、注册状态变更回调并逐个挂载到动态端点 3~6见 subdevice_test.cpp使用 chip-tool 向桥设备节点 1端点 0写入ACLAccess Control List为控制器授予管理权限、为 light-switch 授予操作权限./chip-tool accesscontrol write acl \ [{fabricIndex: 1, privilege: 5, authMode: 2, subjects: [112233], targets: null }, {fabricIndex: 1, privilege: 3, authMode: 2, subjects: [2], targets: null }] \ 1 0对上述 ACL 条目的说明字段含义fabricIndex所属 Fabric 索引1表示默认首个Fabricprivilege授予的权限等级5 Administer管理3 Operate操作authMode认证方式2 CASE基于证书的认证会话subjects被授权的节点Subject112233为控制器自身节点 ID2为 light-switch 节点 IDtargets授权目标范围null表示不限目标端点/集群第一条为 chip-tool 控制器自身授予 Administer 权限ACL 写入操作本身也需要管理权限第二条为 light-switch 节点授予 Operate 权限使其后续可以对桥的端点发起控制。第三步写入 Binding 绑定使用 chip-tool 将 light-switch 的端点 1 与桥设备的端点 3即 Light1进行Binding 绑定./chip-tool binding write binding [{fabricIndex: 1, node:1, endpoint:3, cluster:6}] 2 1该命令的参数含义参数位置含义[{fabricIndex: 1, node:1, endpoint:3, cluster:6}]绑定目标桥节点node 1的端点 3Light1cluster 6即 On/Off 集群集群 ID0x00062被写入 Binding 属性的目标节点light-switch节点 21目标端点light-switch 的端点 1Binding 建立后light-switch 便认识了桥上 Light1 所在的具体端点后续按键即可触发对该端点的 On/Off 控制。第四步按键测试本示例使用实体按键演示开关 Light1 的效果按键定义如下名称PinBUTTONPAD12按下PAD12 上的 BUTTON后light-switch 通过已建立的 Binding 向桥的端点 3 发送 On/Off 命令桥的emberAfExternalAttributeWriteCallback会命中HandleWriteOnOffAttributeSubDeviceManager.cpp将状态写入 Light1 的SubDevice实例并触发SubDevice[Light 1]: ON/OFF日志输出。在桥设备的串口日志中即可观察到对应变化。动态端点的底层工作方式小结从上面的流程可以看到ASR Bridge 示例的动态端点机制可归纳为三条主线注册AddDeviceEndpoint()emberAfSetDynamicEndpoint()把子设备映射到连续端点号3~6桥对端点 0/1 分别声明 Root Node 与 Bridge 设备类型读写端点属性不落本地存储全部经由emberAfExternalAttributeReadCallback/emberAfExternalAttributeWriteCallback转发到SubDevice对象真正实现状态存于应用、属性动态呈现上报子设备状态变化通过HandleDeviceStatusChanged()主动触发 Matter 属性变更报告让网络中的订阅方实时感知桥接设备状态。这套子设备对象 动态端点 外部属性回调的设计正是 Matter Bridge 接入非 Matter 生态设备例如 ASR 应用 Mesh 灯的通用范式可直接推广到温度计、窗帘电机等更多 On/Off 或传感器类设备的桥接场景。【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考