一种基于MQTT消息协议的智能设备通讯平台的制作方法

文档序号:15923130发布日期:2018-11-14 00:51阅读:479来源:国知局

本发明涉及一种数字信息传输平台,特别是一种基于mqtt消息协议的智能设备通讯平台。

背景技术

随着互联网的不断发展,消息协议的应用在不断成熟,互联网获取消息的主要方法是消息协议中拉(pull)和推(push)方式,拉方式是指客户端向服务器请求消息的方式,而推方式是指服务器向客户端主动发送消息的方式,推的方式在移动端的使用更为普遍,因为移动端实时的特性,推的方式会给用户更友好的体验,经过多年的研究应用以及新兴物联网、移动通讯和智能设备通讯等领域的快速发展下,xmpp协议和mqtt协议逐渐成为消息协议的两大主流,其中,xmpp(可扩展消息处理现场协议)是由xml协议改进的协议,被用于移动终端上许多实时通讯软件,它的优点是协议完善、功能多样和多延展性强,但是其缺点是协议相对繁杂、冗余、耗能且部署硬件成本比较高,在恶劣的通讯环境下,采用xmpp协议通讯的数据传输会异常的乏力,传输数据的可靠性和s/n过于低下,而mqtt(消息队列遥测传输)是通过发布/订阅的方式传输消息,特别适用在网络不稳定、低带宽的通讯场景以及资源低的智能控制设备中,在满足较低的网络带宽和设备资源的同时,保证消息传递的准确性,因此,在特定情况下,mqtt较xmpp协议具有相当的优势,鉴于国内近几年移动互联网的迅速发展,消息通讯技术在医疗、教育、媒体和电商等行业的应用愈加广泛,而智能设备常常面临计算能力有限、工作频段低、网络不可靠等不良传输条件的大环境下,利用mqtt可发布/可订阅的消息传送模式和开源消息代理软件,设计出为传感器及控制设备的通讯提供支持的通讯平台,具有相当的社会意义。



技术实现要素:

为了克服现有技术的不足,本发明提供一种适用于网络不稳定和低带宽的通讯场景以及资源低的智能控制设备的基于mqtt消息协议的智能设备通讯平台。

本发明解决其技术问题所采用的技术方案是:

一种基于mqtt消息协议的智能设备通讯平台,包括数据发送与信息接收的客户端和信息处理与传送的服务器,所述客户端与所述服务器以mqtt二进制消息的发布/订阅模式消息协议建立无线通讯;

所述客户端包括:

地址发布模块:用于存储并发送mac地址至服务器;

标识订阅模块:用于获取由服务器所分配并发送的设备id和接入时间;

数据发布模块:用于向服务器发送客户端独立的信息数据;

信息订阅模块:用于接收服务器发送的消息内容;

所述服务器包括:

地址订阅模块:用于接收并处理由客户端发送的mac地址;

标识发布模块:用于生成并发送设备id和接入时间;

信息发布模块:用于向客户端发送消息内容;

数据订阅模块:用于接收由客户端发送的信息数据。

所述客户端和服务器架构配置包括如下四个步骤:

步骤1:客户端将地址发布模块内的mac地址发送至服务器;

步骤2:服务器的地址订阅模块接收mac地址后,标识发布模块生成并发送设备id和接入时间至客户端,信息发布模块依据mac地址向客户端发送的消息内容;

步骤3:客户端的标识订阅模块获取由服务器发送的设备id和接入时间后,信息订阅模块根据设备id和接入时间接收客户端发送的消息内容;

步骤4:客户端的数据发布模块将客户端独立的信息数据反馈至服务器,由数据订阅模块所接收,完成客户端和服务器架构配置后,客户端与服务器进行发布/订阅方式的通讯连接。

所述客户端和服务器实现mqtt协议的消息代理软件为mosquitto。

所述步骤4中客户端与服务器建立通讯连接的发布方式流程如下:

(1)、初始化mosquitto库函数,将mosquitto库函数包含的发布订阅函数、连接服务器函数和各类回调函数调设为初始值,并销毁mqtt函数等各种功能函数;

