• ThingsBoard IoT Gateway 实战(三)- 使用 MQTT Connector 转接灯


    ThingsBoard IoT Gateway 实战(三)- 使用 MQTT Connector 转接灯

    问题描述

    三方厂商的灯接入自有平台,没法直接对接,我方只能作为MQTT客户端订阅消息。

    分析设计

    ThingsBoard本身是MQTT的服务端也就是Broker,无法直接接入
    我们可以

    • 使用 ThingsBoard IoT Gateway 做 MQTT 转换
    • 使用 Emqx 模拟三方厂商的 MQTT broker
    • 使用 MQTTX 模拟三方厂商的设备,也就是 MQTT Client
    设备 MQTT broker 网关 平台 发送MQTT消息 订阅MQTT消息 发送MQTT消息 获取MQTT消息 MQTT消息转换 上传MQTT消息 设备 MQTT broker 网关 平台

    平台配置

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

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

    三方系统模拟

    1、安装EMQX

    下载地址:https://www.emqx.io/zh/downloads
    教程:https://www.emqx.io/docs/zh/v5.0/deploy/install.html

    2、安装MQTTX

    MQTT 图形化客户端-MQTTX安装使用教程

    3、MQTTX发送MQTT消息到EMQX

    开启 EMQX:

    ./bin/emqx start
    
    • 1

    MQTTX 连接 EMQX:
    在这里插入图片描述

    MQTTX 设置订阅,并发送消息验证:
    在这里插入图片描述

    在这里插入图片描述

    网关配置

    网关安装见 ThingsBoard IoT Gateway 实战(一)- 通过 REST Connector 接收环境数据

    到网关配置文件夹编辑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: MQTT Broker Connector
        type: mqtt
        configuration: mqtt_lamp.json
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    json配置

    {
      "host": "http://127.0.0.1:5000",
      "SSLVerify": false,
      "security": {
        "type": "basic",
        "username": "public",
        "password": "public"
      },
      "mapping": [
        {
          "url": "weather",
          "httpMethod": "GET",
          "httpHeaders": {
            "ACCEPT": "application/json"
          },
          "allowRedirects": true,
          "timeout": 0.5,
          "scanPeriod": 5,
          "converter": {
            "type": "json",
            "deviceNameJsonExpression": "${sensorName}",
            "deviceTypeJsonExpression": "${sensorType}",
            "telemetry": [
              {
                "type": "double",
                "key": "temperature",
                "value": "${temp}"
              },
              {
                "type": "string",
                "key": "weather",
                "value": "${weather}"
              }
            ]
          }
        }
      ]
    }
    
    • 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
    • 36
    • 37
    • 38

    注意:
    public/public 是 EMQX 默认密码,请不要用于生产环境!

    查看成果

    向Topic /sensor/data发送MQTT消息

    {
      "on": "on",
      "lightness": 25.6,
      "serialNumber": "Lamp-001",
      "sensorType": "lamp"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    设备出现在设备列表中
    在这里插入图片描述

    遥测数据已经更新
    在这里插入图片描述

    下一步

    MQTT早已成为事实上的IoT标准通信协议,技术方案成熟稳定。
    如果设备能够支持MQTT协议,那MQTT协议就是最优方案。
    然而,工业界的现实是设备多如狗串口遍地走,串口之上modbus才是王者。
    下一节我们就来会会这个王者。

  • 相关阅读:
    Vue控制textarea可输入行数限制-案例
    Swift的可选类型Optional
    医疗产品设计的重要性,你了解多少?
    随时随地查看远程试验数据与记录——IPEhub2与IPEmotion APP
    PyTorch离线安装
    Linux基础指令(五)
    再苦再累也必须要弄懂的:ES6的ES Module
    SpringCloud
    【高并发基础】Spring 事务传播级别及造成死锁的隐患分析
    nfs相关练习
  • 原文地址:https://blog.csdn.net/u010764910/article/details/127569530