connectedhomeip 模拟设备指南(Linux):构建、运行 chip-app1 并编写 YAML 测试
connectedhomeip 模拟设备指南Linux构建、运行 chip-app1 并编写 YAML 测试【免费下载链接】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本文基于 docs/guides/simulated_device_linux.md 展开讲解如何在 Linux 上构建并运行 MatterProject CHIP模拟设备Simulated Device如何用 chip-tool 与模拟设备配网、下发簇命令以及如何通过 YAML 文件为模拟设备补充认证测试用例。读完本文你能够独立完成模拟设备的构建、启动、配网与集群命令交互并掌握 YAML 测试的命名规范与可用属性为验证 commissioner/controller 行为建立一条可复用的测试链路。模拟设备是什么原文档将 Simulated Device 定义为一种应用仿真其形态由 ZAP 配置文件定义并且可以附加 YAML 测试文件用于验证 commissioner/controller 的行为是否符合预期。原文档给出的典型用例路径是虚拟配件统一放在examples/placeholder/linux/apps目录下每个配件对应一个子文件夹文件夹名即应用名——例如app1会生成名为chip-app1的二进制如果需要覆盖默认编译参数可以在应用文件夹下放置include/CHIPProjectConfig.h例如examples/placeholder/linux/apps/app1/include/CHIPProjectConfig.h。需要说明的是在当前仓库快照中examples/placeholder目录已不存在examples 目录下不再包含 placeholder 子树文档中引用的示例 ZAP 配置与部分示例文件属于该文档所对应的历史版本下文所有命令以原文档为准照录而涉及具体文件与测试框架的佐证则引用当前快照中确实存在的文件。模拟设备的底层入口是 Linux 平台的通用应用框架。从 examples/platform/linux/BUILD.gn 可以看到app-mainsource_set 以 AppMain.cpp 为核心聚合了配网初始化CommissionableInit.cpp、命令行选项解析Options.cpp、命名管道命令NamedPipeCommands.cpp以及各类测试事件触发器这正是chip-app1这类二进制能够完成配网、日志输出 SetupQRCode 并响应测试事件的底层支撑。构建前置条件按照原文档构建模拟设备之前需要满足以下前置条件链接已转换为仓库根目录相对路径构建前置依赖Prerequisitesdocs/guides/BUILDING.md#prerequisites构建准备Prepare For Buildingdocs/guides/BUILDING.md#prepare-for-building代码生成流程docs/zap_and_codegen/code_generation.md已安装 ZAP 并配置环境变量docs/zap_and_codegen/code_generation.md#installing-zap-and-environment-variables这些步骤的核心是先让环境具备编译器、Python 虚拟环境与 ZAP 代码生成能力再通过 ZAP 生成器把 ZAP 配置转换成应用代码最终由 GN/Ninja 完成编译。方式一使用脚本构建默认模拟应用原文档给出的推荐路径是借助scripts/examples/gn_build_example.sh脚本。构建chip-app1二进制的完整命令如下./scripts/examples/gn_build_example.sh examples/placeholder/linux out/debug/simulated/ chip_tests_zap_configapp1命令中各部分的含义examples/placeholder/linux目标示例目录脚本会以其作为 GN 构建根out/debug/simulated/输出目录构建产物包括chip-app1会落在该目录下chip_tests_zap_configapp1GN 参数指定使用app1对应的 ZAP 配置生成该虚拟配件的应用代码最终产物命名规则为chip-应用名。注意chip_tests_zap_config是原文档中由 placeholder 示例声明的 GN 参数。在当前仓库快照中全仓库检索不到该参数名可以推断该参数随examples/placeholder示例一起从主线移除或改名如果你在当前版本执行上述脚本报错应先查看 scripts/examples/gn_build_example.sh 的用法说明确认当前版本支持的参数与示例目录。方式二直接使用 gn 与 ninja 构建替代方案如果不经过脚本封装可以直接用 gn ninja 完成同样的构建。原文档给出的步骤为source scripts/activate.sh gn gen --check --rootexamples/placeholder/linux out/simulated --argschip_tests_zap_config\app1\ ninja -C out/simulatedsource scripts/activate.sh激活仓库 Python 虚拟环境scripts/activate.sh使gn、ninja等工具链路径生效gn gen --check --rootexamples/placeholder/linux out/simulated --args...在out/simulated下生成构建文件并做参数检查--args传入与脚本方式相同的chip_tests_zap_configapp1ninja -C out/simulated进入输出目录执行编译生成chip-app1。两种方式的区别仅在于是否由脚本代劳 gn 配置与 ninja 调度的细节产物与输出目录结构保持一致out/debug/simulated或out/simulated取决于你指定的输出目录。运行模拟设备应用构建完成后可以直接在 Linux 上执行二进制./out/debug/simulated/chip-app1启动后应用会在日志中打印配网信息其中SetupQRCode:一行输出的配对码setup code 对应的二维码字符串是后续用 chip-tool 配网的关键输入。使用测试参数运行YAML 测试入口模拟设备同样支持以测试模式运行。原文档给出的命令为./scripts/tests/chipyaml/runner.py [TEST NAME] app1其中[TEST NAME]要执行的 YAML 测试名称app1目标模拟设备应用名runner 会将该测试下发到指定设备上执行。该 runner 的真实入口是 scripts/tests/chipyaml/runner.py。从源码看它基于click组织命令行选项默认从src/app/zap-templates/zcl/data-model/chip/*.xml加载数据模型规范并默认读取src/app/tests/suites/certification/ci-pics-values作为 PICS 文件同时支持通过--additional-pseudo-clusters-directory加载自定义伪簇。也就是说测试名能否被识别、测试步骤如何解析都取决于这套 YAML 测试解析与数据模型规范。用 chip-tool 与模拟应用交互应用启动并完成配网后就可以使用 chip-tool 与之交互。原文档的交互流程为按照 docs/examples/chip_tool.md 等文档说明构建 chip-tool原文档指向examples/chip-tool/README.md该目录在当前快照中不存在可参考 docs 下的 chip-tool 文档使用日志SetupQRCode:行中的配对码执行配网命令./out/debug/standalone/chip-tool pairing code 0x654321 MT:-24J0AFN00KA0648G00其中0x654321是控制器侧的 commissioning node ID示例值MT:-24J0AFN00KA0648G00是 Setup QR Code 字符串需替换为实际日志中输出的内容配网完成后大多数测试会开始运行。此时可以像对待真实 Matter 设备一样发送簇命令例如./out/debug/standalone/chip-tool onoff on 0x654321 1 ./out/debug/standalone/chip-tool onoff read on-off 0x654321 1 ./out/debug/standalone/chip-tool onoff write on-time 1 0x654321 1三条命令分别演示了向端点 1 下发on命令、读取OnOff属性、写入OnTime属性。更多可用命令请参考 chip-tool 相关文档。这里体现的正是模拟设备的价值它没有硬件却完整实现了设备侧的数据模型行为属性读写、命令处理、配网流程因此可以用标准 chip-tool 工作流验证控制器到设备侧的整条链路。通过 YAML 为模拟设备添加测试为验证 commissioner/controller 行为需要向模拟设备测试框架添加测试方式是创建 YAML 测试文件。原文档给出的规范如下文件位置YAML 测试文件统一放在 src/app/tests/suites/certification/ 目录下命名格式CI 依赖此规则识别测试Test_TC_[CATEGORY ABBREVIATION]_[SECTION NUMBER]_[SUBSECTION NUMBER]_Simulated.yaml重要测试名必须以大写开头的Simulated结尾可用属性完整属性清单见 src/app/tests/suites/README.md模拟设备特有属性名称说明wait期望从 controller 端接收到、由 app 等待执行的命令wait是模拟设备方向的关键属性普通 YAML 测试通常是controller 发命令、校验响应而模拟设备作为被仿真的一侧需要用wait声明它期望 controller 发出的命令从而测试控制器的行为示例原文档以Test_TC_DM_1_3_Simulated.yaml作为示例。该文件在当前仓库快照中已不存在但同目录下仍存在一批按同一命名规范编写的模拟设备测试例如 Test_TC_CC_3_4_Simulated.yaml、Test_TC_CC_4_5_Simulated.yaml、Test_TC_OO_3_2_Simulated.yaml、Test_TC_TBRM_3_1_Simulated.yaml 等可直接作为编写新测试的模板参考。YAML 测试文件的核心结构速览结合 src/app/tests/suites/README.md一个 YAML 测试文件由三层构成编写时可对照使用测试集Test Set层属性属性说明必填name人类可读的测试集名称是config测试集中每个测试继承的默认配置是tests测试集合支持用{{chip_test_items}}迭代是默认配置层属性属性说明必填cluster簇名取自数据模型簇名索引否endpoint测试默认目标端点标识否identity执行测试的控制器名支持 alpha、beta、gamma否{variable_name}测试内使用的变量名否单个测试Test层属性摘录属性说明label测试名称disabled停用该测试command要执行的命令可以是簇命令或特殊命令attribute特殊属性命令的目标属性名optional标记为可选测试设备不支持该命令即视为通过cluster / endpoint未指定时继承默认配置arguments传给命令的参数列表支持{{chip_test_item_parameters}}迭代response期望的响应结果或约束支持{{chip_test_item_response_parameters}}迭代PICS协议实现一致性声明条件决定该测试步骤是否执行timedInteractionTimeoutMs写属性与发命令的超时设置其中response可进一步使用values期望值列表、value、error期望错误码、saveAs把响应值存入变量供后续步骤使用等子属性arguments的values子项由name可选与value必填组成。编写新测试时的推荐步骤在 src/app/tests/suites/certification/ 下按Test_TC_类别缩写_节号_小节号_Simulated.yaml命名新建文件从上述任一现存*_Simulated.yaml复制骨架声明name、config、tests用commandarguments描述 controller 侧行为用wait描述设备侧模拟应用期望收到的命令用response约束校验点用./scripts/tests/chipyaml/runner.py [TEST NAME] app1在本地跑通再交给 CI 识别执行。小结模拟设备把设备侧实现压缩成一个可在 Linux 上直接运行的二进制由 ZAP 配置定义其数据模型通过chip-app1形式启动后用 chip-tool 完成配网与簇命令交互再借助Test_TC_*_Simulated.yaml测试文件持续验证 controller 行为。构建脚本或 gn/ninja 两条路径、运行普通模式与 runner.py 测试模式、交互pairing code 配网 onoff 命令与测试编写命名规范 wait属性 YAML 属性表四个环节环环相扣构成一条完整的、无硬件依赖的 Matter 行为验证链路。【免费下载链接】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),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →