【ThingsBoard初体验】ThingsBoard IoT Gateway的使用

【ThingsBoard初体验】ThingsBoard IoT Gateway的使用

前言

通过对ThingsBoard的了解后,结合目前需求:1.我需要连接至少连接315套设备;2.设备类型多、设备协议目前还不清楚。基于上述需求我决定加入网关组件(Gateway)进行数据接收以及发送数据命令的模拟。

刚刚接触物联网项目不久,如果文章能帮到其他小伙伴,那是我的荣幸。文中如有不当的地方欢迎大家友好讨论,对于不妥我会积极修改。(有部分图片和实现方案及操作步骤取自其他博客,作者均会在后面引用说明)

大佬们有更好的解决办法,也希望能够指点指点~~~~

本机环境

JDK:17

Node:22.17.1

Maven:3.9.6

IDEA:2025.2.3

Pycharm:  2024.1.7

ThingsBoard源码:4.3.0-SNAPSHOT

本机系统:Windows 11

ThingsBoard IoT Gateway源码下载地址:https://github.***/thingsboard/thingsboard-gateway

Gateway是什么?

官网链接:什么是 ThingsBoard 物联网网关? |ThingsBoard 物联网网关

我的理解是他用于将传统设备、第三方系统或使用非原生协议的设备,连接到 ThingsBoard 平台上。充当桥梁 / 抽象层,使各种不同通信协议、设备类型的数据能被统一收集、处理、转换,然后发送到 ThingsBoard 做进一步的管理、可视化、规则处理等。

Gateway的安装

参考:从源安装 IoT 网关。|ThingsBoard 物联网网关

我选择的是使用Pycharm从源代码进行安装,我看许多博客都是使用IDEA进行安装的,我感觉他在环境中下载各种包有点混乱,所以新创建了一个虚拟环境在Pycharm中运行。

从 GitHub 下载存储库

git clone --recurse-submodules https://github.***/thingsboard/thingsboard-gateway.git --depth 1

 移至下载目录

cd thingsboard-gateway

创建环境

我是使用Anaconda创建Python虚拟环境

conda create -n tb_gateway python=3.11

激活虚拟环境

conda activate tb_gateway

出现如图就是激活成功了

在Pycharm配置虚拟环境

我在Pycharm中配置虚拟环境时遇到了一个问题:无法正确导入只能正常导入base环境。

解决方案:

Conda可执行文件要选择:E:\Anaconda\Library\bin\conda.bat

这时就可以正常导入创建好的环境

安装python需求

在项目终端执行

pip install -r requirements.txt

安装库

python setup.py install

创建“logs”文件夹

mkdir logs

分析框架

一开始我想要使用ThingsBoard IoT Gateway时,我没有想清楚ThingsBoard IoT Gateway是处在什么位置扮演一个什么角色。

(来源:ThingsBoard IoT Gateway 实战(三)- 使用 MQTT Connector 转接灯_thingsboard 第三方mqtt-CSDN博客)

我看了这个博客(ThingsBoard IoT Gateway 实战(三)- 使用 MQTT Connector 转接灯_thingsboard 第三方mqtt-CSDN博客)后有了比较清晰的认知,ThingsBoard本身是MOTT的服务器也就是Broker,无法直接接入。

  • 使用ThingsBoard IoT Gateway做MQTT转换
  • 使用EMQX模拟三方厂商的MQTT Broker
  • 使用MQTTX模拟三方厂商的设备也就是MQTT Client

EMQX、MQTTX安装及配置

我们前面已经安装好了ThingsBoard IoT Gateway,现在再来安装模拟三方厂商MQTT Broker的EMQX和模拟三方厂商的设备也就是MQTT Client的MQTTX。后面操作主要参考:windows10-EMQX与MQTTX的安装及配置使用教程_emqx windows-CSDN博客

EMQX 概览 | EMQX 文档

EMQX下载安装

下载

  1. 下载链接:emqx官网 - 版本下载
  2. 选择合适的版本下载:选择windows系统的安装包

推荐下载5.3.2版本比较新的版本没有windows适配的。

安装

  1. 将下载的emqx-5.3.2-windows-amd64.zip解压出来,解压目录不能存在中文、空格、特殊字符

        2.打开其中的bin文件夹,在地栏复制地址

        3.单击开始菜单,输入cmd,选择以管理员身份运行。

        4.在命令行里输入cd 并单击鼠标右键,会粘贴刚才复制的EMQX的bin目录,然后回车键,意为跳转目录至 D:\soft\emqx5.3.2\bin

        5.安装EMQX服务,执行命令:

.\emqx.cmd install


此命令只需要运行一次,以后再开机就不用执行它了。

卸载EMQX服务执行命令:

.\emqx.cmd uninstall

提示ChangeServiceConfig 成功,则说明服务安装成功

        6. 启动 emqx服务,输入命令:

.\emqx.cmd console

提示EMQX 版本号 is running now!,则说明运行成功

运行EMQX遇到的问题

以上是在博客windows10-EMQX与MQTTX的安装及配置使用教程_emqx windows-CSDN博客中的操作,在我执行.\emqx.cmd console后出现了1883端口被占用,这是因为ThingsBoard也监听了1883端口。

1、1883:MQTT TCP 监听端口,用于设备连接

2、8883:MQTT SSL 监听端口,提供加密设备的连接

3、8083:MQTT WebSocket 监听端口,允许通过Web浏览器连接

4、8084:MQTT WebSocket 监听端口,提供加密的Web浏览器连接

5、18083:EMQX Dashboard 管理控制台端口,用于监控贺管理MQTT服务器

解决方案

