《电子技术应用》

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

2017年电子技术应用第10期
单振华,王舒憬,强 杰
(上海大学 机电工程及自动化学院,上海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.

Design of Websocket-based smart home remote-control system

Shan Zhenhua,Wang Shujing,Qiang Jie
(School of Mechatronic Engineering and Automation,Shanghai University,Shanghai 200072,China)
Abstract: Since the cost of mobile device based remote control system is high, this design achieves the remote control system through the HTML5. The HTML5 client achieves the cross platform, regardless of the compatibility of the smart phone or computer platform. Through sending commands to the server and forwarding the command to the smart device, this design achieves the remote control. In addition, the Websocket owns the feature of the real-time and its outstanding advantages make procedures to achieve low delay.

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.



作者信息:

单振华,王舒憬,强  杰

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

继续阅读>>