3. 搭建互操作测试台
互操作测试的核心难点不在于“能不能连上”,而在于“每次都能连上、每次结果都能复现”。如果测试台每次搭建的拓扑、信道、固件版本、入网参数都不一样,那么一次失败到底是设备缺陷、环境干扰还是配置差异,根本无法判断。因此本节的目标是:用 Silicon Labs 开发套件、无线适配器、边界路由器、网关和传感器节点,搭建一个拓扑固定、参数固定、可反复重建的测试网络,并完成设备入网与基础通信验证。
一、测试台的组成与角色分工
一个典型的 Thread/Matter 互操作测试台由四类角色构成,每类角色承担不同的职责,不能互相替代:
- 边界路由器(Border Router):以 Raspberry Pi 或类似 Linux 主机运行 OpenThread Border Router(OTBR),通过 USB 连接一颗 RCP 无线适配器(如 EFR32MG21/MG24 烧录 RCP 固件),负责 Thread 网络与 IPv6 主干之间的路由,同时提供 mDNS/DNS-SD 服务发现。
- 无线适配器(RCP/Radio Co-Processor):只负责 802.15.4 射频收发,协议栈运行在主机侧。它决定了测试台使用的信道、PAN ID 和网络密钥。
- 网关(Gateway/Hub):作为应用层控制器,运行 Matter Controller 或 Zigbee Coordinator 角色,负责设备配网、属性读写和场景控制。
- 传感器节点(End Device):使用 EFR32MG24 或 EFR32MG21 开发套件烧录 Sleepy End Device(SED)固件,模拟门磁、温湿度、人体感应等终端设备。
建议至少准备 3 个传感器节点,其中 1 个作为“参照节点”始终不参与变更,用于区分“网络整体故障”和“单个设备故障”。
二、物理拓扑与固定化设计
测试台最容易失控的变量是射频环境。建议将边界路由器主机、RCP 适配器和所有节点固定在同一张实验台上,节点与 RCP 之间保持 1~3 米距离,避免金属遮挡和微波炉、Wi-Fi 6E 路由器的近距离干扰。信道选择上,Thread 默认使用信道 15(2425 MHz),若现场 2.4 GHz Wi-Fi 占用严重,可改用信道 25 或 26,但必须在测试记录中固定下来。
三、软件环境与关键参数固化
在主机上安装 OTBR 后,通过 ot-ctl 或 otbr-agent 配置网络参数。以下是一组可直接复用的示例参数(属于教学示例,实际部署时请按现场情况调整):
# 在边界路由器主机上设置 Thread 网络参数
sudo ot-ctl dataset init new
sudo ot-ctl dataset channel 15
sudo ot-ctl dataset panid 0x1234
sudo ot-ctl dataset networkname SILABS-LAB
sudo ot-ctl dataset extpanid 1111111122222222
sudo ot-ctl dataset networkkey 00112233445566778899aabbccddeeff
sudo ot-ctl dataset commit active
sudo ot-ctl ifconfig up
sudo ot-ctl thread start
sudo ot-ctl state
# 期望输出: leader 或 router
参数固化的意义在于:networkkey 和 extpanid 一旦固定,任何节点只要使用同一份 dataset 就能稳定入网;channel 15 固定后,射频干扰的排查范围也随之收敛。建议把上述命令保存为 setup_thread.sh,每次测试前重新执行,确保网络从零重建。
四、设备入网与基础通信验证
节点入网有两种方式:一是通过 ot-ctl commissioner 开启 Joiner 模式,让节点用 Joiner Credential 入网;二是直接烧录包含完整 dataset 的固件。互操作测试推荐第一种,因为它更接近真实配网流程。
# 边界路由器侧开启 Commissioner
sudo ot-ctl commissioner start
sudo ot-ctl commissioner joiner add * J01NU5
# 节点侧触发入网后,观察
sudo ot-ctl child list
# 期望输出包含节点短地址与 RLOC16
入网成功后,必须完成三项基础通信验证,缺一不可:
- 链路层验证:在边界路由器上执行
ot-ctl neighbor table,确认节点状态为child或router,RSSI 建议优于 -80 dBm,LQI 大于 100。 - 网络层验证:用
ping6测试节点 Mesh-Local 地址(如fd11:22::ff:fe00:1),确认 ICMPv6 往返正常,丢包率应为 0%。 - 应用层验证:通过网关读取节点属性,例如门磁的
BooleanState或温湿度的MeasuredValue,确认属性值可读且随物理动作变化。
五、可复现性的检查要点
测试台搭建完成后,用以下清单做一次自检,确认它真的“可复现”:
| 检查项 | 合格标准 | 常见问题 |
|---|---|---|
| 固件版本 | RCP、节点、网关版本记录在案 | 混用不同 Gecko SDK 版本 |
| 网络参数 | channel/PAN ID/key 与脚本一致 | 手动改过参数未同步 |
| 节点角色 | SED 保持 sleepy,不误升为 router | poll period 设置过短 |
| 物理位置 | 节点与 RCP 距离 1~3 米 | 节点被金属机箱遮挡 |
| 重建流程 | 断电重启后能自动恢复同一网络 | dataset 未持久化 |