《电子技术应用》

基于Websocket的智能家居远程控制系统的实现

2017年电子技术应用第10期 作者:单振华,王舒憬,强 杰
2017/11/14 13:39:00

单振华,王舒憬,强  杰

(上海大学 机电工程及自动化学院,上海200072)


    摘  要: 针对开发基于移动设备智能家居控制系统的高成本问题。设计了基于Websocket技术实现的通过HTML5客户端控制的智能设备。HTML5客户端可实现跨平台使用,无需考虑智能手机或电脑平台各个操作系统的兼容性。通过Websocket发送指令至服务器,再由服务器转发给智能设备,实现了智能家居的远程控制。此外,Websocket具有很好的实时传输特性,使得程序能够实现低延时。

    关键词: 智能家居;远程控制;移动设备;跨平台

    中图分类号: TN926;TP273

    文献标识码: A

    DOI:10.16157/j.issn.0258-7998.170114


    中文引用格式: 单振华,王舒憬,强杰. 基于Websocket的智能家居远程控制系统的实现[J].电子技术应用,2017,43(10):124-127.

    英文引用格式: Shan Zhenhua,Wang Shujing,Qiang Jie. Design of Websocket-based smart home remote-control system[J].Application of Electronic Technique,2017,43(10):124-127.

0 引言

    随着人们生活水平的提高,对家居智能化提出了更高的要求,越来越注重家居产品的高效、安全和便利。智能家居系统具有高效、便利、快捷、智能化和个性化的特点,在创造安全舒适便利的生活环境、改善人们的生活质量上起到极大的作用[1]。而利用HTML5作为智能设备的客户端,由于其良好的跨平台性,可以很容易地移植到移动端和电脑端,极大地减少了开发成本。

    本文提出了利用Websocket技术和Airkiss技术实现远程控制WiFi智能设备的具体设计。利用Websocket技术,实现了Web平台上的与服务器端的长连接;利用Airkiss技术实现了WiFi智能设备的快速入网[2]。通过云计算平台将HTML5客户端发来的控制指令转发给WiFi智能设备,实现了对于智能设备的远程控制,突破了距离对于智能设备控制的影响。

1 技术原理

1.1 Airkiss技术

    智能设备若想具备远程控制的能力,需要将其WiFi模块连接入网。如何能让智能设备简单快速的入网,是每个智能设备研究领域的一大命题。Airkiss就是一种WiFi设备快速入网配置的技术[3]

    WiFi设备以工作站模式运行,接收由手机WiFi发送并由路由器转发出去的所有符合802.11格式数据包。802.11有多个信道,APP可确定手机WiFi的发送信道,这就可以要求WiFi设备在某一时刻内切换信道,使得手机WiFi和WiFi设备在该时刻处于同一信道,以便于接收数据包[4]。802.11物理层协议数据帧格式如图1所示。

jsj2-t1.gif

    DA字段表示目标MAC,SA字段表示源MAC,LLC表示逻辑控制,SNA表示厂商和协议标识,FCS表示校验码。这5个字段虽然没有加密,但APP层没有权限修改,所以用Length字段来表示。

1.2 Websocket技术

    Websocket协议是一种基于一个TCP长连接的、可实现全双工通信的新一代客户端与服务器端的一步通信协议,即客户端能向服务器端发送请求数据,同时服务器端也可以主动推送数据到客户端。Websoket通信模型如图2所示。其通信过程是首先客户端发送请求头信息到服务器端[5],然后服务器端对请求头信息进行判断是否是Websocket请求,如果是,则会发送一次握手信息到客户端。仅需这一次握手,客户端与服务器端之间便建立了连接,两者之间可互相传送数据了。与HTTP协议相比,它具有更轻量级的头信息,减少了大量交互信息和网络吞吐量,节省了带宽,提高了通信效率。

jsj2-t2.gif

2 系统总体设计

    系统由客户端、云计算中心、智能硬件设备组成。系统框架如图3所示。

jsj2-t3.gif

    客户端应用于Web平台,可实现跨平台使用。通过关注微信公众账号,即可实现设备绑定与控制。

    智能硬件的硬件电路包括电源转换电路、单片机、WiFi电路、指示灯信号电路等部分。智能硬件核心电路原理图如图4所示。

