Skip to content
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

AIRIOT智慧系统搭建平台经验交流

  1. 主页
  2. 设备接入
  3. 设备接入-mqtt驱动设备接入

设备接入-mqtt驱动设备接入

已定时 已固定 已锁定 已移动 设备接入
帖子 发布者 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • guangdaG 离线
    guangdaG 离线
    guangda
    写于 最后由 编辑
    #1

    1.MQTT简介:

    MQTT全称为消息队列遥测传输,是ISO 标准(ISO/IEC PRF 20922)下基于发布
    (Publish)/订阅 (Subscribe)范式的消息协议,工作在 TCP/IP协议族上。
    MQTT 协议定义两种网络实体:消息代理(message broker)与客户端(client)

    • 消息代理用于接收来自客户端的消息并转发至目标客户端,也被称为MQTT服务器。
    • MQTT 客户端可以是任何运行有 MQTT 库并通过网络连接至消息代理的设备,例如微型控制器或大型服务器。

    MQTT 协议中,消息的传输是通过主题(topic)管理的,消息的发布者和订阅者均为客户端(client)。消息由主题(Topic)和负载(payload)两部分组成。
    当某个客户端有需要分发的数据时,会向连接的消息代理(MQTT服务器)发送指定主题的携带有负载的消息。
    服务器收到消息后,会向订阅此主题的客户端分发此消息。发布者不需要配置订阅者的相关信息和具体位置;同样,订阅者也不需要配置发布者的相关信息和具体位置。

    2.平台配置说明

    添加设备表-安装mqtt驱动-添加设备-配置驱动内容-添加数据点。
    791fa0b4-51bb-44a2-9c85-cb268815ded4-image.png

    配置驱动参数

    • MQTT服务器:填写要连接的mqtt服务器的地址。格式为tcp://服务器IP或域名:服务器端口 例如:tcp://127.0.0.1:1883(填写的是需要订阅的mqtt服务器,平台是mqtt的客户端)

    • 用户名、密码:填写MQTT服务器的用户名和密码。

    • 订阅消息主题:填写该模型要订阅的消息主题,可使用通配符#和+。

    Topic是个utf-8编码的字符串,可由多个'/'分割开。
    +:为单级通配符,如:check/+/baseline 
    #:为多级通配符,必须放在topic的最后,前一个字符必须是'/' 建议Topic中不要包含空格符。
    
    
    • 通讯监控参数:平台通用配置,当某个资产数据点中的最新上数时间距离当前时间超过此参数时,平台判定资产掉线。

    • 自定义脚本:由于mqtt协议中未规定具体的消息内容格式,因此需要用户编写自定义脚本,用于解析消息和组装要发送的消息内容。

    3.使用示例

    示例1
    由于MQTT协议通过主题区分不同种类的消息,因此在使用时,不同的主题需要建立不同的模型,下边以网关常用的MQTT格式为例,介绍脚本的编写方法。示例中d1为数据点编号,资产id为订阅主题中间部分abcd1234。

    消息格式
    f2294aef-ba12-457a-9638-2721032a8934-image.png

    脚本
    66c0ec09-35c4-41f5-8b2a-1b420d9265b3-image.png

    脚本示例:
    69e4e987-f833-4853-8628-bc346263e374-image.png

    示例2:资产id在报文中

    数据格式案例:
    {
    "timestamp": 1617860319, //时间戳
    "version": "5.0",
    "messageId": "3",
    "devices": [{
    "deviceId": "xbzc-001", //资产id
    "deviceState": 1,
    "deviceData": {
    "xbzc-temp": 37.0 //数据点标识和数据
    }
    }]
    }

    自定义脚本案例:

    ParseHandle = function (topic, package) {
      // 解析数据
      let msg = JSON.parse(package.toString())
      // console.log(package.toString())
      //  { id, values, time }
      let arr = []
      if (msg.devices) {
        for (let i = 0; i < msg.devices.length; i++) {
          let id = msg.devices[i].deviceId
          let values = msg.devices[i].deviceData
          let time = msg.timestamp * 1000
          arr.push({ id, values, time })
        }
      }
      return arr
    }

    平台未采集到数据需检查如下内容

    1.mqttbox或者其他客户端能否订阅到该主题消息(以mqttbox演示数据订阅)

    • 打开工具界面如图,点击按钮,创建链接。

    829da435-ccca-48f9-aebe-d4753dcdba14-image.png

    • 配置如图。

    03a273e1-7c82-4119-9639-d99a51b88b73-1692177660706.jpg

    • 链接成功后提示绿色图标,设置右侧订阅的主题,主题内容与服务器发送主题保持一致,填写完成主题后,点击下方橙色按钮,等待消息。

    aac6edb4-d69b-4308-8810-63f9583f0f4e-image.png

    • 如果成功订阅,订阅的消息就会显示在页面。

    506ff577-00ec-4bad-9a9f-b3098d399090-image.png

    2.mqtt驱动的运维日志:运维管理地址(ip:13030)点击查看driver-mqtt-client的驱动日志,滚动条拉至最下方查看驱动日志error内容。

    3.检查用户名,密码是否是mqtt服务器用户名密码,检查自定义脚本解析内容是否修改,检查资产编号是否对应。

    .平台mqtt下发指令配置
    18159dcb-0981-4a50-b916-65c05606d13c-3ff3fc6bfddcdb8a6ce3d983039ef58.png
    op是对象
    op.name 是指令名称
    op.tag是指令配置的tag:写入
    op.value是执行的时候输入的那个值 或者默认值
    e564e37a-44eb-4faa-a4ee-df602f539f59-image.png
    脚本例子:
    CommandHandle = function (topic, id, op) {
    let sendTopic = topic
    let sendData = JSON.stringify([{ [op.tag]:op.value}])
    return { sendTopic, sendData } //返回的对象中的key的名字必须为sendTopic,sendData
    }
    指令配置案例:
    4a370d9c-8fb1-4c4f-9b78-dac72ae5b201-image.png

    4.新建MQTT服务器方法

    1. Windows

    • 在软件安装的目录下找到mosquitto文件夹复制并重命名,重命名后在文件夹下找到mosquitto.conf文件以记事本方式打开,在211行找到port 1883。将端口进行修改 例如1884 然后在文件夹窗口下输入cmd进入命令窗口输入mosquitto.exe -c mosquitto.conf运行。
      121c9872-5d3f-45c4-a242-681874fc60ee-image.png

    • 在软件平台中添加mqtt的服务器
      进入到运维平台127.0.0.1:13030中,点击服务管理—— 添加服务——高级添加应用名称例如:mqtt2, 命令:mosquitto.exe -c mosquitto.conf 目录:../mqtt2 (mqtt2为本文档一中复制的文件夹重命名后名称)
      cdcc6ca7-e9de-44e7-8454-1b7a7d15f33b-image.png

    2. Linux

    • Linux平台启用mqtt server:
      找到docker-compose.yml文件位置
      dce36b07-2156-403b-b3da-b446fed02aa2-image.png
      8d7dc19b-0f2c-46c7-b952-33577847c609-image.png

    • 将下面这句复制到docker-compose.yml里,按照截图修改格式。
      mqttserver: container_name: mqttserver
      environment:
      RABBITMQ_DEFAULT_USER=admin
      RABBITMQ_DEFAULT_PASS=public
      image: airiot/rabbitmq:3.8.3-management-alpine logging: driver: json-file
      options: max-size: 100m max-file: "1" networks: backend
      ports:1884:1883 restart: always ulimits: nproc: 40960 nofile: soft: 10240 hard: 30720 volumes:
      /etc/localtime:/etc/localtime:ro
      dec4f7a2-5122-41ed-88c1-afe2571b4d10-image.png
      配置完成后需要进入平台安装目录下 创建并启动服务:docker-compose up -d
      查看mqtt服务是否启动:docker ps | grep mqtt

    1 条回复 最后回复
    0

  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组