关注官方微信

EN

EN.

MQTT网关的使用方法

发布时间:2019-08-27 作者:上海卓岚 浏览量:12685
1.概述

MQTT是一种发布(publish)/订阅(subscribe)协议,MQTT协议采用发布/订阅模式,所有的物联网终端都通过TCP连接到云端,云端通过主题的方式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。MQTT 协议解决了物联网中一个最基础的问题:设备和设备之间、设备和云端服务之间是如何进行数据通讯的。

JSON数据采集网关工作原理示意图

MQTT网关起到将普通的串口数据、Modbus RTU数据等转化为MQTT协议的作用,通过连接服务器、订阅和发布主题来实现传统设备和MQTT云端的联系。例如,笔记本和手机都向MQTT服务器订阅了消息主题为温度的消息,当MQTT网关向这个服务器发布温度传感器的消息(当前温度为21℃),笔记本和手机都会收到发布的温度。卓岚的MQTT产品可以充当本地设备和MQTT云服务器之间的桥梁。

卓岚的MQTT网关种类繁多,有如下几种类型:

类型 型号
4G DTU ZLAN8303-7 ↴
以太网 ZLAN5143 ↴
Wifi+以太网 ZLAN7144 ↴
Wifi ZLAN7146 ↴
内嵌MQTT网关模块(以太网) ZLSN2043S ↴
内嵌MQTT网关模块(wifi) ZLSN7046T ↴
内嵌MQTT网关模块(wifi+以太网) ZLSN7044 ↴
MQTT网关单芯片 ZLAN1043 ↴
MQTT数据采集网关(8路模拟量输入、数字量输入/输出) ZLAN6844 ↴

除了数据采集网关通过模拟量和数字量对外接口外,其它MQTT网关都采用串口(RS485、RS232、RS422、TTL)来和设备对接。支持MQTT云平台有百度云、阿里云等。

卓岚MQTT网关的特色在于,不仅支持透传,而且支持将各类串口协议转化为JSON格式。且支持设备的自动采集。举个例子来说,如果温度传感器采用的是Modbus RTU格式的串口协议,需要解决两个问题:

1.自动采集:温度传感器采用的Modbus RTU协议需要每隔一段时间去询问设备,获得当前温度。但MQTT协议属于有消息就发布的机制MQTT服务器无法担任这个任务,必须让MQTT网关自动查询温度传感器,并将获得数据存储起来,并定时上发服务器。卓岚MQTT网关可配置Modbus轮询指令或者非标准的串口设备指令。

2.格式转化:设备端采用的是十六进制指令,比如01 03 02 12 34 b5 33的数据,这种数据对于云端比较难统一和识别。卓岚MQTT网关支持将Modbus RTU数据转化为JSON格式后上发,比如以上十六进制数据变为:{“power”:”1234”}这种格式。

总结一下卓岚MQTT网关主要特点是:

1.采用MQTT为基础的协议和服务器建立连接,采用订阅发布的形式进行数据通讯。

2.支持Modbus RTU寄存器的自主设计和自动采集。

3.支持将特定的Modbus寄存器内容转化为JSON格式定时主动上发。

4.支持在JSON格式中加入设备ID,方便云端识别设备。

5.支持无符号数据和有符号数据,支持小数点表示,支持4字节长度数据。

6.所有配置都可以界面化配置完成,用户自主配置无需定制。




2.MQTT用法实例

MQTT可以单独使用也可以和JSON功能配合使用。当单独使用的时候MQTT功能将串口数据透传上发MQTT服务器。也就是将串口接收的数据作为MQTT的载荷。同时MQTT的载荷会以透传的方式从串口输出。实现串口转MQTT。

设备配置

首先搜索到设备,然后点击编辑设备:

点击“固件与配置”,弹出配置下载和设计对话框:

这里选择“网页目录下载”,然后选择一个空的目录,比如MQTTHTTPD目录,然后先点击“清除全部”清除之前的设计(注意如果之前按有JSON设计的,则不要清除全部,否则会清除之前的JSON设计)。然后点击MQTT配置。