jsj2-t4.gif

    本设计所使用的串口WiFi模块是内嵌TCP/IP协议的WiFi模块,其硬件部分主要由内嵌的一个单片机和WiFi模块构成,单片机实现逻辑驱动程序和TCP/IP协议,WiFi模块则必须完成数据的无线收发。嵌入式WiFi模块对外提供UART串口或者SPI接口。该WiFi模块型号为ESP8266,由乐鑫科技研发生产。该微控制器采用3.3 V电压供电,并连接相应的指示灯电路。例如,电源指示灯用于只是电源连接情况,WiFi指示灯用于智能设备配对时指示WiFi连接情况,透传连接信号用于指示是否成功连接到服务器。

    云计算中心搭建在阿里云服务器,服务器端程序使用Node.js编写,用于控制命令转发等。其逻辑流程图如图5所示。

jsj2-t5.gif

    服务器端程序一直处于监听端口的状态,当接收到数据,则解析出数据中的MAC地址和设备密码。接着查询已成功与服务器建立连接的MAC列表里是否包含该MAC地址,如存在,则将该数据转发给指定WiFi设备。

3 客户端设计与实现

3.1 客户端功能模块介绍

    HTML5客户端由三大模块组成,分别为用户模块、设置模块和控制模块。其客户端模块图如图6所示。

jsj2-t6.gif

    控制模块是客户端核心模块。因客户端可同时关联多个设备,且可同时关联多种设备,所以控制模块编写需注意设备间的切换。智能插座的控制逻辑包括开关、定时开关、延时开关等逻辑,智能插排的控制逻辑包括切换插口、开关等逻辑,智能彩灯的控制逻辑包括单色闪烁、多色变换、颜色闪播、开发等逻辑。因每种设备的控制逻辑不同,客户端交互界面也不同,因此切换设备应重新刷新界面,展示新的控制界面。

    设置模块核心功能是添加设备。通过Airkiss使智能设备入网之后,该智能设备自动绑定到该HTML5客户端。此外,也可通过扫描局域网下的所有WiFi设备进行绑定。

    用户模块核心功能是取得权限、提交用户ID至云计算平台,以保证智能设备能与用户ID对应绑定。控制参数也需要提交用户的OPEN_ID,该ID是每个用户独有的。

3.2 控制模块结构

    客户端程序基于MVC模式对客户端进行设计。控制模块作为客户端核心模块,也采用此框架。

    视图层View负责加载各种交互界面,如初始用户引导界面、设备列表界面、单个设备控制界面等。

    控制层Controller层负责监听用户操作并作出相应反应。

    模型层Model定义了各个功能模块,包括控制指令的加密解密、数据存储、数据格式的封装和解析,以及Websocket通信。其中,指令的加密解密和Websocket通信为核心逻辑。

3.3 传输加密解密具体实现

    由于手机客户端对智能家居的控制是通过AT指令完成,为了通信安全性,需要对发送的指令进行AES_CBC加密和base64加密,对于服务器返回给客户端的指令也要进行AES_CBC解密和base64解密。所有命令均以AT开头,回车换行结束。例如,关闭命令“CONTROLMACAT+CLOSE”,经过加密后变为“iJbbLN54qx1osqEx+E50ypNB2eQtFImFHDhGN//gOG2wLriWFaFtycPinlnQU/l8B1mfeRYF99t26R”。

    程序中发送指令的代码如下,其中SendData()为自定义函数,封装了Websocket逻辑。

    SendData(Encrypt(′CONTROL′+mac+′P′+passWord+′AT+CLTIMESHUT=1?\r\n′));

    Encrypt()为加密函数,其内实现如下,其中,内部使用到的CryptoJS为Github上开源JavaScript加密库。

function Encrypt(word){

    srcs=CryptoJS.enc.Utf8.parse(word);

    var encrypted = CryptoJS.AES.encrypt(srcs, key, {iv:iv,

      mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7});

    return encrypted.ciphertext.toString().

    toUpperCase();}

3.4 网络通信功能具体实现