(2)、以mosquitto内部mosq结构体保存的客户端名字建立一个新的客户端;

(3)、设置登记信息、连接信息和发布信息的回调函数;

(4)、以连接信息的回调函数让客户端与服务器保持连接,对数据发布模块和信息发布模块的模块名称、有效负载部分和服务质量进行参量设置并分别发送至服务器和客户端;

(5)、调用mosquitto库函数的内部源码,让客户端与服务器保持长久连接,并释放mosquitto实例的内存空间以及清空moquitto库函数所使用的资源。

所述客户端使用的终端系统为linux。

所述客户端与所述服务器使用的连接保护机制为心跳机制,心跳间隔为300秒。

本发明的有益效果是:本发明基于linux系统和mosquitto开源项目进行客户端构建和服务器的程序编写,而客户端和服务器通过发布/订阅的模式建立连接并通讯,为低功耗传感器、手机、嵌入式计算机、微型控制器等智能设备和移动设备提供mqtt协议通讯平台,利用mqtt消息协议的简洁性能,让通讯平台具有高扩展性的情况下减少接入设备的能源以及流量损耗,能为面临计算能力有限、工作频段低等不良传输条件的终端设备提供高s/n和可靠性的通讯服务。

附图说明

下面结合附图和实施例对本发明进一步说明。

图1是本发明的结平台构示意图。

具体实施方式

参照图1,一种基于mqtt消息协议的智能设备通讯平台,包括数据发送与信息接收的客户端和信息处理与传送的服务器,所述客户端与所述服务器以mqtt二进制消息的发布/订阅模式消息协议建立无线通讯,该通讯平台中的客户端使用linux作为终端系统,所述linux终端系统的开发环境基于现有的g++、libc6-dev、linux-libc-dev、libstdc++6-4.1-dev、code::blocks等环境软件和头文件库构建而成,所述客户端和服务器实现mqtt协议的消息代理软件为mosquitto。

mqtt的消息格式由三个部分组成,分别是固定报文头(fixedheader)、可变报文头(variableheader)和有效载荷部分(payload),每一个mqtt命令消息的消息头都必须含一个固定报文头,用于描述报文信息,如报文的类型、等级等;可变报头会根据不同的类型报文而发生变化,它不是一定存在mqtt消息中;有效载荷部分是客户端和服务端之间的通信内容,内含的总信息除了通信内容还可含模块名(topicname)、客户id(clientidentifier)等信息。

所述客户端与所述服务器使用的连接保护机制为心跳机制,心跳间隔为300秒,客户端会定期发送简易的心跳包给服务器,以保持客户端和服务器的长连接,在mqtt的心跳机制中,每隔一个心跳间隔,客户端会发送一个pingreq(心跳请求)消息给服务器,服务器收到消息后,会回复pingresp(心跳响应)消息给客户端,完成一次心跳交互,然后等待下一轮心跳消息,如果客户端没有收到心跳响应,则会关闭tcp/ip端口连接,让所述客户端与所述服务器实现长时间连接,并能大大减少网络连接的消耗,当客户端与服务器的通信意外掉线或没有在心跳期内进行通信时,会启动will(遗愿)保护机制,服务器会代替客户端发出提前预定义好的lwt消息到所有订阅者的客户端上,这个lwt消息包含模块名目和对应的消息内容,定义在可变报文头中。

所述客户端包括:

地址发布模块:用于存储并发送mac地址至服务器;

标识订阅模块:用于获取由服务器所分配并发送的设备id和接入时间;

数据发布模块:用于向服务器发送客户端独立的信息数据;

信息订阅模块:用于接收服务器发送的消息内容;

所述服务器包括:

地址订阅模块:用于接收并处理由客户端发送的mac地址;

标识发布模块:用于生成并发送设备id和接入时间;

信息发布模块:用于向客户端发送消息内容;

数据订阅模块:用于接收由客户端发送的信息数据。

所述客户端和服务器架构配置包括如下四个步骤:

步骤1:客户端将地址发布模块内的mac地址发送至服务器;

步骤2:服务器的地址订阅模块接收mac地址后,标识发布模块生成并发送设备id和接入时间至客户端,信息发布模块依据mac地址向客户端发送的消息内容;

步骤3:客户端的标识订阅模块获取由服务器发送的设备id和接入时间后,信息订阅模块根据设备id和接入时间接收客户端发送的消息内容;

步骤4:客户端的数据发布模块将客户端独立的信息数据反馈至服务器,由数据订阅模块所接收,完成客户端和服务器架构配置后,客户端与服务器进行发布/订阅方式的通讯连接。

所述步骤4中客户端与服务器建立通讯连接的发布方式流程如下:

(1)、初始化mosquitto库函数,将mosquitto库函数包含的发布订阅函数、连接服务器函数和各类回调函数调设为初始值,并销毁mqtt函数等各种功能函数;

(2)、以mosquitto内部mosq结构体保存的客户端名字建立一个新的客户端;

(3)、设置登记信息、连接信息和发布信息的回调函数;

(4)、以连接信息的回调函数让客户端与服务器保持连接,对数据发布模块和信息发布模块的模块名称、有效负载部分和服务质量进行参量设置并分别发送至服务器和客户端;

(5)、调用mosquitto库函数的内部源码,让客户端与服务器保持长久连接,并释放mosquitto实例的内存空间以及清空moquitto库函数所使用的资源。

mosquitto中发布方式流程代码如下:

mosquitto_lib_init();

mosq=mosquitto_new("[user]publish",true,&obj);

mosquitto_log_callback_set(mosq,my_log_callback);

mosquitto_connect_callback_set(mosq,my_connect_callback);

mosquitto_publish_callback_set(mosq,my_publish_callback);

mosquitto_disconnect_callback_set(mosq,my_disconnect_callback);

mosquitto_message_callback_set(mosq,my_message_callback);

mosquitto_connect(mosq,host,1883,1);

mosquitto_publish(mosq,null,topic,payloadlen,payload,1,true);

mosquitto_loop_forever(mosq,-1,1);

mosquitto_destroy(mosq);

mosquitto_lib_cleanup();

所述客户端与服务器建立通讯连接的订阅方式流程与上述发布方式流程类似,不同处在于发布方式流程4中,数据发布模块和信息发布模块更换为数据订阅模块和信息订阅模块,设置的参数增加了心跳时间(keepalive),mosquitto中订阅方式流程代码如下:

mosquitto_lib_init();

mosq=mosquitto_new("[user]subcriber1",true,&obj);

mosquitto_log_callback_set(mosq,my_log_callback);

mosquitto_connect_callback_set(mosq,my_connect_callback);

mosquitto_message_callback_set(mosq,my_message_callback);

mosquitto_subscribe_callback_set(mosq,my_subscribe_callback);

mosquitto_disconnect_callback_set(mosq,my_disconnect_callback);

if(mosquitto_connect_async(mosq,host,port,keepalive))

{fprintf(stderr,"unabletoconnect.\n");return1;}

mosquitto_subscribe(mosq,&mid,topic,1);

mosquitto_loop_forever(mosq,-1,1);

mosquitto_destroy(mosq);

mosquitto_lib_cleanup();

本发明基于linux系统和mosquitto开源项目进行客户端构建和服务器的程序编写,而客户端和服务器通过发布/订阅的模式建立连接并通讯,为低功耗传感器、手机、嵌入式计算机、微型控制器等智能设备和移动设备提供mqtt协议通讯平台,利用mqtt消息协议的简洁性能,让通讯平台具有高扩展性的情况下减少接入设备的能源以及流量损耗,能为面临计算能力有限、工作频段低等不良传输条件的终端设备提供高s/n和可靠性的通讯服务。

以上的实施方式不能限定本发明创造的保护范围,专业技术领域的人员在不脱离本发明创造整体构思的情况下,所做的均等修饰与变化,均仍属于本发明创造涵盖的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1