将EMQX监听端口改为1884,一开始我以为直接可以在文件emqx.conf中直接修改,正常情况路径为:/ect/emqx/emqx.conf或/ect/emqx.conf,结果没有在文件emqx.conf中找到listeners.tcp.default,我还想了一会儿是不是我下载的版本有点不一样。其实可以直接在文件emqx.conf中加:

listeners.tcp.default {
  bind = "0.0.0.0:1884"
  max_connections = 1024000
}

然后执行.\emqx.cmd console出现EMQX 版本号 is running now!,则说明运行成功。

浏览器输入localhost:18083回车,即可访问EMQX控制台,在登录页面输入初始化账号 :用户名:admin 密码:public

EMQX常用命令

.\emqx.cmd start :启动服务和 Erlang 节点
.\emqx.cmd stop :停止服务和 Erlang 节点
.\emqx.cmd restart :运行停止命令和启动命令
.\emqx.cmd ping : 检查节点是否正在运行
.\emqx.cmd ctl :运行管理命令
.\emqx.cmd console :在Windows shell 中启动 Erlang 版本
.\emqx.cmd attach :连接到正在运行的节点并打开交互式控制台
.\emqx.cmd remote_console :与附加相同
.\emqx.cmd list : 显示已安装的 Erlang 服务的列表
.\emqx.cmd usage :显示可用命令

MQTTX下载安装

以下主要部分参考:windows10-EMQX与MQTTX的安装及配置使用教程_emqx windows-CSDN博客

下载

EMQX的官方网站打开 :EMQ (emqx.***)

安装及配置

  1. 双击打开下载的MQTTX-Setup-1.9.7-x64.exe,开始安装MQTT客户端,选择安装目录,点击完成

        2.测试连接:
单击连接按钮,单击新建连接按钮,来创建一个新连接
接下来按如下操作步骤来创建连接
(1)名称随便输入,我这里输入的是test
(2)Client ID默认即可
(3)服务器地址为刚才创建的MQTT本地服务器,因为客户端在同一台电脑上,所以地址为127.0.0.1
(4)端口号1884
(5)然后单击右上角的连接按钮

在MQTT控制台,单击监控菜单下的客户端,可以看到客户端已经连接成功。

平台配置

平台编译安装的一些注意事项可以看看我的第一篇博客【ThingsBoard初体验】本地编译踩坑记录_window11 idea编译thingsboard-CSDN博客

使用默认租户登录ThingsBoard配置网关:

进入添加新设备页面:

添加Token,这里可以设为10001,后面连接设备需要使用

网关(Gateway)配置

tb_gateway.json

在网关配置文件夹/thingsboard-gateway/thingsboard_gateway/config/下修改tb_gateway.json,tb_gateway.json文件是用来连接ThingsBoard平台的。

将“thingsboard”部分中“host”和“port”修改为ThingsBoard主机和端口的值,我是在本地编译部署的所以主机是localhost,端口是1883

将“security”部分中 "a***essToken"修改为访问令牌"10001"(在平台配置中设置的)

将"connectors"部分中 "type"为"mqtt", "name"为"MQTT Connector", "configuration"为"mqtt.json" ,因为我们要使用MQTT客户端订阅消息。

"thingsboard": {
    "host": "localhost",
    "port": 1883,
    "remoteShell": false,
    "remoteConfiguration": true,
    "latencyDebugMode": false,
    "statistics": {
      "enable": true,
      "enableCustom": true,
      "statsSendPeriodInSeconds": 60,
      "customStatsSendPeriodInSeconds": 3600,
      "configuration": "statistics.json"
    }
"security": {
      "type": "a***essToken",
      "a***essToken": "10001"
    }
"connectors": [
    {
      "type": "mqtt",
      "name": "MQTT Connector",
      "configuration": "mqtt.json"
    }
  ]

mqtt.json

mqtt.json是主要用来配置mqtt连接器的一些细节,用来与MQTT Broker进行连接。一般会包含了设备上行(数据上传)、连接/断开管理、属性同步、RPC 调用等完整链路。

将"broker"部分的“host”和“port”修改为MQTT Broker(EMQX)主机和端口,我是在本地编译部署的所以主机是localhost或者是127.0.0.1,端口是1884

将“security”部分中"type"修改为“basic”,"username"为"admin", "password"为"pubilc",这就是使用用户账号进行访问,我们在访问EMQX控制台,登录页面输入的初始化账号就是用户名:admin 密码:public。

"broker": {
    "host": "127.0.0.1",
    "port": 1884,
    "clientId": "ThingsBoard_gateway",
    "version": 5,
    "maxMessageNumberPerWorker": 10,
    "maxNumberOfWorkers": 100,
    "sendDataOnlyOnChange": false,
    "keepAlive": 60,
    "cleanSession": true,
    "cleanStart": true,
    "sessionExpiryInterval": 0,
    "security": {
      "type": "basic",
      "username": "admin",
      "password": "pubilc"
    }
  }

查看结果

我们运行tb_gateway.py后,出现以下提示信息证明我们网关与ThingsBoard和MQTT Broker均连接成功。

EMQX控制台也出现了两个连接数

MQTTX客户端可以正常发送数据

向Topic /sensor/data 发送MQTT消息

{
  "serialNumber": "A001",
  "sensorType": "Thermo",
  "sensorModel": "T1000",
  "temp": 26.4,
  "hum": 58
}

ThingsBoard平台网关和设备正常活动

设备遥测数据也在更新,正常显示属性

网关遥测数据也在更新,正常显示属性

下一步

后面我想要使用脚本同时模拟多个真实设备发送数据,并且从平台获取数据进行下一步处理。目前还不清楚设备是否都支持MQTT协议,后面可能还要尝试modbus

转载请说明出处内容投诉
CSS教程网 » 【ThingsBoard初体验】ThingsBoard IoT Gateway的使用

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买