3.4.1 HTTP通信

    JavaScript进行HTTP网络,是基于xhr对象,也就是XMLHttpRequest对象。几乎所有主流浏览器都内建了XMLHttpRequest对象[6-7]。用户更改WiFi智能设备名称时,需要通过发起HTTP POST请求,触发后端update.php脚本文件修改数据库中相应字段。流程如下:

    (1)创建XMLHttpRequest对象

    xmlhttp = new XMLHttpRequest();

    (2)构建请求参数对象

    var url="http://121.40.77.63/smart/php/update.php";

    url=url+"?mac="+mac_[currentIndex];

    url=url+"&openid="+openid;

    url=url+"&note="+note;

    url=url+"&sid="+Math.random();

    (3)发起POST请求

    xmlhttp.open("POST",url,true);

    xmlhttp.send();

    通过xmlhttp对象的onreadystatechange回调方法即可得知HTTP请求是否成功。

3.4.2 Websocket通信

    WebSocket协议本质上是一个基于TCP的协议,WebSocket连接与TCP连接的建立过程类似。使用Websocket与服务器端建立长连接,以控制WiFi智能硬件流程如下:

    (1)创建Socket实例

    var socket = new WebSocket(url, protocols);

    建立Socket连接时,需要填入url地址和相应协议。

    (2)监听Socket连接状态

    socket.onopen = function(event) {

    socket.onmessage = function(event) {};//接收消息

    socket.onclose = function(event) {};//连接断开

    socket.onerror = function(event) {};//连接失败

    };

    通过回调方法监听Socket各种连接状态,并作出相应处理。如接收到消息时,就应该对消息进行解密处理。

    (3)发送消息

    socket.send(msg);

    程序中已经对消息发送方法进行了封装,以保证发送出去的消息都是经过规范化加密之后的数据。

    (4)关闭Socket连接

    socket.close();

    当不再需要Socket连接时,应及时关闭连接,以减少给服务器端带来的不必要的压力。

4 实验及结果分析

    本文已经详细介绍了基于Websocket的智能家居远程控制系统的设计与实现。为了检验所设计的智能远程控制系统的可行性及性能,通过搭建实验开发平台进行实验验证。

4.1 系统实验平台

    系统的测试实验中硬件设备WiFi模块采用ESP8266芯片,使用3.3 V电源模块进行供电。智能手机采用MI-3手机,该手机操作系统为Android OS 4.4.2,处理器为NVIDIA Tegra4,分辨率为1 920×1 080,RAM为2 GB。

4.2 实验结果

    系统客户端部分界面如图7所示。

jsj2-t7.gif

    分别在网络环境良好、一般、极差的情况下利用手机HTML5客户端对智能设备各功能模块进行测试,从而达到对网络稳定性及各个功能稳定性的检测。图8所示为利用手机HTML5客户端控制WiFi设备的真实场景测试图。通过智能设备指示灯可以看出HTML5客户端成功地对WiFi智能设备进行了控制。例如,从图8(b)可以看出在客户端按下插排上层开启按钮时,由插排的指示灯和插入插排的插座的指示灯可以看出,插排上层插口已经成功打开。

jsj2-t8.gif

5 结论

    本文简要介绍了基于Websocket的智能家居远程控制系统的设计与实现。该系统结合了Airkiss技术和Websocket技术,实现了远程控制和信息同步。利用Airkiss技术实现了智能设备的快速入网,利用Websocket技术实现了Web平台与服务器之间建立长连接。同时,HTML5由于其可移植到PC端和移动端,极大地减少了开发成本。

参考文献

[1] 岳敬华.基于云服务的智能家居系统的研究与设计[D].杭州:杭州电子科技大学,2014.

[2] 吴润凯.数字家庭间互联互通方法的研究与应用[D].广州:华南理工大学,2011.

[3] 单俊丽.基于Android的流媒体客户端的研究与设计[D].西安:西安电子科技大学,2013.

[4] 王运红,何灵娜.基于Android平台的智能家居客户端的设计与实现[J].机电工程,2014,31(8):1086-1089,1102.

[5] 张新星.基于Android手机的智能插座设计[D].杭州:浙江大学,2014.

[6] 任顺航,吕鹏鹏,王立鹏,等.基于STM32的电能手抄系统设计与实现[J].电子技术应用,2014,40(1):75-78.

[7] 周时伟,谢维波.基于Android的智能家居终端设计与实现[J].微型机与应用,2012,31(14):10-13.

继续阅读>>