【开源学习】TB-gateway -- 基本配置与使用
更新日志:
- 20240131 版本:
- 新增 docker 安装部署时与版本相关的问题;
- 全部配置文件替换为 tb-gateway 版本 3.4.2,更新配置详解:
- 主配置文件由 yaml 格式改变为 json 格式配置,可配置内容增加;
- mqtt 连接器配置内容增加;
- modbus 连接器配置新增 slave 配置,删除 device 配置;
- 全部内容重新测试,测试验证图片更新;
- 新增自定义连接器官方示例的配置测试以及配置步骤总结;
- 注:3.4 版本 modbus 协议存在问题;3.4.3、3.4.4 版本 opcua 协议存在问题!
tb-gateway 安装部署
官方为 ThingsBoard-Gateway 提供了多种安装部署方案,可以根据不同系统进行安装。
centOS 7 安装(不推荐)
采用 centOS 7 作为部署服务器,具体安装步骤如下(注:采用该方法安装2.7以上版本时存在问题,安装会失败):
-
下载 ThingsBoard-Gateway 安装包:
wget https://github.com/thingsboard/thingsboard-gateway/releases/latest/download/python3-thingsboard-gateway.rpm
-
使用 yum 工具安装 ThingsBoard-Gateway:
sudo yum install -y ./python3-thingsboard-gateway.rpm
-
完成后查看 ThingsBoard-Gateway 的运行状态:
systemctl status thingsboard-gateway
此时服务运行可能会报错,因为还没有对服务的相关配置进行更改。
Docker 安装(推荐)
服务器安装 docker 后,直接执行以下命令执行安装最新发行版本(本手册版本为 3.4):
docker run -d -it -v ~/.tb-gateway/logs:/thingsboard_gateway/logs -v ~/.tb-gateway/extensions:/thingsboard_gateway/extensions -v ~/.tb-gateway/config:/thingsboard_gateway/config --name tb-gateway -p 60000-61000:60000-61000 --restart always thingsboard/tb-gateway
其中,-v 指令后冒号之前的文件路径为容器内部文件的挂载位置:
-
~/.tb-gateway/logs
:日志挂载路径; -
~/.tb-gateway/extensions
:网关扩展目录挂载路径(各种协议连接器); -
~/.tb-gateway/config
:配置文件挂载路径;
安装完成后,容器将自动启动,此时查看日志将看到网关连接存在错误,需要修改配置文件。
注:使用 docker 进行安装部署时,需要注意 docker 版本问题,不同版本的 docker 可拉取到的最新 tb-gateway 镜像的版本不同! 使用docker --version
命令可查看 docker 版本。
-
使用 docker 版本为 18.03.1-ce 时,tb-gateway 最新版本镜像为 2.9;
-
使用 docker 版本为时,tb-gateway 最新版本镜像为 3.4.4(截至 2024-01-27);
【2024-01-27】注:版本 3.4.4\3.4.3 在使用 opcua 协议时存在问题。
建议使用 3.4.2 版本!,本文所有测试及配置内容均为 3.4.2 版本。
tb-gateway 通用配置文件
采用 rpm 安装包进行安装的配置文件路径为/etc/thingsboard-gateway/config
,使用 docker 安装的配置文件则在宿主机的挂载路径~/.tb-gateway/config
。该文件夹内包含有基础配置文件 tb_gateway.json,以及各种协议的配置文件,如 mqtt.json、modbus.json、opcua.json 等。
通用的基础配置文件 tb_gateway.json 用于配置到 thingsboard 平台的连接、存储模式以及各种协议连接器。
连接配置模块 thingsboard
该模块中主要配置网关到平台的连接参数,核心参数包括:
-
host
:配置 tb 平台服务器地址; -
port
:配置 tb 平台网关消息接收的端口,默认为 1883(即平台 MQTT 服务器端口); -
remoteShell
:官方未解释,与配置远程 shell 指令相关(后续补充),默认 false; -
remoteConfiguration
:官方未解释,配置是否使用远程配置(3.4.2 以后版本新功能),建议 false; -
statistics
:配置统计收集数据并发送 tb 作为网关设备的属性进行存储(若需要使用的话需要额外的配置文件对要采集的参数进行定义,此处暂不讲解);-
enable
:配置是否启用该功能; -
statsSendPeriodInSeconds
:配置统计收集数据的传输间隔,默认为 3600; -
configuration
:配置采集数据配置文件;
-
-
deviceFiltering
:该功能是可选的,用于配置设备筛选,可以配置筛选允许向 tb 发送数据的设备(若需要使用的话需要额外的配置文件定义筛选设备的规则,此处暂不讲解);-
enable
:配置是否启用该功能; -
filterFile
:配置设备过滤配置文件;
-
-
maxPayloadSizeBytes
:官方未解释,最大的消息负载字节数,默认 1024; -
minPackSendDelayMS
:配置发送数据包之间的延迟,配置过小会导致 CPU 使用量上升; -
minPackSizeToSend
:官方未解释,配置最小的发送数据包大小,默认 500; -
checkConnectorsConfigurationInSeconds
:官方未解释,配置检查连接器配置的时间,默认 60 秒; -
handleDeviceRenaming
:官方未解释; -
security
:安全配置;accessToken
:配置 tb 平台上网关设备对应的 token;
-
qos
:mqtt 协议消息质量等级,默认为 1; -
checkingDeviceActivity
:该功能是可选的,用于配置监控设备的活动;如果对该部分内容进行了配置,网关将每个一段时间对设备的活动状态进行检查;-
checkDeviceInactivity
:配置是否启用该功能; -
inactivityTimeoutSeconds
:配置设备的活跃超时时间,超过该时间的没有响应的设备将被认为处于非活跃状态,默认 200 秒; -
inactivityCheckPeriodSeconds
:配置设备活跃性检查的周期,默认 500 秒;
-
存储配置模块 storage
存储配置模块主要用于设置数据发送到 tb 平台之前如何进行保存,即采集数据的持久化配置,tb-gateway 提供了三种持久化的方式,分别为:
-
memory
:内存存储,将接收到的数据保存到 RAM 内存中; -
file
:文件存储,将接收到的数据保存到硬盘上; -
sqlite
:sqlite 存储,将接收到的数据保存到 .db 文件中;
通过type
参数可以指定上述三种模式,并对各模式中的参数进行配置,网关默认设置为内存存储模式,其可配置参数包括:
-
read_records_count
:从存储中获取并发送至 tb 平台的消息数量; -
max_records_count
:存储中可存储的最大消息数量(超出的消息将丢失);
配置示例:
"storage": {
"type": "memory",
"read_records_count": 100,
"max_records_count": 100000
}
选用文件存储模式时,其可配置参数包括:
-
data_folder_path
: -
max_file_count
: -
max_read_records_count
: -
max_records_per_file
:
配置示例:
"storage": {
"type": "file",
"data_folder_path": "./data/",
"max_file_count": 10,
"max_read_records_count": 10,
"max_records_per_file": 10000
}
选用 sqlite 存储模式时,其可配置参数包括:
-
data_file_path
: -
messages_ttl_check_in_hours
: -
messages_ttl_in_days
:
配置示例:
"storage": {
"type": "sqlite",
"data_file_path": "./data/data.db",
"messages_ttl_check_in_hours": 1,
"messages_ttl_in_days": 7
}
远程调用配置模块 grpc
该模块目前未测试,官方文档未进行解释,待验证;
连接器配置模块 connectors
该模块用于配置要启动的连接器,每一个连接器需要执行下列 3 个参数:
-
useGRPC
:可选配置参数,用于配置当前连接器是否开启 rpc 功能,默认为 true; -
name
:指定连接器名称; -
type
:连接器类型; -
configuration
:连接器的配置文件名称;
配置示例:
"connectors": [
{
"type": "mqtt",
"name": "MQTT Broker Connector",
"configuration": "mqtt.json"
},
{
"type": "modbus",
"name": "Modbus Connector",
"configuration": "modbus.json"
},
{
"type": "opcua",
"name": "OPC-UA Connector",
"configuration": "opcua.json"
}
]
tb-gateway 基础使用
gateway 连接至 tb
在修改通用配置文件 tb_gateway.yaml 之前,首先需要在 tb 平台上创建对应的网关设备,如下所示:
完成网关设备创建后,修改 tb_gateway.yaml 配置文件,配置 host、port 以及 accessToken 字段,分别为 tb 平台的服务地址、tb 平台 MQTT 端口号以及网关设备的访问令牌(设备详情中点击“复制访问令牌”按钮获取,也可自定义,详见 thingsboard 使用手册)。简单的配置示例如下:
{
"thingsboard": {
"host": "192.168.XX.XXX",
"port": 1883,
"remoteShell": false,
"remoteConfiguration": true,
"statistics": {
"enable": true,
"statsSendPeriodInSeconds": 3600
},
"deviceFiltering": {
"enable": false,
"filterFile": "list.json"
},
"maxPayloadSizeBytes": 1024,
"minPackSendDelayMS": 200,
"minPackSizeToSend": 500,
"checkConnectorsConfigurationInSeconds": 60,
"handleDeviceRenaming": true,
"security": {
"type": "accessToken",
"accessToken": "YqZ0moqfS1srMt4OXDWP"
},
"qos": 1,
"checkingDeviceActivity": {
"checkDeviceInactivity": false,
"inactivityTimeoutSeconds": 200,
"inactivityCheckPeriodSeconds": 500
}
},
"storage": {
"type": "memory",
"read_records_count": 100,
"max_records_count": 100000,
"data_folder_path": "./data/",
"max_file_count": 10,
"max_read_records_count": 10,
"max_records_per_file": 10000,
"data_file_path": "./data/data.db",
"messages_ttl_check_in_hours": 1,
"messages_ttl_in_days": 7