嵌入式ARM工业计算机如何实现 SNMP v3.0→MQTT 转发功能实测文档

39 阅读5分钟

1 概述

ThingsBoard IoT Gateway 的 SNMP 连接器核心作用是从 SNMP 设备采集数据并上传至 ThingsBoard 平台。需要说明的是,SNMP 连接器本身并不直接支持 SNMP v3 到 MQTT 的协议转换,但可借助 ThingsBoard 生态中的 “SNMP 数据采集 + 内部转发” 机制间接实现该功能。若需启用 SNMP v3 的安全认证特性,需在相关配置中准确设置认证与加密参数。

本实测基于公司 BL410 硬件平台完成,该平台搭载 ARM 架构,性能稳定且兼容性强。实测结果表明,BL410 可完美支持 SNMP v3.0 转 MQTT 的转发功能,同时公司所有 ARMxy 系列硬件均具备该适配能力,可为相关项目提供灵活的硬件选型方案。

2 前置条件

  • 基础环境:已安装 Python 3.8 及以上版本,且在 BL410 硬件平台成功部署 ThingsBoard Gateway;
  • 测试设备:通过 snmpd 在 BL410 平台搭建本地 SNMP v3 模拟代理(用于替代真实 SNMP 设备);
  • MQTT客户端:安装 MQTTX 或 mosquitto_sub 工具(用于验证 MQTT 数据转发效果);
  • SNMP测试工具:用于验证 SNMP v3.0 设备的网络可达性;
  • ThingsBoard 服务:为 MQTT 消息的接收端,需确保正常运行。

3 核心操作步骤(验证 SNMP v3.0 转 MQTT)

步骤1:搭建 SNMP v3 模拟代理(snmpd)

  1. 安装 snmpd工具,执行以下命令完成 snmpd 及相关依赖的安装:

sudo apt update && sudo apt install -y snmpd snmp

  1. 配置 SNMP v3 用户(关键步骤:创建认证+加密的 SNMP v3 用户)

执行以下命令创建SNMP v3用户,指定认证协议为 SHA、加密协议为AES并设置对应密钥:

sudo net-snmp-config --create-snmpv3-user -a SHA -A "AuthPass123!" -x AES -X "PrivPass123!" snmpv3user

  1. 修改 snmpd 配置文件

编辑sudo nano /etc/snmp/snmpd.conf 注释原有默认配置,添加以下内容:

4.重启 snmpd 并设置开机自启

sudo systemctl restart snmpd

sudo systemctl enable snmpd

  1. 验证SNMP v3访问,执行以下命令验证 SNMP v3 代理是否正常工作,若返回系统描述信息则表示配置成功:

snmpget -v3 -l authPriv -u snmpv3user -a SHA -A "AuthPass123!" -x AES -X "PrivPass123!" 127.0.0.1 1.3.6.1.2.1.1.1.0

步骤2:安装 MQTT 客户端(验证转发)

执行:sudo apt install -y mosquitto-clients

步骤3:配置 ThingsBoard Gateway(实现SNMP v3 → MQTT转发)

1.修改 Gateway 主配置(tb_gateway.json),打开 config/tb_gateway.json,确保启用 SNMP 连接器:

2.配置snmp.json文件,编辑config/snmp.json文件,按以下格式配置 SNMP v3 连接参数、数据采集规则等:

{

"timeout": 5,

"retries": 3,

"devices": [

{

"deviceName": "SNMPv3_Router",

"deviceType": "snmp",

"ip": "192.168.1.XXX", // SNMP设备IP

"port": 161,

"pollPeriod": 5000,

"version": "3", //指定SNMP版本为v3

"community": "public",

"security": { // SNMPv3 认证加密配置

"username": "snmp_user_XXX",

"securityLevel": "authPriv",

"authProtocol": "SHA",

"authKey": "Auth_Key_XXX@123", // 认证密钥

"privProtocol": "AES",

"privKey": "Priv_Key_XXX@123" // 加密密钥

},

"attributes": [

{

"key": "设备型号描述",

"method": "get",

"oid": "1.3.6.1.2.1.1.1.0",

"timeout": 6

}

],

"telemetry": [ // 采集设备遥测数据

{

"key": "设备系统信息",

"method": "table",

"oid": "1.3.6.1.2.1.1"

}

]

}

],

"logLevel": "INFO",

"name": "SNMP",

"enableRemoteLogging": false,

"id": "XXX-XXX-XXX-XXX-XXX", // 连接器唯一ID

"configVersion": "3.8.1"

}

3.验证SNMP连接有效性,再次执行SNMP v3访问命令,确认Gateway与SNMP模拟代理的连接正常:

snmpget -v3 -l authPriv -u snmpv3user -a SHA -A "AuthPass123!" -x AES -X "PrivPass123!" 127.0.0.1 1.3.6.1.2.1.1.1.0

步骤4:测试MQTT基本功能

1.订阅测试主题

mosquitto_sub -h 127.0.0.1 -p 1883 -t "test/#" -v

2.发布测试主题

mosquitto_pub -h 127.0.0.1 -p 1883 -t "test/hello" -m "world"

步骤5:监听 MQTT 主题(验证转发)

打开新终端,执行以下命令监听ThingsBoard Gateway MQTT 转发的 SNMP 数据主题:

mosquitto_sub -h 127.0.0.1 -p 1883 -t "v1/gateway/telemetry" -v

4 ThingsBoard 云平台连接说明

ThingsBoard云平台连接与SNMP设备连接为两个独立模块,基于 BL410 平台的配置如下:

1.SNMP连接器 → 路由器设备(SNMP v3 通信)

  • 连接地址:使用路由器的本地网络IP
  • 通信端口:161
  • 协议版本:SNMPv3

2.SNMP连接器 → ThingsBoard云平台(MQTT通信)

  • 连接地址:thingsboard.cloud(ThingsBoard 云平台域名)
  • 通信端口:1883(MQTT默认端口)
  • 功能用途:将BL410设备采集到的SNMP数据上传至云平台

5 硬件适配说明

1. 实测硬件型号

本次实测选用公司 BL410 硬件平台,该平台核心参数如下:

  • 架构:ARM aarch64
  • 设备:BL410设备
  • 兼容性:完美支持 Python 3.8+、ThingsBoard Gateway 及 snmpd 工具部署

2. 系列硬件适配性

除 BL410 外,公司所有 ARMxy 系列硬件(如 BL330、BL340 等)均具备同等适配能力:

  • 统一基于 ARM 架构,系统环境兼容性一致;
  • 硬件性能满足 SNMP 数据采集、协议转换及 MQTT 转发的资源需求;
  • 支持 Ubuntu 等主流 Linux 发行版,可直接复用本次配置流程。

6 验证结果说明:

ThingsBoard平台中,SNMP 连接器显示为“SYNC”状态,表明BL410设备已成功连接至ThingsBoard平台,配置版本为v3.8.1,且SNMP v3的认证与加密功能已生效:

SNMPv3_Router设备:

成功采集到 “设备型号描述”(OID:1.3.6.1.2.1.1.1.0),数据值为设备系统描述字符串:

通过“table”方式采集到设备系统信息表格数据,关键字为 “设备系统信息”,数据更新时间正常:

SNMPv3_Router_Custom设备:

成功采集到关键字对应的表格数据,包含设备网络接口等相关信息,数据更新时间与采集周期一致: