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,但必须在测试记录中固定下来。

互操作测试台拓扑与角色分工 边界路由器主机 Raspberry Pi / Linux OTBR + mDNS/DNS-SD IPv6 前缀: fd11:22::/64 无线适配器 RCP EFR32MG24 802.15.4 射频 信道 15 / PAN 0x1234 网关 / 控制器 Matter Controller 配网 / 属性读写 场景控制 USB IPv6 / Wi-Fi 主干 Thread Mesh 网络(信道 15) 802.15.4 节点 A 门磁 SED 短地址 0x0001 节点 B 温湿度 SED 短地址 0x0002 参照节点 C 人体感应 SED 短地址 0x0003 USB 串口 IPv6 主干 802.15.4 射频 Mesh 链路

三、软件环境与关键参数固化

在主机上安装 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

入网成功后,必须完成三项基础通信验证,缺一不可:

  1. 链路层验证:在边界路由器上执行 ot-ctl neighbor table,确认节点状态为 child 或 router,RSSI 建议优于 -80 dBm,LQI 大于 100。
  2. 网络层验证:用 ping6 测试节点 Mesh-Local 地址(如 fd11:22::ff:fe00:1),确认 ICMPv6 往返正常,丢包率应为 0%。
  3. 应用层验证:通过网关读取节点属性,例如门磁的 BooleanState 或温湿度的 MeasuredValue,确认属性值可读且随物理动作变化。
建议在测试记录表中固定记录:节点短地址、RLOC16、入网时间、RSSI、LQI、首次属性读取值。这些字段是后续故障诊断的基线,缺少基线就无法判断“变化”是异常还是正常波动。

五、可复现性的检查要点

测试台搭建完成后,用以下清单做一次自检,确认它真的“可复现”:

检查项合格标准常见问题
固件版本RCP、节点、网关版本记录在案混用不同 Gecko SDK 版本
网络参数channel/PAN ID/key 与脚本一致手动改过参数未同步
节点角色SED 保持 sleepy,不误升为 routerpoll period 设置过短
物理位置节点与 RCP 距离 1~3 米节点被金属机箱遮挡
重建流程断电重启后能自动恢复同一网络dataset 未持久化