一种基于MQTT多层级联的消息路由方法与流程

文档序号:11180428阅读:1669来源:国知局
一种基于MQTT多层级联的消息路由方法与流程

本发明涉及智能家居通信技术领域,特别涉及一种基于mqtt多层级联的消息路由方法。



背景技术:

智能家居网关能够将家庭电器设备通过有线方式、无线方式与它连接后通过一个统一的接口与外部网络进行通信,在智能家居中担任核心角色。但是目前智能家居方案存在诸多不足,一般家庭内部只部署一个网关,单网关所能提供的硬件接口有限,无线通信区域范围受限。虽然采用多网关的结构可以弥补物理距离和硬件资源不足的缺陷,但是多个网关之间的连接和管理是一大难题,所以较少被采用。

当前物联网存在很多传输协议,其中mqtt(messagequeuingtelemetrytransport,消息队列遥测传输)是由ibm公司开发,运行与tcp/ip之上、基于消息推送、可靠、稳健、开源的协议,在通用性、可扩展性、兼容性、耗能和流量等方面都有明显优势。但是当前基于mqtt协议的网络通信存在以下两个问题:由于mqtt通信多采用集中星型网络拓扑,在传统的mqtt远程控制中,家庭内的多个智能家居网关可以各自通过互联网和智能家居服务平台的mqttbroker进行连接通信,这样对于一个家庭来说,多个网关,对外就存在着多个通信的接口,平台对同一家庭多个网关管理不方便,也对多个家庭的多个网关管理不便。另一个问题是当家庭内部存在多个网关时,用户需要访问不同的网关去控制不同区域内的家电设备。

针对当前智能家居方案的不足和mqtt协议通信的特点,本发明提出了一种基于mqtt多层级联的消息路由方法,改进mqtt协议的集中星型网络拓扑,支持多层级联的网关拓扑,使用多网关的智能家居方案,实现多网关之间的多层级联组网并进行消息路由。



技术实现要素:

本发明的目的在于提供基于mqtt多层级联的消息路由方法,改进mqtt协议的集中星型网络拓扑,支持多层级联的网关拓扑,支持多网关的连接组网和消息路由,解决当前智能家居多网关的连接、通信和管理问题,并支持家庭中根据自定义规则将家电设备划分于不同区域进行安全快捷的内网控制和小范围管理。

本发明的目的至少通过如下技术方案之一实现。

一种基于mqtt多层级联的消息路由方法,包括基于mqtt的多网关组网,路由下行和路由上行;

所述基于mqtt多网关组网将新网关添加到原有网络中,在新网关上添加新的家电设备,新网关与其他网关相连形成基于mqtt的多层级联的网络拓扑结构;

所述路由下行指由mqtt控制端发送的消息路由到家电设备,路由下行是在基于mqtt的多层级联的网络中查找网关的下级路由规则,并将消息转发至下级网关;

所述路由上行指家电设备的反馈消息路由到mqtt控制端,其中包括家电设备的反馈消息路由到所有mqtt控制端和家电设备的反馈消息路由到其中一个mqtt控制端。

进一步地,所述的方法包括如下步骤:

步骤一、基于mqtt的多网关组网。

步骤二、在基于mqtt多网关组网的基础上进行路由下行,由mqtt控制端发送的消息路由到家电设备。

步骤三、在基于mqtt多网关组网的基础上进行路由上行,家电设备的反馈消息路由到mqtt控制端。

上述步骤一中基于mqtt的多网关组网包括下述步骤:

(1)、网关启动时先查询本地数据库是否存在自身的uid(uniqueidentifier,全局唯一标识)。若不存在,则根据snowflake算法生成uid,uid用于标识网关,网关自动订阅主题“/uid/#”(mqtt主题格式,斜线(/)是用来分隔一棵主题树里的各个层次,它提供了一个层次结构的主题空间。数字符号(#)即多层次通配符,用来匹配一个主题内的任意层次。“/uid/#”表示在“/uid/”层次下的所有主题)。

(2)、接着查询本地数据库,用户通过web页面配置该节点的上一级路由节点的ip地址。

(3)、然后uid网关与上一级网关uid0进行连接。获得上级网关的路由规则“.../uid0/#”(省略号“...”指该上级网关可能存在比自身层次高的网关,路由规则“.../uid0/#”指可以路由到主题层次为“.../uid0/”以下的所有主题),更新本地路由表中上级网关的路由规则为“.../uid0/#”,当前自身的路由规则为“.../uid0/uid/#”。

(4)、上一级网关接收到uid网关连接后,在自身的下级网关路由规则中添加一条“.../uid/#”。

(5)、uid网关启动设备发现程序、将搜索到且信息匹配的家电设备的sid(systemidentification,系统标识码)与自身的uid,以uid/sid的格式作为家电设备的全局唯一标识(usid),同时网关在自身的设备列表中记录“sid”和路由规则。

