• ThingsBoard IoT Gateway 实战(一)- 入手


    ThingsBoard IoT Gateway 实战(一)- 通过 REST Connector 接收环境数据

    1. 背景

    大风厂,钱总办公室

    钱总:“老郑啊,市场有点不景气,公司决定要走开放平台联盟路线,要将各家三方厂商的设备接入公司原有的物联网平台,也就是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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    老郑:“我们目前的平台还对接不了~”。
    钱总眉头一皱:“这个不是很简单么?”
    老郑擦了擦汗:“这个真不行,不过可以通过 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等协议的
    • 旧系统/三方系统/设备使用三方自定义协议的
    • 无法与旧系统/三方系统直接集成,需要通过数据库、FTP等方式间接集成
    • 需要持久化设备数据的

    不太适合:

    • 把 ThingsBoard IoT Gateway 部署在 Windows 上
      通过 Docker 可以做到但不推荐
      通过 旧的Java版本 可以做到但不推荐

    • 设备类型单一、协议简单
      为了采用 ThingsBoard IoT Gateway 而采用,不如直接编码对接转换。

    说到这,老郑看了看钱总,钱总大手一挥,搞!

    2. 安装

    2.1 安装 ThingBoard

    参见 ThingsBoard入门实战(一):物联网平台 ThingsBoard 简介

    2.2 安装 ThingsBoard IoT Gateway

    以 linux centos为例:

    1. 下载安装包。
    wget https://github.com/thingsboard/thingsboard-gateway/releases/download/3.1/python3-thingsboard-gateway.rpm
    
    • 1
    1. 使用yum安装网关
      以软件包形式安装ThingsBoard网关并以守护程序身份运行,请使用以下命令:
    yum install -y ./python3-thingsboard-gateway.rpm
    
    • 1
    1. 检查网关状态
    systemctl status thingsboard-gateway
    
    • 1

    出现如下信息则表示没有配置网关和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’

    3. 实战

    3.1 问题描述

    三方厂商的环境数据(温湿度)上报,其格式和Thingsboard规定的数据格式不一致。

    3.2 分析设计

    南向连接设备,采用 iot gateway 中的 REST Connector接收三方设备数据并转换成ThingsBoard平台可以接收的数据。

    北向连接平台,默认采用 mqtt 和 ThingsBoard 直接对接。

    整体数据流如下:

    设备 网关 平台 上传HTTP消息 消息映射转换 上传MQTT消息 设备 网关 平台

    3.3 Thingsboard 平台配置

    使用默认的租户登录Thingsboard平台,在界面上配置网关:
    在这里插入图片描述
    进入添加新设备页面:在这里插入图片描述添加Token,这里设为ENV_GATEWAY_TOEKN, 后面会用到。
    在这里插入图片描述客户可以不配置,直接把这个设备挂在租户下面就可以了。
    可以在设备列表中看到这个网关:
    在这里插入图片描述

    3.4 Thingsboard 网关配置

    到网关配置文件夹编辑tb_gateway.yaml文件。

    vim /etc/thingsboard-gateway/config/tb_gateway.yaml
    
    • 1

    将“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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.5 Thingsboard 网关连接器配置

    配置文件夹有一个 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}"
              }
            ]
          }
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    配置完毕后,直接重启网关,出现如下日志即为 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)
    
    • 1
    • 2
    • 3

    3.6 设备模拟(通过http协议)

    简单起见直接使用 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
    
    • 1
    • 2
    • 3

    注意basic-auth的用户名密码需要和配置文件中对应。
    实际项目中,我们会在设备侧通过编程实现设备到网关的http请求。

    3.7 查看结果

    打开设备列表:
    在这里插入图片描述
    可以看到,网关关联的设备已经被自动加入设备列表中。
    点击设备名称,进入设备页面:
    在这里插入图片描述最新的环境温湿度数据已经上传。

    4. 下一步

    这节我们主要讲解了ThingsBoard IoT Gateway的安装配置,并配置Rest连接器对接设备,实现设备->网关->平台全线贯通。

    设备 网关 平台 上传HTTP消息 HTTP消息转换 上传MQTT消息 设备 网关 平台

    至此,我们取到了室内环境设备的温湿度数据。
    室外数据怎么样呢?我们换一种思路,从第三方平台开放API直接获取。
    下节就揭密 IoT Gateway 的另一个核心玩法:网关通过HTTP请求连接器获取设备遥测消息。

  • 相关阅读:
    重磅 | 思特威获得ISO 26262:2018汽车功能安全ASIL D流程认证证书
    Java常规题技术分享
    电子器件系列44:环形线圈电感
    细胞膜仿生修饰树枝状聚酰胺-胺PAMAM/细胞膜修饰超声造影剂/介孔硅
    645. 错误的集合
    Vue3:解决基地址不同 数据交互http与https跨域问题
    不懂分布式系统概念没关系,这份足足《800页分布式系统概念》啃完不信你还不懂!
    【leetcode】【2022/8/25】658. 找到 K 个最接近的元素
    做SEO为什么有的网站收录很难做?
    Win10安装配置node-nvm管理
  • 原文地址:https://blog.csdn.net/u010764910/article/details/127183420