摘要:本文提出了基于Zigbee和MQTT的一种智能家居设计方案,与小米华为等做成品的方案不同,本文方案主要设计的是不同的设备控制器,对于用户定制的自由度大,主要涉及了两种协议的优势和协议对接思想、智能家居应用内容和前景,以及本方案存在的不足和解决方案等内容。
关键词:Zigbee;MQTT;智能家居;JSON;
随着中国物联网和发展和“智能家居”、“智慧中国”等一系列口号的提出,物联网在行各业的应用方案层出不穷。智能家居应用使得人们生活更加便利和智能。智能家居中要求很重要的是大容量和低功耗,Zigbee技术具有低功耗,使用两节干电池可支持一个节点工作6~24个月、容量大,Zigbee可以采用星状,片状、网状等结构,一个节点可以管理254个子节点,如果再增设一层网络节点管理,最多可组成65000个网络节点的网络,足以满足一般家庭中的智能设备容量。另一方面,Zigbee免协议专利费且芯片价格较低,能很好的满足智能家居的应用场景,所以Zigbee技术已经成为很多智能家居方案的首选。目前许多公司都有自己的智能家居方案,但是单纯制作控制设备的方案较少,本文通过Zigbee与MQTT协议的对接,设计许多不同的设备控制模块,作为智能家居定制的应用方案选择之一。
随着人民生活水平的提高,在满足基本生活需求前提下,如何提高生活舒适度和便利程度是当前很重要一个研究方向。网络的普及已经让绝大部分家庭有了网络,这对智能家居的发展和推广有了最重要的支持,智能家居通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境监测、暖通控制、红外转发以及可编程定时控制等多种功能和手段。与普通家居相比,智能家居不仅具有传统的居住功能,兼备建筑、网络通信、信息家电、设备自动化,提供全方位的信息交互功能。
小米智能家居方案,华为Hilink,谷歌智慧家居等都是针对智能家居的方案。但是很多情况下他们的产品智能接入已经制作好的单品,例如内含协议的台灯,制作好的插座等,部署智能家居系统时只能更换整个设备,对于家庭的成本要求变大。而本文的方案可以不更换原设备情况下将任意带电设备接入家居系统,例如普通的插座,可以通过继电器控制通断达到控制效果,普通风扇可以通过调节PWM控制电机转速等,相比于整套的系统,本方案自由度大幅提高且无设备限制,而且相比成本低了很多,对于想要低成本体验智能家居或希望自由度高的用户是个极佳的选择。
而MQTT服务器能跨平台部署,对硬件要求很低。其轻量化、可靠的特点也很适合作为中转服务器。所以MQTT和Zigbee的特点使得其极有可能成为未来智能家居发展的重点技术。
本系统通过含Zigbee协议的设备(如TI的CC2530)监测和控制某终端设备,实时将监控数据通过Zigbee发送到zigbee2mqtt消息中间件上,中间件将处理好的数据再发送到MQTT服务器上,MQTT服务器会将数据发送到PC或者手机端APP实时显示。另一方面,可以通过PC或者手机端发送调整信息给MQTT服务器,MQTT服务器发送给Zigbee设备进而嵌入式单片机根据调整信息调整终端设备参数。例如,本系统可以在家庭中增加烟雾报警器,当烟雾浓度达到阈值时会向手机端APP或者PC端发送警告信息,并且自动调整程序可以自己打开喷水开关。此外,还可以通过PC或者手机端设置闹钟时间,热水器加热时间,窗帘打开关闭时间等。而MQTT服务器可以采用运行linux系统的微型主机或者搭载在阿里云华为云等服务器实现。实现控制不同设备只需要根据不同的需求选择不同的自动调整程序和硬件设备即可,用户定制自由度大。
ZigBee指的是IEEE802.15.4协议,它与蓝牙技术一样,也是一种短距离无限通信技术。作为物联网感知层协议之一,其采用调频、分组技术,具有功率低、容量大、可靠性高、配置简单等优势。相比于其他物联网感知层的短距离无线通信协议,如WiFi、蓝牙等,虽然WiFi组网方便,但传输快、流量大的特点会导致其具有太大的功耗与成本开销。对于物联网感知层来说,对传输的速度与流量并没有很大要求,反而更需要低流量的缓解流量开销的问题。
蓝牙协议虽然也是可以做到比较低的功耗,但其组网上要比ZigBee复杂麻烦得多,不适合物联网下大量节点的组网与数据传输。智能家居的应用场景对传输速率要求并不高,而对技术能耗和部署难易度要求更高。
很多采用433M/315M无线射频技术的智能家居都只有单向通信功能,即只能知道控制信号已经发送成功,但被控制信号的操作命令是否真正执行,被控制的设备是否已经开启或关闭,这是无法或较难获取的,这种不能确认接受方的信息反馈传输模式,已经不能适应市场需求,必须采用双向通信技术,即当信号发送成功后,同时接收设备会把收到的信号即时反馈给发射器,也就是接收器既具有接收功能还具发射功能,ZigBee作为无线双向通信技术,具有自我检测功能,例如,它可随时反馈与查询灯光及电器等设备开关状态,如果是灯光还可以查询灯光亮度级数,可以查询系统中地址的分配情况。所以Zigbee技术更加适合作为智能家居的部署建设技术。
MQTT(Message Queueing Telemetry Transport Protocol,消息队列遥测传输协议),它是IBM公司所推出的一种基于轻量级代理的发布/订阅模式的消息传输协议,运行在TCP协议栈之上,能够提供有序、可靠、双向连接的网络连接保证,具有开放、简单和易于实现等特点,适用于网络带宽低、网络不稳定的场景。
其使用的发布/订阅消息模式,能提供一对多的消息发布与接收;小型传输的特点使得对系统的开销极小,对网络流量的需求很小。对于微型MQTT服务器,其相比HTTP等协议也能支持数十万的消息高并发,足够满足一般家庭的使用。自恢复的特点使得其在网络断开的故障中自动恢复。此外,MQTT还支持各种不同的编程语言和支持开平台部署的特点,使得开发软硬件连接时更加方便。
虽然MQTT存在没有各平台通用SDK包,不支持大文件、音频和视频等信息的传输等缺陷,但是用于物联网时其优点远远大于缺陷,以上许多优势都促进了MQTT协议在物联网组网中的发展,对于智能家居场景来说却一个不错的选择。当前有很多成熟的MQTT协议方案,对于物联网关的部署较为容易。
JSON(JavaScript Object Notation, JS 对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。使用JSON格式不仅对消息传输格式做了统一,使得开发时更加规范,且轻量级的数据传输带宽需求也符合智能家居的应用场景。
对于不同的硬件控制设备,例如可以用继电器控制灯开关、用编码电机控制窗帘打开程度,以及温度,烟雾等传感器监测数据的设备需要用不同的标识区分,而且各个设备返回或接收的参数都不尽相同。需要对不同的硬件设备设计一个统一的标准格式,无论监测到或接收到何种程序,都能与该标准格式互相转换。总结的该标准格式定义描述有以下几项:
string diviceName; //设备名称,同于确定是何种设备。
usigned int diviceNumber; //设备号,用于确定是某种设备中的第几个。
string diviceAreaAddress; //确定设备所在区域地址。
usigned int diviceAreaNumber; //确定设备区域号。
string diviceDataType; //确定设备消息的数据类型。
string diviceDataValue; //设备接收或发送的数据类型。
string publish; //设备发布的主题名称。
string subscribe; //设备订阅的的主题名臣。
上述的参数能唯一确定设备并对设备名称和设备发送接收的消息类型,当接收或需要发送信息时消息需要包含上述的所有元素,发送消息时需要将消息组合成JSON格式传输。
本系统追求低成本,高可靠。在硬件端采用如STM32等单片机,其处理汉字的能力较弱,所以在进行软件开发时将所有汉字用英文或别的简单的标识符代替。
例如,将灯设备的diveceName用L标识符标识,涉及到电机的设备用E标识符标识,涉及到继电器的设备用D标识符表示等。此外,对于许多想要实现的功能指令需要对其简化规定格式才能更加高效的传输,例如,对于灯和继电器设备打开用“1”表示,关闭用“0”表示、对于编码电机等设备将电机旋转角度用整数“0”~“100”表示等,尽可能从细节处优化系统。
Zigbee硬件设备利用串口和用户设备进行串口通信,将接收到数据根据上述定义的消息格式进行格式处理,打包成JSON格式字符串后利用Zigbee网络发送到MQTT服务器,而后服务器将数据发送到PC或手机端APP,而后解读信息,根据消息的设备名称,设备号等显示相应的数据。想要利用手机端APP或PC端控制设备时,也将控制指令按照定义的指令格式格式化后编入JSON格式字符串中,当Zigbee硬件设备接收到MQTT服务器下发的数据时将数据进行解读,并根据不同的指令控制单片机完成不同的工作。从而实现不同通信方式、不同协议和格式的转换与连接,实现硬件设备和PC或手机端APP的通信。
Zigbee和MQTT协议的转换可以通过在Zigbee和MQTT的网关节点上嵌入一个WebServer。目前已有很多不同语言,不同平台的Zigbee2mqtt的方案,在本文方案中可以采用IBM的WebSphere消息中间件产品,根据功能、应用对象的不同有不同的版本。WebSphere Connection Server Micro Edition,称为微型消息代理,主要用于嵌入式的应用,使用MQTT通信协议。当内含Zigbee协议的设备接收到消息中间件发送的消息后将消息提取出对应的控制命令,并通过串口发送给单片机完成对应动作。另外当Zigbee设备需要发送消息时利用中断,完成数据处理、校验的动作,然后发送给消息中间件。消息中间件对信息进行解析得到发布/订阅主题的信息并将剩下的信息重组成新的JSON,后利用MQTT协议将重组后信息发送到PC或手机端APP。至此,zigbee和mqtt协议的转换实现。
本文给出了基于物联网感知层的Zigbee技术和未来一段时间内会比较发展前景较好的MQTT技术的智能家居系统。旨在通过硬件模块的制作,完成对多个Zigbee设备的监测和集中管理,能以低成本和高自由度实现智能家居的部署,给出了整个智能家居系统的设计思想和大致流程,还介绍了Zigebee协议和mqtt协议的转换实现方法。相比于小米华为等产品,低成本和高自由度是本方案最大的亮点,智能家居的迅速发展和需求量的快速增长使得本方案的前景和优势更加突出。
[1]IBM.Websphere Using Java,2004.
[2]张艺粟,等.物联网ZigBee网关的设计与实现[J].计算机系统应用
[3]岑荣滢,等.面向智能家居应用的ZigBee-WiFi网关[J].计算机系统应用
[4]程春潘,王可.基于Zigbee与TCP的物联网网关设计[J].电子信息与计算机科学
[5]LAN-MAN Standards Committee of the IEEE Computer Society. Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks (LR-WPANs), IEEE, 2003
[6]林浒,张家铭,杨海波.基于MQTT协议的即时消息业务设计与实现[J].计算机系统应用