这里配置说明如下:
1.服务器域名或IP:这里填写的是MQTT服务器的IP,最长为30个字符。
2.用户名:是MQTT服务器的用户名。
3.密码:是这个用户的登录密码。
4.客户端ID:是MQTT的client ID。
5.订阅主题:是这个设备订阅的主题,有其它设备发布这个主题的时候,服务器会下发给这个设备。如果只是发布,一般无需填写这个字段。
6.发布主题:这个设备串口转MQTT的时候向服务器发送的数据的主题。
7.MQTT高级参数:用于配置高级参数。
8.保存MQTT设置:设计完毕点击这个按钮进行保存,然后点击网页下载目录的“下载按钮”下载。




现在先点击“MQTT高级参数”(一般无需配置高级参数):

说明如下:
1.协议版本:目前主流的是3.1.1版本,如果需要选择3.1版本,请在这里选择。
2.保活时间:MQTT的心跳时间,最少为10秒,默认为60秒。
3.服务器清除订阅:客户端断线后服务器是否清除订阅信息。
4.是否启用遗愿:是否有遗愿。
5.遗愿主题:遗愿主题。
6.遗愿信息:遗愿的信息。
7.是否保存遗愿:服务器是否需要保持客户端异常离线时发送给客户端的遗愿消息。
8.遗愿质量:服务器发送的遗愿消息的交付质量级别。
9.订阅质量:订阅的交付质量级别。有的情况下需要设置为0,防止重传引起断线。
10.发布质量:客户端发布消息的交付质量级别。有的情况下需要设置为0,防止重传引起断线。
11.是否保存发布:服务器是否保持最后一条消息(如果有新的客户端订阅则发送给客户端)。




我们这里不修改高级参数。直接点击“保存MQTT设置”。然后点击“下载”

下载完毕点击确定,此时会回到设备管理对话框,看到设备的目的IP、工作模式、目的端口已经自动修改为MQTT的设置:

如果没有自动修改则需要在设备编辑对话框下,设置目的IP、工作模式、目的端口。然后点击“修改设置”。

这样配置就完成了。

数据测试

连接完成后设备的LINK灯(一般为中间的蓝色灯)变亮。说明设备正常连接上MQTT服务器。

现在打开串口工具:

使用和设备一样的波特率打开串口,并发送数据“dev send”,此后在接收窗口看到返回的数据“dev send”。这是由于我们将dev send这个信息以zlansub的主题发布给MQTT服务器。但是同时我们的设备也订阅了zlansub这个主题,所以服务器立刻会给我们发送一个订阅信息,订阅信息的内容就是dev send。这个信息作为MQTT的载荷发送下载,通过透传的方式从串口输出。

如果其它设备发布信息过来,这个设备也能够收到数据。

一般来说,用户可以直接将串口指令(比如Modbus RTU)指令直接透传给MQTT服务器。另外也可以使用JSON功能,采用自动Modbus RTU格式采集,定时JSON格式上发的形式。另外也可以找上海卓岚定制一些非标的仪表和上位机协议格式。

MQTT+JSON

如果需要实现JSON格式嵌套在MQTT中,那么需要在ZLVircom的“网页/程序下载工具”对话框中点击“JSON配置”按钮(就在MQTT配置按钮旁边)。配置的方法参考JSON相关配置文档。

将上述的JSON和MQTT相组合可以实现如下的功能:
1.采用MQTT为基础的协议和服务器建立连接,采用订阅发布的形式进行数据通讯。但是封装的是JSON格式数据。
2.支持Modbus RTU寄存器的自主设计和自动采集。
3.支持将特定的Modbus寄存器内容转化为JSON格式定时主动上发。
4.支持在JSON格式中加入设备ID,方便云端识别设备。

如果需要MQTT+JSON转Modbus RTU功能的,可以分别设计MQTT和JSON,不分先后次序。设计完一种不要点击“清除设计”按钮,两个设计完,一起点击“下载”按钮下载到设备内容。

一般可以下载后手动重启设备,加载设置。