大风厂,钱总办公室
钱总:“老郑啊,市场有点不景气,公司决定要走开放平台联盟路线,要将各家三方厂商的设备接入公司原有的物联网平台,也就是ThingsBoard里,这个没问题吧?”
老郑:“小意思,ThingsBoard支持HTTP/CoAP/MQTT,让他们按协议走就行!”
钱总眉头一皱:“就拿A厂来说,原本的环境设备是通过一个HTTP接口接入他们自己平台的,现在就改个地址能不能办?这个是他们的数据格式”,说完直接转发了一段协议说明:
POST http://127.0.0.1:5000/env_devices
{
"sensorName": "ENV-001",
"sensorType": "example",
"temp": 35.3,
"hum": 58.2
}
老郑:“我们目前的平台还对接不了~”。
钱总眉头一皱:“这个不是很简单么?”
老郑擦了擦汗:“这个真不行,不过可以通过 ThingsBoard IoT Gateway 转发。ThingsBoard对安全性考虑的很好,需要每个设备的Token,这些数据属性遥测混杂且无安全验证,所以需要统一发到Gateway再转发到平台。”
钱总:“这个之前没听你说过啊,是ThingsBoard的插件?”
老郑:“是个平台外部的集成软件,我给您仔细讲讲…”
大风厂,研发办公室
ThingsBoard IoT Gateway 是一个集成Thingsboard 开源物联网平台和旧系统/三方系统/设备的开源物联网网关解决方案。
对于 ThingsBoard IoT Gateway 和 ThingsBoard 的关系,官方这张图有一个简单的描述:

简单的说,ThingsBoard处理符合平台数据标准的HTTP/CoAP/MQTT协议数据,ThingsBoard IoT Gateway处理其他一切数据。
通过 设备直连 和 ThingsBoard IoT Gateway 两种方式, 可以说能够接入的设备都可以通过 ThingsBoard 接入。
ThingsBoard IoT Gateway 支持的集成方式如下图:

归类一下,它特别适合以下集成场景:
TCP/UDP协议MQTT/HTTP/CoAP协议,但是内容不符合ThingsBoard协议标准BLE/Modbus/OPC-UA/BACnet等协议的不太适合:
把 ThingsBoard IoT Gateway 部署在 Windows 上
通过 Docker 可以做到但不推荐
通过 旧的Java版本 可以做到但不推荐
设备类型单一、协议简单
为了采用 ThingsBoard IoT Gateway 而采用,不如直接编码对接转换。
说到这,老郑看了看钱总,钱总大手一挥,搞!
参见 ThingsBoard入门实战(一):物联网平台 ThingsBoard 简介
以 linux centos为例:
wget https://github.com/thingsboard/thingsboard-gateway/releases/download/3.1/python3-thingsboard-gateway.rpm
yum install -y ./python3-thingsboard-gateway.rpm
systemctl status thingsboard-gateway
出现如下信息则表示没有配置网关和ThingsBoard连接:
… python3[7563]: ‘‘2022-10-06 09:31:15’ - ERROR - mqtt_connector - 181 - Default Broker connection FAIL with error 5 not authorised!’
… python3[7563]: ‘‘2022-10-06 09:31:15’ - DEBUG - mqtt_connector - 186 - “Default Broker” was disconnected.’
… python3[7563]: ‘‘2022-10-06 09:31:16’ - DEBUG - tb_client - 78 - connecting to ThingsBoard’
… python3[7563]: ‘‘2022-10-06 09:31:17’ - DEBUG - tb_client - 78 - connecting to ThingsBoard’
三方厂商的环境数据(温湿度)上报,其格式和Thingsboard规定的数据格式不一致。
南向连接设备,采用 iot gateway 中的 REST Connector接收三方设备数据并转换成ThingsBoard平台可以接收的数据。
北向连接平台,默认采用 mqtt 和 ThingsBoard 直接对接。
整体数据流如下:
使用默认的租户登录Thingsboard平台,在界面上配置网关:

进入添加新设备页面:
添加Token,这里设为ENV_GATEWAY_TOEKN, 后面会用到。
客户可以不配置,直接把这个设备挂在租户下面就可以了。
可以在设备列表中看到这个网关:

到网关配置文件夹编辑tb_gateway.yaml文件。
vim /etc/thingsboard-gateway/config/tb_gateway.yaml
将“thingsboard”部分中的主机和端口属性值改为ThingsBoard主机和端口。
将“security”部分中的access token修改为访问令牌,也就是ENV_GATEWAY_TOEKN。
网关配置关键部分如下:
thingsboard:
host: thingsboard平台的IP地址
port: 1883
security:
accessToken: thingsboard平台中配置的网关的token,这里是 ENV_GATEWAY_TOEKN
connectors:
-
name: REST ENV Connector
type: rest
configuration: rest_env.json
配置文件夹有一个 rest.json 文件,可以用做参考。
新建 rest_env.json 文件,内容要点如下:
{
"host": "127.0.0.1",
"port": "5000",
"SSL": false,
"security": {
"type": "basic",
"username": "username",
"password": "password"
},
"mapping": [
{
"endpoint": "/env_devices",
"HTTPMethods": [
"POST"
],
"converter": {
"type": "json",
"deviceNameExpression": "${sensorName}",
"deviceTypeExpression": "${sensorType}",
"timeseries": [
{
"type": "double",
"key": "temperature",
"value": "${temp}"
},
{
"type": "double",
"key": "humidity",
"value": "${hum}"
}
]
}
}
]
}
配置完毕后,直接重启网关,出现如下日志即为 Rest连接器 启动成功:
""2022-10-14 11:34:39" - |INFO| - [tb_gateway_service.py] - tb_gateway_service - __init__ - 251 - Gateway started."
======== Running on http://127.0.0.1:5000 ========
(Press CTRL+C to quit)
简单起见直接使用 curl 模拟
curl --user username:password -H "Content-Type: application/json" -X POST \
-d '{"sensorName": "ENV-001", "sensorType": "example","temp": 35.3, "hum": 58.2}' \
http://127.0.0.1:5000/env_devices
注意basic-auth的用户名密码需要和配置文件中对应。
实际项目中,我们会在设备侧通过编程实现设备到网关的http请求。
打开设备列表:

可以看到,网关关联的设备已经被自动加入设备列表中。
点击设备名称,进入设备页面:
最新的环境温湿度数据已经上传。
这节我们主要讲解了ThingsBoard IoT Gateway的安装配置,并配置Rest连接器对接设备,实现设备->网关->平台全线贯通。
至此,我们取到了室内环境设备的温湿度数据。
室外数据怎么样呢?我们换一种思路,从第三方平台开放API直接获取。
下节就揭密 IoT Gateway 的另一个核心玩法:网关通过HTTP请求连接器获取设备遥测消息。