Matter 联合组网控制应用 jf-control-app 全解析:角色职责、JCM 机制与 Linux 构建实战

Matter 联合组网控制应用 jf-control-app 全解析:角色职责、JCM 机制与 Linux 构建实战 Matter 联合组网控制应用 jf-control-app 全解析角色职责、JCM 机制与 Linux 构建实战【免费下载链接】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 仓库中的 jf-control-app 示例 为主体系统讲解该应用在 Matter Joint Fabric联合组网场景中的三重角色——Commissioner配网器、控制平面Control Plane与 PKI 提供方并结合仓库源码与 Joint Fabric Guide 深入解析 JCMJoint Commissioning Method联合配网方法的 CAT 机制、命令行参数与完整演示流程。读完本文你将能够独立完成 jf-control-app 的编译、运行、配网与联合配网验证并掌握--anchor、--jcm、open-joint-commissioning-window等关键命令的底层实现原理。一、应用定位jf-control-app 是什么jf-control-appJoint Fabric Control Application联合组网控制应用是 Matter 生态中用于演示Joint Fabric联合组网特性的示例应用之一它与 jf-admin-appJoint Fabric Administrator Application联合组网管理应用成对出现。根据 官方 README 的定义它承担以下三项职责Commissioner配网器为jf-admin-app及其他设备执行 Matter 标准配网流程控制应用Control Application作为jf-admin-app的控制平面二者之间通过 RPC 通道通信PKI 提供方负责签发操作证书NOC / ICAC为整个联合组网基础设施提供证书体系支撑。从源码结构看main.cpp 中jf-control-app的可执行目标名为jfc-app见 BUILD.gn 中的executable(jfc-app)。应用启动时首先通过RpcConnect()连接jf-admin-app的 RPC 服务器默认地址127.0.0.1:33000可通过--rpc-server-ip/--rpc-server-port覆盖随后注册了以下几类命令集见 main.cppregisterCommandsPairing配对相关命令含联合组网扩展registerCommandsJCM联合配网方法命令open-joint-commissioning-windowregisterCommandsICD、registerCommandsInteractive、registerClusters、registerCommandsSubscriptions交互模式、ICD 与集群操作命令其基础设施大量复用chip-tool的命令框架。从 main.cpp 可以看到若命令行未显式传入interactive start应用会自动在参数前插入这两个词因此它默认以交互式 REPLread-eval-print loop方式运行用户可在提示符下逐条输入pairing、operationalcredentials、accesscontrol等命令。二、理解 Joint Fabricjf-control-app 在组网中的角色2.1 联合组网解决什么问题在传统的 Matter 单 Fabric 模型中每个设备通常只归属于一个管理方。Joint Fabric 允许多个生态Ecosystem共享同一个物理设备网络不同 Vendor 的生态各自建立 Fabric通过一个共同受托的管理方Anchor Administrator锚点管理员协调设备的所有权与访问控制。其详细机制可参阅仓库中的 docs/guides/joint_fabric_guide.md 以及 Matter 规范中 JCM 章节。2.2 应用分工控制方与管理方根据 joint_fabric_guide.md 的描述jf-control-app担任 commissioner 与 control plane并兼任 PKI 提供方jf-admin-app担任 administrator内部持有JF Administrator Cluster联合组网管理集群与JF Datastore Cluster联合组网数据存储集群的实例是整个联合组网中的锚点管理员。2.3 配网流程的关键约定联合组网对配网顺序有严格约定这也是该特性的核心设计第一个被 jf-control-app 配网的设备必须是 jf-admin-app且配对命令必须携带--anchor true参数配网 jf-admin-app 时AddNOC()命令中的CaseAdminSubject字段会被 jf-control-app 设置为其自身的 Administrator CAT初始版本号可在CHIPProjectAppConfig.h中配置唯一的例外是配对命令中使用了jf参数时CaseAdminSubject会被设置为 jf-admin-app 的Anchor CAT详见 Matter 规范 JCM 章节当 jf-admin-app 首次被配网时它会获得一张同时包含Administrator CAT和Anchor CAT的 NOC两者的初始版本号均可配置jf-admin-app 完成配网后jf-control-app 后续执行的其他配对命令只执行配网的子集步骤如 NOC 签发随后通过 RPC 将所有权移交给 jf-admin-app由后者完成配网的收尾工作。2.4 CAT 与 CaseAdminSubject 的源码佐证上述设计在 commands/pairing/PairingCommand.cpp 中可以得到印证命令启动时计算administratorCAT与anchorCAT其中 Anchor CAT 通过GetAnchorCATWithVersion(CHIP_CONFIG_ANCHOR_CAT_INITIAL_VERSION)生成见 PairingCommand.cpp--anchor与--jcm不允许同时使用若同时传入会直接报错--anchor and --jcm options are not allowed simultaneously!见 PairingCommand.cpp若未设置--anchor且锚点管理员尚未被配网命令会提示必须先为 Anchor Administrator 配网即报错Please first commission the Anchor Administrator: add --anchor true parameter见 PairingCommand.cpp配网锚点管理员时会向 NOC 写入mCASEAuthTags { administratorCAT, anchorCAT }两个认证标签见 PairingCommand.cpp。CATCase Authenticated Tag是 Matter 中附加在 CASE 证书里的 32 位权限标签其中高 16 位为权限位如 Administrator、Anchor 权限低 16 位为版本号。初始版本号在两个头文件宏中定义见 CHIPProjectAppConfig.h// initial version for the Administrator CAT #define CHIP_CONFIG_ADMINISTRATOR_CAT_INITIAL_VERSION 0x0001 // initial version for the Anchor CAT #define CHIP_CONFIG_ANCHOR_CAT_INITIAL_VERSION 0x0001三、构建前的环境准备官方 README 明确要求以下所有命令都假设你位于 connectedhomeip 仓库根目录top level本文同理所有路径均以仓库根目录为基准。3.1 激活构建环境在运行任何其他构建命令之前必须先 source 环境设置脚本 scripts/activate.sh。该脚本负责完成三件事下载 GN构建系统生成器下载 ninja构建执行器配置构建与测试所需的 Python 环境及依赖库。在仓库根目录执行$ source scripts/activate.sh3.2 检查并拉取子模块Matter SDK 依赖若干第三方子模块如 openthread、boringssl 等构建前需确保它们已就位。执行子模块拉取脚本--shallow表示浅克隆以节省空间--platform linux指定本次构建的目标平台$ ./scripts/checkout_submodules.py --shallow --platform linux四、在 Linux 上构建 jf-control-app4.1 生成构建文件并编译在仓库根目录下依次执行以下命令完成构建$ cd examples/jf-control-app/ $ gn gen out/debug $ ninja -C out/debug命令解析gn gen out/debug使用默认参数集生成out/debug构建目录。构建参数来自 args.gni 与 jfc.gni其中config_use_interactive_mode true启用了交互式 REPL 模式config_use_local_storage true启用本地存储对应CONFIG_USE_LOCAL_STORAGE宏见 BUILD.gnninja -C out/debug执行实际编译。产物为可执行文件jfc-app其目标定义见 BUILD.gn链接了jfc-utils静态库与核心联合组网模块${chip_root}/src/controller/jcm:jcm。4.2 关键构建配置jfc.gni 与 args.gni 中值得关注的配置项配置项默认值说明chip_device_config_enable_joint_fabrictrue在核心 SDK 代码中启用 Joint Fabric 特性如src/controller中与联合组网相关的配网器代码这是本应用能工作的前提config_use_interactive_modetrue启用交互式命令行模式config_use_separate_eventlooptrue为 CHIP 任务使用独立事件循环config_enable_yaml_teststrue启用 YAML 测试支持config_use_local_storagetrue启用本地存储KVSconfig_enable_https_requeststrue启用 HTTPS 请求支持matter_enable_tracing_supporttrue启用 tracing 支持chip_support_thread_meshcopfalse禁用 Thread MeshCoP本示例基于网络配网场景此外args.gni 默认开启了对 TLV 字符字符串读写校验chip_tlv_validate_char_string_on_read/write true并启用完整的 JSON 负载十六进制日志便于调试。4.3 清理构建产物如需删除生成的可执行文件、库与中间目标文件$ cd examples/jf-control-app/ $ rm -rf out/注重新生成构建目录时务必先重新source scripts/activate.sh以保证 GN/ninja 工具链环境一致。五、运行 jf-control-app命令行参数详解启动 jfc-app 的典型方式以 Ecosystem A 为例来自 joint_fabric_guide.md$ cd examples/jf-control-app/out/debug $ rm -rf jfc_a_storage_directory mkdir jfc_a_storage_directory $ ./jfc-app --rpc-server-port 33033 --storage-directory jfc_a_storage_directory --commissioner-vendor-id 0xFFF1各参数含义参数说明--rpc-server-ipjf-admin-app 的 RPC 服务器 IP默认127.0.0.1见 main.cpp--rpc-server-portjf-admin-app 的 RPC 服务器端口默认33000见 main.cpp不同生态实例应使用不同端口以区分--storage-directory配网器持久化存储目录用于保存配网状态与证书材料建议为每个生态实例使用独立目录--commissioner-vendor-id配网器的 Vendor ID如0xFFF1将写入设备上安装的 Fabric 的AdminVendorID字段六、核心命令与 JCM 实战6.1 配对命令pairing onnetwork-long ... --anchor true用途配网锚点管理员即 jf-admin-app。这是联合组网中必须首先执行的命令 pairing onnetwork-long 1 11022033 3840 --anchor true参数含义1目标 node-id11022033配网 passcode3840配网 discriminator--anchor true声明该节点为锚点管理员。执行成功后 jf-control-app 侧应输出日志 [JF] Anchor Administrator commissioned with success验证 NOC 内容使用operationalcredentials read nocs读取 jf-admin-app 上的 NOC再用chip-cert convert-cert解码证书文本检查 Subject 字段中是否同时包含 Anchor CAT 与 Administrator CAT operationalcredentials read nocs 1 0 NOCs: 1 entries $ chip-cert convert-cert --x509-pem noc_bytes - | openssl x509 -inform pem -noout -text $ Subject: ..., 1.3.6.1.4.1.37244.1.6 FFFF0001, 1.3.6.1.4.1.37244.1.6 FFFE0001同时可解码 ICAC检查其中是否包含标识jf-anchor-icac的组织单元OU$ chip-cert convert-cert --x509-pem icac_bytes - | openssl x509 -inform pem -noout -text Subject: 1.3.6.1.4.1.37244.1.3 0000000000000003, OU jf-anchor-icac6.2 普通设备配对pairing onnetwork ... --regular 1用途锚点管理员就绪后配网普通设备如 lighting-app。此命令只执行配网子集NOC 签发等随后所有权通过 RPC 移交给 jf-admin-app 完成收尾 pairing onnetwork 2 11022044 --regular 1验证点一设备上已安装AdminVendorID为0xFFF1的 Fabric operationalcredentials read fabrics 2 0验证点二设备 ACL 中已安装 Subjects 指向 jf-admin-app Administrator CAT 的条目 accesscontrol read acl 2 0其中Subjects字段应等于18446744065119551489即十六进制FFFFFFFDFFFF0001。6.3 JCM 联合配网pairing code ... --jcm true用途执行 Matter 规范中的联合配网方法JCM。前置条件是两个生态Ecosystem A 与 Ecosystem B均已初始化完毕。在Ecosystem B的 jf-control-app 上先为 jf-admin-app 打开联合配网窗口 pairing open-joint-commissioning-window 11 1 400 1000 1261参数说明对应 OpenJointCommissioningWindowCommand.h 的命令参数定义参数取值范围说明node-id0 ~ UINT64_MAX目标节点endpoint-id0 ~ UINT16_MAX命令目标端点window-timeout0 ~ UINT16_MAX配网窗口保持打开的秒数iterationkSpake2p_Min_PBKDF_Iterations~kSpake2p_Max_PBKDF_Iterations用于派生 verifier 的 PBKDF 迭代次数若 option 为 0 则忽略discriminator0 ~ 4095广播使用的 discriminator若 option 为 0 则忽略timeout0 ~ UINT16_MAX命令超时秒数默认 20 秒该命令的底层实现位于 OpenJointCommissioningWindowCommand.cpp通过Controller::CommissioningWindowOpener::OpenJointCommissioningWindow()完成并开启SetReadVIDPIDAttributes(true)回读设备的 VID/PID 用于生成配网载荷。执行后 jf-admin-app 侧会打印 [DIS] Advertise commission parameter vendorID65522 productID32769 discriminator1261/04 cm3 cp0 jf14注意请从上述日志或配网载荷中记录manual pairing code手动配对码它将在下一步使用。随后在Ecosystem A的 jf-control-app 上执行 JCM 配网 pairing code 10 [manual pairing code] --jcm true其中10是目标 node-id[manual pairing code]为上一步记录的手动配对码--jcm true表明使用联合配网方法。正如前文所述--jcm与--anchor互斥且只有在锚点管理员已完成配网的情况下才能使用。七、完整演示初始化两个生态系统以下流程出自 joint_fabric_guide.md用于在单机 Linux 上完整演示联合组网。开始前先清理临时 CHIP 文件$ rm -rf /tmp/chip_*7.1 初始化 Ecosystem AVendor ID 0xFFF1步骤 1启动 jf-admin-app注意使用独立的 KVS 文件与端口$ cd examples/jf-admin-app/linux/out/debug $ rm -rf jfa_a_kvs touch jfa_a_kvs $ ./jfa-app --capabilities 0x4 --passcode 11022033 --discriminator 3840 --secured-device-port 5533 --rpc-server-port 33033 --KVS jfa_a_kvs步骤 2启动 jf-control-app$ cd examples/jf-control-app/out/debug $ rm -rf jfc_a_storage_directory mkdir jfc_a_storage_directory $ ./jfc-app --rpc-server-port 33033 --storage-directory jfc_a_storage_directory --commissioner-vendor-id 0xFFF1步骤 3配网 jf-admin-app--anchor true并完成 NOC/ICAC 的 CAT 校验见 6.1 节。步骤 4启动并配网 lighting-app$ cd examples/lighting-app/linux/out/debug $ rm -rf light_a_kvs touch light_a_kvs $ ./chip-lighting-app --capabilities 0x4 --passcode 11022044 --KVS light_a_kvs pairing onnetwork 2 11022044 --regular 1步骤 5验证 Fabric 与 ACL见 6.2 节。7.2 初始化 Ecosystem BVendor ID 0xFFF2与 Ecosystem A 完全对称仅需更换所有标识符与端口$ cd examples/jf-admin-app/linux/out/debug $ rm -rf jfa_b_kvs touch jfa_b_kvs $ ./jfa-app --capabilities 0x4 --passcode 11022055 --discriminator 3841 --secured-device-port 5555 --rpc-server-port 33055 --KVS jfa_b_kvs$ cd examples/jf-control-app/out/debug $ rm -rf jfc_b_storage_directory mkdir jfc_b_storage_directory $ ./jfc-app --rpc-server-port 33055 --storage-directory jfc_b_storage_directory --commissioner-vendor-id 0xFFF2 pairing onnetwork-long 11 11022055 3841 --anchor true$ cd examples/lighting-app/linux/out/debug $ rm -rf light_b_kvs touch light_b_kvs $ ./chip-lighting-app --capabilities 0x4 --passcode 11022066 --KVS light_b_kvs pairing onnetwork 22 11022066 --regular 1同样验证AdminVendorID 0xFFF2的 Fabric 与 ACLSubjects 18446744065119551489。两个生态都就绪后即可按 6.3 节执行跨生态的 JCM 联合配网。八、启用 Joint Fabric 相关单元测试要编译并运行联合组网相关的单元测试需要在gn gen时显式开启该特性开关$ gn gen out/test --argschip_device_config_enable_joint_fabrictrue该参数与 args.gni 中设置一致——jf-control-app 本身正是通过它来启用核心 SDK 中的联合组网代码路径src/controller/jcm下的DeviceCommissioner、AutoCommissioner等模块见 src/controller/jcm。当自行编译其他应用或测试目标需要联合组网能力时都应添加此构建参数。九、总结jf-control-app 是理解 Matter Joint Fabric 特性的最小且完整的参考实现架构上它集 Commissioner、控制平面与 PKI 提供方于一身与持有 JF Administrator / JF Datastore 集群的 jf-admin-app 通过 RPC 协作实现了先锚点、后普通设备、再跨生态 JCM的渐进式配网模型机制上CaseAdminSubject与 CATAdministrator CAT / Anchor CAT的设计保证了对设备所有权与访问控制的可审计转移初始版本号可在 CHIPProjectAppConfig.h 中配置实操上从 scripts/activate.sh 环境激活、scripts/checkout_submodules.py 子模块拉取到gn genninja构建再到--anchor true、--jcm true、open-joint-commissioning-window等命令的完整链路均可在本仓库中直接复现验证。如需进一步深入联合组网的完整演示细节与单元测试说明可继续阅读 docs/guides/joint_fabric_guide.md。【免费下载链接】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),仅供参考