物联网网关开发基于MQTT消息总线的设计过程
物联网网关开发基于MQTT消息总线的设计过程道哥的第 021 篇原创一、前言二、网关的作用三、网关内部进程之间的通信四、网关与云平台之间的通信五、总结一、前言在上一篇中,我们聊了在
道哥的第 021 篇原创
一、前言
二、网关的作用
三、网关内部进程之间的通信
四、网关与云平台之间的通信
五、总结
一、前言
在上一篇中,我们聊了在一个嵌入式系统中,如何利用MQTT消息总线在各进程之间进行通信,文章链接:《我最喜欢的进程之间通信方式-消息总线 》。
这样的通信模型,我之前已经在多个项目中应用过,对于非工控产品来说,通信速度完全足够。我以前做过测试,在x86平台和ARM平台,一条数据从本地到云端绕一下,然后再回到本地,可以控制在毫秒级别。
上篇文章只是简单的介绍了这样的一种设计思路,并没有详细的讨论其中的一些细节问题。这一次,我们就来具体的聊一聊物联网系统中的网关内部程序应该如何设计。
阅读这篇文章,你可以有如下收获:
物联网系统中,设备之间是如何通信的;网关中的进程之间消息总线通信模型;网关内部消息总线上的数据如何与服务器进行通信;作为消遣,了解一下物联网系统中的一些基本知识;
二、网关的作用
物联网这个词语的范畴太广,似乎所有的硬件设备,只要能够接入网络,就可以称之为物联网产品,似乎物联网这个词可以把一切都纳入到其中。
这么空洞的词语不利于我们的讲解,因此我们就用一个可以感知、想象的场景来代替,那就是智能家居系统,这是最能代表物联网时代的典型产品了。
2.1 指令转发
在一个智能家居系统中,假设有这么几个设备:
这些设备的通信模块,如果是 WiFi 或者是蓝牙,那么一般都可以直接通过手机来控制(当然,需要厂家提供相应的手机 APP),手机就相当于一个中心节点,控制着所有的设备。
目前市面上的一些智能设备单品都是这样的通信方式,例如:空调、吸尘器、空气净化器、冰箱等等。只要在这些设备中加一个无线通信模块即可(例如:ESP8266模块)。
如果通信模块是其它的通信模块,例如:RF433、ZigBee、ZWave等,由于手机没有这些通信模块,因此就需要一个网关来“转发”指令。
手机和网关都连接到家中的路由器,处于同一个局域网中,手机把控制指令发送给网关,网关再把指令转发给相应的设备。通信模型如下:
2.2 外网通信
在上面的通信模型中,手机和网关由于处于同一个局域网中,因此可以直接通信。如果手机不在局域网中呢?那么就要通过云端的服务器来转发了,通信模型如下:
手机把指令发到服务器;服务器把指令转发给网关;网关把指令发给指定的设备;
以上描述的是控制指令的流程,如果是设备发出的报警信息呢,数据的流向就是反向进行的。
可以看出,网关是所有设备之间通信的中心节点,也是内网与外网之间通信的中转节点,也就是把各种智能设备连接到互联网的中转器。
2.3 协议转换
上面已经提到,硬件设备上的通信模块都是确定的(RF,ZigBee,ZWave等等),一般来说,可以把这些通信模块称呼为无线通信协议。在一套智能家居系统中,所有设备的无线通信协议大部分都是相同的。
那么,不同类型的无线通信协议设备是否可以共存在同一个系统中呢?
答案是:可以。只要在网关中,集成了相应的无线通信协议模块就可以达到这个目的!如下图所示:
从手机APP上看,所有的设备都是相同的,不会关心设备的无线通信协议是什么,因此,发出的控制指令都是协议无关的。
当网关接收到控制指令时,首先根据指令内容查找出目标设备,然后确定目标设备的无线通信协议,最后把指令发送给对应的硬件通信模块,由该通信模块通过无线电信号把控制指令发送到设备。
从这个指令的传输过程来看,网关就充当着协议转换的角色。
另外还有一种通信场景:当系统中的一个“输入”设备与一个“输出”设备进行绑定/关联时,例如:
红外感应器与声光报警器绑定:当红外感应器监测到人体时,发出信号,然后控制声光报警器发出报警;门磁与灯绑定:当开门时,门磁发出信号,自动打开灯光;
如果“输入”设备与“输出”设备是不同类型的无线通信协议,也需要网关来进行协议转换。
2.4 设备管理
在一个智能家居系统中,设备可多可少,对这些设备进行管理也是很重要的事情。网关作为系统的中心节点,对设备进行管理的重任理所当然就由网关来承担。
设备管理功能包括:
设备的添加和删除;
设备状态的管理(电量、设备断网、失联等等);设备树的管理;
2.5 边沿计算(自动化控制)
在正常的情况下,网关是可以通过路由器,与服务器保持着长连接的。如果服务器的处理能力比较强大,智能家居系统中所有需要处理的事情都可以丢给服务器来计算、处理,服务器在计算之后把处理结果再发送给网关。看起来想法很完美!
但是,考虑下面这 2 种情况:
路由器出现问题了,网关无法连接到服务器,因此就无法把本地数据及时上报;系统中出现了异常情况,需要紧急处理,如果把信息上报到服务器,由服务器计算之后再回传给网关,耗费的时间可能超过了可容忍时间,该如何处理?(可以用车联网系统来脑补一下这个场景:自动驾驶中的汽车遇到紧急情况,如果把所有信息上传给服务器,然后等待服务器的下一步指令?)
对于上面的这些场景,把一些计算、处理操作放在网关这一端来处理也许更合适!这也是近几年比较流行的边沿计算。
1. 边缘计算,是指在靠近物或数据源头的一侧,采用网络、计算、存储、应用核心能力为一体的开放平台,就近提供最近端服务。2. 其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务、应用智能、安全与隐私保护等方面的基本需求。3. 边缘计算处于物理实体和工业连接之间,或处于物理实体的顶端。而云端计算,仍然可以访问边缘计算的历史数据。
首页 下一页 上一页 尾页
无相关信息