(6)、uid网关将usid上报给上一级网关,上级网关在自身的设备列表中记录“uid/sid”和路由规则。

(7)、每一级网关递归执行上一步操作,直到usid上报到智能家居服务平台为止。

优选的,所述步骤(5)中,网关在自身的设备列表中记录“sid”和路由规则具体操作如下:

由于当前网关搜索到sid的家电设备直连到网关上,因此路由规则填写网关自己的uid,并且后缀填写该设备接到网关设备的哪个硬件接口,如串口uart1上,则设备列表中记录“sid”,路由规则“uid/uart0”。

优选的,所述步骤(6)中,uid网关将usid上报给上一级网关,上级网关在自身的设备列表中记录“uid/sid”和路由规则具体操作如下:

uid网关查找路由表中上级网关的路由规则为“.../uid0/”,路由规则作为发布主题的前缀。例如网关发布通知消息,主题为“.../uid0/devinfo_notify”,内容为usid;标识为uid0的上级网关默认自动订阅主题为“.../uid0/#”的消息,便能接收到主题前缀为“.../uid0/”的所有与自身相关的消息。标识为uid0的上级网关接收到usid后在自身原有的设备列表中添加记录“sid”,路由规则为下级网关“uid”。

上述步骤二中在基于mqtt多网关组网的基础上进行路由下行,由mqtt控制端发送的消息路由到家电设备包括下述小步骤:

(1)、经过步骤一组成的多层级联网关结构中,任意一个网关接收到来自mqtt控制端的消息时,先提取消息中的被控对象。

(2)、接着查询本地设备列表。

(3)、若被控对象不存在于本地设备列表中,则上报上一级网关,最终上报到服务平台,服务平台将此消息丢弃。

(4)、若被控对象存在于本地设备列表中,查询路由规则,直接发送该消息给路由规则中的下级网关,如果下一级是自身,则通过相应透传模块将消息发送给家电设备。

优选的,所述步骤(1)(2)中,uid0网关收到mqtt控制消息主题为“.../uid0/control/sid”,先提取出被控对象sid,接着查询本地设备列表存在sid,路由规则为下级网关“uid”,修改主题中uid0为uid,转发该消息到下级网关。

上述步骤三中在基于mqtt多网关组网的基础上进行路由上行,家电设备的反馈消息路由到mqtt控制端包括两种情况,一种是家电设备的反馈消息路由到所有mqtt控制端,一种是家电设备的反馈消息路由到具体某一mqtt控制端。

家电设备的反馈消息路由到所有mqtt控制端包括下述小步骤:

(1)、经过步骤一组成的多层级联网关结构中,任意一个网关接收到来自家电设备的消息时,查询本地的移动控制端列表,获取直连到该网关的所有mqtt控制端。

(2)、接着将消息转发给每一个直连的mqtt控制端。

(3)、将消息上报给上一级网关,并且发送给它的下一级网关。上级网关接收到上行消息除了发送给自己上级,还要发送给除了上报该消息的网关之外的其他下级网关;下级网关接收到上行消息时只下发给下级,每一个网关都会将消息转发给所有直连的mqtt控制端,确保智能家居系统中所有mqtt控制端的信息同步。需注意的是,当下级网关收到来自上级网关的上行消息时,下级网关不再需要将上行消息上报给上级网关,否则会形成广播风暴。

家电设备的反馈消息路由到具体某一mqtt控制端包括下述小步骤:

(1)、经过步骤一组成的多层级联网关结构中,任意一个网关接收到来自家电设备的消息时,查询本地的移动控制端列表,判断是否包含目的mqtt控制端,若存在则发送到该目的mqtt控制端并停止,若不存在则发送到上级网关。

(2)、上级网关接收到消息,重复步骤(1),直至停止或者发送到服务平台。

与现有技术相比,本发明的有益效果在于:

1)改进了mqtt协议的集中星型网络拓扑,支持多层级联的网关拓扑。改进后智能家居服务平台的mqttbroker不需要同时管理来自同个家庭的多个网关,每个家庭可以只有一个一级网关直连到服务平台,相当一个家庭只提供一个对外接口,其余网关连接到一级网关以下;并且当家庭内部存在多个网关时,用户可以通过不同网关去控制不同区域内的家电设备,而无需认定具体某一网关才能控制该设备。

2)支持多网关的连接组网和消息路由,实现一种通过mqtt进行多网关组网的方法。该方法能支持家庭中根据自定义规则将家电设备划分于不同区域进行安全快捷的内网控制和小范围管理,并扩大无线通信区域范围。比如支持将家庭内部根据物理距离或者硬件通信接口划分为不同小区域,如房间一划分为区域一,房间二为区域二,方便用户对不同区域进行不同的控制和管理。

附图说明

图1为实施例中实现的基于mqtt的多层级联网关拓扑图。

图2为实施例中多网关组网流程示意图。

图3为具体实施过程中路由下行流程图。

图4为具体实施过程中路由上行到所有mqtt控制端流程图。

