MQTT是一种发布(publish)/订阅(subscribe)协议,MQTT协议采用发布/订阅模式,所有的物联网终端都通过TCP连接到云端,云端通过主题的方式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。MQTT 协议解决了物联网中一个最基础的问题:设备和设备之间、设备和云端服务之间是如何进行数据通讯的。
MQTT网关起到将普通的串口数据、Modbus RTU数据等转化为MQTT协议的作用,通过连接服务器、订阅和发布主题来实现传统设备和MQTT云端的联系。例如,笔记本和手机都向MQTT服务器订阅了消息主题为温度的消息,当MQTT网关向这个服务器发布温度传感器的消息(当前温度为21℃),笔记本和手机都会收到发布的温度。利来囯际W66的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云平台有百度云、阿里云等。
1.自动采集:温度传感器采用的Modbus RTU协议需要每隔一段时间去询问设备,获得当前温度。但MQTT协议属于有消息就发布的机制MQTT服务器无法担任这个任务,必须让MQTT网关自动查询温度传感器,并将获得数据存储起来,并定时上发服务器。利来囯际W66MQTT网关可配置Modbus轮询指令或者非标准的串口设备指令。
2.格式转化:设备端采用的是十六进制指令,比如01 03 02 12 34 b5 33的数据,这种数据对于云端比较难统一和识别。利来囯际W66MQTT网关支持将Modbus RTU数据转化为JSON格式后上发,比如以上十六进制数据变为:{“power”:”1234”}这种格式。
1.采用MQTT为基础的协议和服务器建立连接,采用订阅发布的形式进行数据通讯。
2.支持Modbus RTU寄存器的自主设计和自动采集。
3.支持将特定的Modbus寄存器内容转化为JSON格式定时主动上发。
4.支持在JSON格式中加入设备ID,方便云端识别设备。
5.支持无符号数据和有符号数据,支持小数点表示,支持4字节长度数据。
6.所有配置都可以界面化配置完成,用户自主配置无需定制。
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格式上发的形式。另外也可以找上海利来囯际W66定制一些非标的仪表和上位机协议格式。
如果需要实现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,不分先后次序。设计完一种不要点击“清除设计”按钮,两个设计完,一起点击“下载”按钮下载到设备内容。
一般可以下载后手动重启设备,加载设置。