版本说明:以 3.0.1 版本作为基版。
目录结构
分别为配置文件 config,拓展支持 extensions 和日志 logs 三块的内容。
/etc/thingsboard-gateway/config - Configuration folder.
tb_gateway.yaml - Main configuration file for Gateway.
logs.conf - Configuration file for logging.
modbus.json - Modbus connector configuration.
mqtt.json - MQTT connector configuration.
ble.json - BLE connector configuration.
opcua.json - OPC-UA connector configuration.
request.json - Request connector configuration.
can.json - CAN connector configuration.
...
/var/lib/thingsboard_gateway/extensions - Folder for custom connectors/converters.
modbus - Folder for Modbus custom connectors/converters.
mqtt - Folder for MQTT custom connectors/converters.
__init__.py - Default python package file, needed for correct imports.
custom_uplink_mqtt_converter.py - Custom Mqtt converter example.
...
opcua - Folder for OPC-UA custom connectors/converters.
ble - Folder for BLE custom connectors/converters.
request - Folder for Request custom connectors/converters.
can - Folder for CAN custom connectors/converters.
/var/log/thingsboard-gateway - Logs folder
connector.log - Connector logs.
service.log - Main gateway service logs.
storage.log - Storage logs.
tb_connection.log - Logs for connection to the ThingsBoard instance.
文件配置
config/tb_gateway.yml 配置
连接到 thingsX
以下仅列举关键的配置参数:
host 是 thingsboard 的 ip 地址
port 是 thingsboard 的 MQTT 的 port 端口。默认应该是 1883。
accessToken 是网关的口令,拷贝设备网关的 token 即可。
示例:
thingsboard:
host: 192.168.18.105
port: 1883
security:
accessToken: bX9nAyYP1r47lwg0QLF0
存储配置
存储子节中的配置提供了在传入数据被发送到 ThingsBoard 平台之前保存传入数据的配置。
本节有两种变体: 内存或文件。
内存存储-接收到的数据保存到 RAM 内存。
文件存储-接收数据保存到硬盘驱动器。
SQLite 存储-接收数据保存到。数据库文件。
连接器配置
连接器节配置中的配置,用于通过实现的协议连接到设备。
启用 MQTT Connector 配置
在通用配置中启用该种连接器。这个连接器能够连接到外部的 MQTT Broker 并订阅,从而获取从设备中上报的数据,同时,连接器也可以推送来自 ThingsBoard 数据到 MQTT Broker。
这里以演示 mqtt 连接器配置。前提是已安装 mqtt broker。
配置 gateway 中的 config/mqtt.json
这里面最主要的是 broker 这段。
host 就是 broker。的 ip 地址
port 是 broker 的 port 端口
security 是默认的安全配置
配置中的转换器模块
该配置包含一组主题数组,网关将会订阅这些主题并处理设备上报的数据。
Example Name | Topic | Topic Filter | Payload | Comments |
---|---|---|---|---|
Example 1 | /sensor/data | /sensor/data | {“serialNumber”: “SN-001”, “sensorType”: “Thermometer”, “sensorModel”: “T1000”, “temp”: 42, “hum”: 58} | Device Name is part of the payload |
Example 2 | /sensor/SN-001/data | /sensor/+/data | {“sensorType”: “Thermometer”, “sensorModel”: “T1000”, “temp”: 42, “hum”: 58} | Device Name is part of the topic |
属性说明:
deviceNameJsonExpression 设备名称
deviceTypeJsonExpression 设备类型,作为 Device profile
connectRequests 说明
ThingsBoard 允许向设备发送关于设备属性更新的 RPC 命令和通知。但是为了发送它们,平台需要知道目标设备是否连接,以及目前使用哪个网关或会话连接设备。如果你的设备不断地发送遥测数据,那么 ThingsBoard 已经知道如何推送通知。如果您的设备刚刚连接到 MQTT 代理并等待 commands/updates
,则需要向 Gateway 发送消息并通知设备已连接到代理。
举例
mosquitto_pub \
-h YOUR_MQTT_BROKER_HOST \
-p YOUR_MQTT_BROKER_PORT \
-t "sensors/connect" -m '{"serialNumber":"SN-001"}'
或
mosquitto_pub \
-h YOUR_MQTT_BROKER_HOST \
-p YOUR_MQTT_BROKER_PORT \
-t "sensor/SN-001/connect" -m ''
disconnectRequest 说明
此配置部分是可选的。 本节提供的配置将用于从代理获取有关断开设备的信息。 如果您的设备仅与 MQTT 代理断开连接并等待commands/updates,则需要向网关发送消息,并通知设备已与代理断开连接。
mosquitto_pub -h YOUR_MQTT_BROKER_HOST \
-p YOUR_MQTT_BROKER_PORT \
-t "sensors/disconnect" -m '{"serialNumber":"SN-001"}'
mosquitto_pub -h YOUR_MQTT_BROKER_HOST \
-p YOUR_MQTT_BROKER_PORT \
-t "sensor/SN-001/disconnect" -m '
attributeUpdates 说明
此配置部分是可选的。 ThingsBoard 允许供应设备属性,并从设备应用程序中获取其中的一些属性。 您可以将此视为设备的远程配置。您的设备能够从 ThingsBoard 请求共享属性。 有关更多详细信息,请参见用户指南。
attributeRequests 配置允许配置相应的属性请求和响应消息的格式。
"retain": true, 默认为 false,如果设置为 true,该消息将被设置为主题的“last known good”/保留消息
"deviceNameFilter": "SmartMeter.*", 正则表达式设备名称筛选器,用于确定要执行哪个函数。
"attributeFilter": "uploadFrequency", 正则表达式属性名筛选器,用于确定要执行哪个函数。
"topicExpression": "sensor/${deviceName}/${attributeKey}", JSON-path 表达式用于创建用于发送消息的主题地址。
"valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}" JSON-path 表达式用于创建将发送到主题的消息数据。
我们通过 mqtt.js 进行客户端请求发送。
如果不出意外,我们将发现网关已将我们配置的设备信息已经显示到 thingsboard 中去了。
网关功能特性演示
见 likai / bat-tb-gateway-test · GitLab 项目
http://192.168.3.175:9494/likai/tbSimpleHttpOrMqttOrCoapTest
开启网关的远程日志
激活日志功能和设置日志记录级别
在添加共享属性窗口中。
The name field 必须选择 RemoteLoggingLevel
The value field 用于设置日志打印级别, 可选值如下:
DEBUG
INFO
WARNING
ERROR
CRITICAL
NONE
在 dashboard 中显示日志
打开网关设备的“最新遥测”选项卡,您将看到新的遥测 LOGS 数据。
1. 勾选 LOGS 选项并点击 “Show on widget” 按钮:
2. 使用默认的 Cards widget:
3. 选择 Timeseries 表 Card 小部件并将其添加到 Dashboard。它可以是新的,也可以是现有的仪表板。
使用 RPC API
创建 dashboard
要使用调试终端,我们必须从 Control 小部件包中添加 RPC 调试终端小部件。
为此,我们采取以下步骤:
1. 打开“仪表板”选项卡;
2. 添加一个新的仪表板;
3.打开创建的仪表板,进入编辑模式,点击右下角的铅笔按钮,点击“添加新的小部件”按钮;
4. 选择 widget bundle-“Control widgets”;
5. 向下滚动并选择 RPC 调试终端小部件;
5. 我们还没有为小部件指定实体类型,所以我们将创建一个新的;
7. 填写所需的字段和相同的实体。网关-是我们的网关设备;
8. 应用所有变更;
9. 已连接的小部件看起来像(自动连接设置)。
现在您可以使用调试终端将 RPC 请求发送到网关。
Gateway RPC methods
gateway_ping RPC method
gateway_ping RPC 方法用于检查到网关的连接和 RPC 处理状态。每个前缀为 “gate_” 的命令将被解释为对通用网关服务的命令,而不是对连接器或设备的 RPC 请求。命令: gateway_ping
gateway_devices RPC method
gateway_devices RPC 方法用于列出通过网关连接的设备,其中包含关于所使用的连接器类型的信息。此方法在 “resp” 中返回具有键值参数的对象,其中: key 是设备名称, 值是标识连接器
gateway_restart RPC method
用于调度重新启动动作,例如 bash gateway_restart 60
设置在60秒内重新启动闸道服务。这种方法使用秒作为测量单位。
gateway_restart 60
gateway_reboot RPC method
用于调度网关设备(硬件?)的重启例如,bash gateway_reboot 60
在一分钟内设置网关设备的重新启动。请注意: 如果以 python 模块而不是守护进程方法启动网关服务,并且运行网关的用户具有重新启动权限,则可以使用此方法。命令:
gateway_reboot 60
激活远程 shell
1. 在通用配置文件(tb_gate.yaml)的 thingsboard 部分中,应该将参数 RemoteShell 添加或更改为 true;
警告: 此功能可能会导致您的设备的安全问题,我们强烈建议只使用 ssl 加密,如果您不需要,不启用它。
2. 创建 dashboard
选择 widget bundle-“Control widgets”;
向下滚动并选择 RPC 远程 shell 小部件;
填写所需字段和相同的实体。网关-是我们的网关设备;
现在您可以使用 shell 来控制带有网关的设备。例如,我们运行 ls 命令来获取工作目录中的文件和目录列表。
设备重命名/移除处理
如果设备是使用网关 API 供应的,并且稍后在具有管理权限的用户上重命名或删除 ThingsBoard 上的设备实体,则网关将收到更改通知。这对于网关跟上实际设备实体状态至关重要。在某些改进之前,可能会出现这样的情况: 网关不知道删除或重命名设备实体,因此物理设备会将数据发送到不存在的端点。从 TB v3.3.3 开始,平台使用持久性 RPC 解决了这个问题,以避免上述数据丢失场景。下面你可以找到更多关于解决方案实现的信息。
设备重命名方案
网关使用设备实体名称报告来自连接设备的遥测信息。如果实体名称在 ThingsBoard UI 上被更改,最终用户可能会遇到用旧名称重新配置设备实体(通过网关)的情况。有关重命名的 to-网关通知时,这种情况已经不复存在。
设备删除方案
在 ThingsBoard UI 上删除设备实体会导致数据丢失,因为网关本身不能也不能正确地解决删除问题。通过向网关发送“已删除”通知,后者代表物理设备启动一个新的连接消息,因此该消息不会丢失数据。
网关设备的 RPC 数据示例:
{ "method": "gateway_device_renamed",
"params": {"Old device name": "New device name"} }
{ "method": "gateway_device_deleted",
"params": "Removed device name"
}
ThingsBoard 设置 1 天作为 RPC 的超时。
参考文档
https://thingsboard.io/docs/iot-gateway/what-is-iot-gateway/