具体实施方式

下面结合附图和具体的实施例对本发明的实施方案做进一步的说明。

本实例的基于mqtt多层级联的消息路由方法,主要由四个步骤组成,步骤如下:

步骤1:基于mqtt的多网关组网:添加新网关,家电设备连接到新网关。具体组网流程如图2所示,最终形成图1的多层级联的网关拓扑图。

a)网关启动时先查询本地数据库是否存在自身的uid。若不存在,则根据snowflake算法生成uid,uid用于标识网关,网关自动订阅主题“/uid/#”。

例如启动新网关,新网关查询不到uid,根据snowflake算法生成uid,网关自动订阅主题“/uid/#”。

b)用户通过web页面配置该节点的上一级路由节点的ip地址。

c)uid网关与上一级网关进行连接。如果上级网关标识为uid0,并直连到智能家居服务平台,将获得上级网关的路由规则“/uid0/#”,更新本地路由表中上级网关的路由规则为“/uid0/#”,当前自身的路由规则为“/uid0/uid/#”。

d)上一级网关接收到uid网关连接后,在自身的下级网关路由规则中添加一条“/uid/#”。

e)uid网关启动设备发现程序、将搜索到且信息匹配的家电设备的sid与自身的uid,以uid/sid的格式作为家电设备的全局唯一标识,同时网关在自身的设备列表中记录“sid”和路由规则。

f)uid网关将usid上报给上级网关uid0,上级网关在自身的设备列表中记录“uid/sid”和路由规则“/uid”。

g)每一级网关递归执行上一步操作,直到usid上报到智能家居服务平台为止。

这里上级网关uid0由于直连服务平台,则将usid上报到智能家居服务平台。

步骤2:用户控制设备,数据路由下行,具体流程如图3所示。

a)用户使用mqtt控制端连上任一网关,比如连上标识为uid0网关。

b)用户发送控制消息控制某一设备,比如发送主题为“/control/sid”控制标识为sid的设备。

c)uid0网关使用最后“/”后缀提取出消息中被控对象为sid

d)uid0网关查找本地设备列表,存在sid,路由规则为“/uid”

e)uid0网关发布接收到的控制消息,主题为“/uid/control/sid”

f)下一级网关uid由于订阅了主题“/uid/#”,于是接收到主题为“/uid/control/sid”的控制消息,同样提取出消息被控对象sid,查找本地设备列表存在“uid/sid”,由后缀匹配可知存在sid,路由规则为“/uid/uart0”,于是转发该消息到本地串口uart0

g)sid家电接收到来自串口uart0的控制消息。

步骤3:设备信息反馈给所有用户,数据路由上行,具体流程如图4所示。

a)任意一个网关接收到来自家电设备的消息时,查询本地的移动控制端列表,获取直连到该网关的所有mqtt控制端,接着将消息转发给每一个直连的mqtt控制端。

比如sid设备状态改变,生成设备状态消息,通过uart0发送给uid网关,uid网关先查询本地移动控制列表获取mqtt控制端列表,逐一发送状态消息给直连到自身的所有mqtt控制端。

b)上级网关接收到上行消息除了发送给自己上级,还要发送给除了上报该消息的网关之外的其他下级网关;下级网关接收到上行消息时只下发给下级,每一个网关都会将消息转发给所有直连的mqtt控制端,确保智能家居系统中所有mqtt控制端的信息同步。

比如uid网关将状态消息发送给上级网关uid0,上级网关uid0接收到后将查询上级路由规则,由于没有上级了就发送给智能家居服务平台,否则发送给上级网关;接着网关uid0查询除了上报的网关uid之外其他下级网关,由于没有则停止,否则发送给下级网关。

同时uid0网关查询本地的移动控制端列表,将消息转发给每一个直连的mqtt控制端。

步骤4:设备信息反馈给特定某个用户,路由数据上行

a)任意一个网关接收到来自家电设备的消息时,查询本地的移动控制端列表,判断是否包含目的mqtt控制端,若存在则发送到该目的mqtt控制端并停止,若不存在则发送到上级网关。

比如sid设备状态改变,生成设备状态消息,并且只想通知标识为uuid(universallyuniqueidentifier,通用唯一识别码)的mqtt控制端,则在状态消息中包含uuid,并通过串口uart0发送给uid网关。uid网关接收到消息后,提取出目的mqtt控制端uuid,并查询本地的移动控制端列表是否存在uuid,若存在则发送并停止,若不存在则查询上级网关路由规则,并发送给上级网关uid0。

b)上级网关接收到消息,重复执行上一步直到发送到目的mqtt控制端或者服务平台。

上级网关uid0收到消息先解析出目的mqtt控制端,再查询本地移动控制列表判断其是否存在,若存在则发送给该mqtt控制端并停止,若不存在,则通知它的上一级网关,由于uid0没有上级网关,所以发送给服务平台并停止。

上述步骤为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

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