构建、配网与动态端点实战指南)
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),仅供参考