基于Android平台智能家居客户端的设计与实现

2016-11-09 01:11秦利红秦会斌诸坚彬曹曙光
计算机应用与软件 2016年9期
关键词:网关智能家居消息

秦利红 秦会斌 诸坚彬 曹曙光

1(杭州电子科技大学电子信息学院 浙江 杭州 310000)2(浙江和惠照明科技有限公司 浙江 余姚 315408)



基于Android平台智能家居客户端的设计与实现

秦利红1秦会斌1诸坚彬1曹曙光2

1(杭州电子科技大学电子信息学院浙江 杭州 310000)2(浙江和惠照明科技有限公司浙江 余姚 315408)

为改善传统智能家居客户端功能单一、操作繁琐、不易推广等不足,设计并实现了基于Android系统平台集内外网对智能家居控制、智能配对、动态添加设备和房间、多用户共享数据、消息推送等关键技术的智能家居客户端。通过云服务器转发消息,客户端实现了外网与网关通信。网关保存所有智能家居信息,客户端通过查询网关获取信息,实现多用户数据共享。采用基于MQTT协议的消息推送机制,实现当设备状态改变时,设备信息能被及时推送给每一个用户。经测试,多用户均可从网关获取设备等信息,并对设备进行控制,是一款性能良好、界面友善的智能家居客户端软件。

智能家居Android云服务器数据共享消息推送

0 引 言

智能家居是以住宅为平台,通过先进的自动控制技术、网络通信技术、计算机技术将家居生活环境中的相关设备连接起来,实现家居生活环境的智能化控制,提供一个更加人性化的居住环境[1,2]。随着人们对家居智能化的需求不断增大,如何实现用户随时随地控制家居,获取智能家居信息,成为迫切需求[3,4]。传统智能家居系统中设备信息存在客户端本地,不支持数据共享;系统中控制的设备只能是指定设备,不能根据用户的不同需求动态地添加设备和房间,使得系统适应性不强、操作不灵活,也不能很好地实现远程控制设备。

针对以上问题,本文设计基于Android平台的智能家居控制客户端实现了动态添加设备和房间,并将设备、房间等信息存在网关端,客户端通过查询获取信息,实现了智能家居信息多用户共享。在外网,客户端能通过云服务器转发消息给网关,真正实现用户随时随地远程控制智能家居。采用基于MQTT的消息推送机制,实现多用户同时操作设备时,能及时获取设备信息。

1 智能家居系统概述

本文中,作为研究对象的智能家居系统总体可分为4部分:基于Android平台的客户端、云服务器、嵌入式网关、智能家居设备。系统总体框图根据所处的网络环境分为两种情况,具体如图1所示。

图1 智能家居控制系统框图

图1中,(a)表示系统处于局域网内,控制终端直接与网关通信,进行数据的交互,实现对智能设备的控制;(b)表示系统处于外网环境,控制终端无法直接与网关通信,必须通过云服务器转发消息给网关,网关控制智能设备。

控制终端提供人机交互界面,与云服务器的交互是核心,为APP提供了外网接入功能[5]。网关存储设备信息,接受客户端命令并控制设备。客户端通过与网关间接或直接通信,查询房间设备信息,最终显示这些信息。设备为双向设备,及时返回设备信息给网关,因此客户端能实时查询设备信息。

2 客户端的设计与实现

2.1客户端实现框架和功能说明

客户端各功能模块划分如图2所示。

图2 智能家居控制客户端系统框图

(1) 登录模块:用户第一次使用时,需要注册账号,并保存到云服务器,使得用户下次登录时能进行安全验证。

(2) 设置模块:包括用户管理、设备管理、预约管理、情景管理、主控设置等主要模块。用户管理主要是用户账户切换与修改密码。设备管理是核心模块,主要涉及房间、设备的动态添加、删除和修改,用户可根据自己的需求自定义房间、设备名称和图片,图片从默认图片、拍照和相册中获取。预约管理,用户可以添加定时操作,关联设备和设备动作,设置一周重复的天数。情景设置,用户可动态添加和删除情景,自定义情景名称和图片,关联设备和设备动作,这样用户可以一键操作想要控制的各种设备,而不是一个一个控制。主控设置,包括智能配对和时间校准。智能配对指客户端提供界面输入指定WiFi的SSID和密码,通过一定的协议的数据发送,网关端进行抓包处理,分析出WiFi的SSID和密码,使得网关能在无输入的情况下连上指定的WiFi;时间校准是设置网关时间。

(3) 控制模块:对卷帘、百叶、灯光、开关等设备进行单个设备控制,支持对同一房间内所有设备同时控制开和关,也支持对同一类型的所有设备同时控制开和关,用户不用一个一个地控制设备,使得智能家居的控制更加人性化,操作更加简单。

2.2通信模块的设计与实现

Android客户端主要实现与云服务器和网关的通信。现在手机客户端的通信网络主要有移动网络(2G/3G/4G)和WiFi[6]。因此需正确地判断客户端所处的网络环境和选择正确的通信方式,确保数据的发送和接收,实现用户随时随地对智能设备的控制。

2.2.1客户端通信模块的设计与实现

客户端通信模块为本设计的核心模块,当客户端需要发送数据时,首先判断所处的网络环境,如果与网关处于同一局域网内,则使用Socket与网关进行通信;若客户端处于手机网络或不是与网关在同一WiFi下,则通过HTTP与云服务器通信,云服务器转发消息给网关。通信模块流程如图3所示。

图3 客户端通信模块流程图

主要流程解析如下:

(1) 发送广播,查找网关,判断与网关是否处于同一局域网。通过UDP的Socket发送广播的方式来查找网关。UDP通信不需要事先建立连接,只需要创建一个发送和接收的套接字便可以实现数据的处理和发送。广播地址“255.255.255.255”是一种特殊的广播地址,表示向全世界进行广播,一般情况下不会被路由器路由。当网关与客户端处于同一局域网时,会接收到此广播,并返回信息,包括网关ID和进行TCP通信的端口号,客户端接收返回信息,获得网关IP和端口号,为与网关进行TCP通信创造条件。

反之,当网关与客户端不处于同一网络时,如客户端处于3G/4G网络时,网关接收不到广播,也不会返回信息,客户端设置接收超时时间,超过这段时间没有接收到回复信息就退出,判断与网关不处于同一网络。具体核心代码如下:

client = new DatagramSocket(10000);

//创建UDP套接字对

client.setBroadcast(true);

//设置对象可以进行广播

sendPacket = new DatagramPacket(sendbuf, sendbuf.length, new InetSocketAddress(″255.255.255.255″, 8000));

//创建发送数据的数据包,并指定广播地址与端口号

client.send(sendPacket);

//发送广播

client.setSoTimeout(10000);

//设置接收超时时间

recvPacket = new DatagramPacket(recvbuf, recvbuf.length);

//创建接收数据数据包

client.receive(recvPacket);

//接收广播

String ip = recvPacket.getAddress().toString().substring(1);

//提取网关IP

(2) 与网关通信。与网关端建立可靠的TCP连接,采用多线程机制进行数据的发送和接收。客户端向网关发送查询、添加等命令,接收和解析网关发送的相关信息,并在界面上显示出来。

(3) 用户注册和登录。当用户查找不到网关时,需要登录云服务器,通过云服务器转发消息给网关。采用Apache提供的HttpClient接口的post请求来实现与云服务器的通信,添加了连接超时等异常处理,并采用多线程机制接收云服务器端的返回数据。Http通信需对返回的数据先进行JSON格式解析,才能使用。当用户为新用户时,需要先注册账号,用post请求提交参数为用户名、密码和邮箱,如果注册成功,云服务器返回用户ID和登录成功标志。用户登录时post请求参数为用户名和密码,登录成功进入系统控制界面,反之,返回到系统首页。

(4) 向云服务器发送查询指令,判断用户是否绑定网关,及判断云服务器是否能找客户端所绑定的网关,能否进行消息的转发。这里也是采用HttpClient接口的post请求与云服务器通信,请求参数为用户名、密码和网关识别码。用JSON格式解析返回数据,判断云服务器中是否有记录用户绑定的网关。

(5) 绑定网关。本设计规定一个用户只能绑定一个网关,而一个网关可以绑定多个用户,即实现多用户操作。客户端用HttpClient接口的post请求向云端提交想要绑定的网关ID,云端保存用户ID和网关ID,以便查询和转发消息。

(6) 与云服务器通信。当用户成功绑定网关后,向云端发送消息有数据返回,即实现外网通信。采用Apache提供的HttpClient接口的post请求来实现与云服务器的通信,采用多线程机制进行数据的发送和接收。客户端向云服务器发送查询、添加等命令,接收和解析云服务器发送的相关信息,并在界面上显示出来。

(7) 用户处理。当用户已成功绑定网关时,向云端发送数据没有返回。提示有两种可能:网关未连上路由器;路由器未连上外网。用户根据所处的环境进行相应的处理。若是网关未连上路由器则进行智能配对,提示用户开启WiFi,进入智能配对界面,输入指定WiFi的SSID和密码,通过特定协议发送数据包,数据包包含WiFi信息,网关端进行抓包处理,获取WiFi信息,并连上路由器。若是路由器未连外网,用户必须使路由器连上外网,否则无法操作。

2.2.2客户端通信协议的设计

自定义Android客户端与网关的通信协议,并对发送的数据进行MD5加密处理和Base64编码,提高了系统可扩展性和网络传输的可靠性。其中MD5是报文摘要算法的一种,是根据报文的内容摘取一部分进行加密,可以检查报文是否被篡改过。协议格式如图4所示。

图4通信协议格式

起始位、结束位——分别标示一帧数据的开始与结束;

WID——网关ID,用于标识网关;

UID——用户ID,用于标识用户,当用户注册成功时,由云服务器分配用户ID;

SEQ——请求序列,递增;

LEN——一帧数据总长度;

CMD——标示不同的命令;

MSG——消息内容;

MD5——数据经MD5加密值。

客户端通过与网关和云服务器的交互,将房间、设备、定时器、情景等信息发送给网关端保存,通过查询网关获取信息并显示在客户端界面上。这样只要用户客户端拥有此APP并登录成功后,即可获得网关内保存的所有智能家居信息,实现多用户数据共享。

消息类型主要包括:查找网关、绑定网关、添加、删除、修改、查询、设备控制命令。其中添加、删除和修改命令实现对房间、设备、定时器、情景的动态添加和删除。查询命令获取房间设备情景等信息。设备控制命令实现对设备的控制,如控制卷帘的开、关和上下停。以设备相关命令为例,交互过程如图5所示。

图5 客户端、云端、网关(设备)命令交互图

2.3基于MQTT协议的消息推送的设计与实现

2.3.1MQTT协议简介和特性分析

IBM WebSphere MQ Telemetry Transport(MQTT)是一款基于TCP长连接的轻量级发布/订阅协议,主要用于连接大量的远程控制设备和传感器[7]。MQTT的设计思想是开发、简单、轻量、易于实现,这些特点使它适用于如网络代价比较昂贵、带宽相对较低或者不可靠的环境。通常应用于嵌入式设备或者内存和处理器资源有限的场景[8,9]。常用于智能手机、手持智能设备等小型设备通信中。MQTT协议的主要特点有:

(1) 轻巧:传输格式最小化,没有应用消息头,最小的数据包只有2 bit。

(2) 可靠:三种不同的服务质量:“至多一次”,消息发布完全依赖底层TCP /IP网络,会发生消息丢失或重复。“至少一次”,确保消息到达,但消息重复可能发生。“只有一次”,确保消息到达一次。

(3) 简单:简单体积小的发布/订阅消息模式,异步“推送”传输,简单的使用方式——连接、发布、订阅、断开。

本设计支持多用户操作,当有一用户控制设备,改变设备状态时,其他用户能否及时获取设备信息并更新设备状态是关键。为解决这个问题,基于以上特点,采用MQTT协议的推送机制。客户端向MQTT消息代理服务器端订阅设备消息,当用户控制设备,改变设备状态时,双向设备向网关端发送新的设备信息,网关将消息传递给MQTT代理服务器,服务器将设备信息推送给其他客户端,实现了多用户同时操作设备时,客户端能及时接收设备信息。

2.3.2消息推送的工作流程

IBM提供了实现MQTT协议的jar包——wmqtt.jar,首先将此jar包添加到Android工程中。

客户端实现消息推送主要过程包括:连接MQTT代理服务器、发送请求、以回调函数的形式等待系统返回、接受服务器推送数据并解析,最后转交给前台UI线程显示。

主要流程如下:

(1) 创建一个MqttClient对象 client 用于连接到远程的 MQTT 服务器。 Client 在连接MQTT服务器时,要设定MQTT服务器IP和监听的端口号,并设置唯一的客户端标识。因为如果与前一个实例使用同一个客户端标识,那么表示目前的实例是同一个客户机的实例。如果在两个正在运行的客户端中重复使用同一个客户机标识,那么这两个客户机中都会抛出异常,并且一个客户端会终止。MQTT 服务器IP为“MQTT_SERVER_IP”,监听的端口号是1883,“UID”由云服务器分配,标志唯一客户端,用于标识客户端名称。

MqttClient client =MqttClient(″tcp://MQTT_SERVER_IP :1883″,null);

//MqttClient对象,指定连接服务器IP和端口号

(2) 构造一个CallBack对象接收消息,在构建这个CallBack对象的时候传入了一个 Handler 对象用于更新主界面 UI ——将消息内容显示在主界面上。

SimpleCallBack callback = new SimpleCallBack(mhandler);

client.registerSimpleHandler(callback);

(3) 调用client对象的subscribe()方法使其订阅主题字符串为WBID的消息,WBID为网关ID, QOS设1。这里首先判断客户端是否成功连接:

if((client != null) || (client.isConnected()) != false)

{

client.subscribe(new String[]{WBID}, new int[]{1});

}

(4) SimpleCallBack继承MqttSimpleCallback,实现了两个响应不同事件的方法connectionLost()和publishArrived()。publishArrived()方法负责响应收到消息后的事件,构建了一个 Message 对象,最后把这个包含了消息内容的 Message 对象通过 Handler 发送给主线程。

public class SimpleCallBack implements MqttSimpleCallback {

private Handler handler;

public SimpleCallBack(Handler handler) {

this.handler = handler;

}

@Override

public void connectionLost() throws Exception {

// TODO Auto-generated method stub

}

@Override

public void publishArrived(String topicName, byte[] payload, int Qos,boolean retained) throws Exception {

// TODO Auto-generated method stub

Message msg = handler.obtainMessage();

msg.obj = payload;

msg.what = 10;

handler.sendMessage(msg);

}

}

(5) 主线程创建mHandler内部类,通过它的handle Message()方法接收 Callback 类通过 mHandler 对象发来的消息,根据Json格式解析数据,提取设备信息,根据设备状态值,设置设备状态。如根据消息中传递的卷帘位置,设置设备动画中卷帘的位置。Json解析如下:

privateHashMapparseJSONString(String JSONString){

HashMap resultMap = new HashMap();

try{

JSONObject object = new JSONObject(JSONString);

resultMap.put(″wlinkid″, object.getString(″wlinkid″));

resultMap.put(″devid″, object.getInt(″devid″));

} catch (JSONException e) {

e.printStackTrace();

}

return resultMap;

}

通过使用MQTT消息推送,设备信息能得到及时推送,使得用户们能及时获取设备状态,更有利于对智能家居的控制。

2.4UI界面展示和测试分析

智能家居客户端用于人机交互,界面友善、灵活、精简是前提。本设计可根据用户不同需求动态添加房间、设备、定时和情景,用户可自定义房间名称和设备图片,图片可从默认的图片或是拍照、相册中获取,如图6所示。

图6 房间、设备相关界面

主设置界面包括设备管理、情景管理等设置,支持动态添加、删除情景和定时,如图7所示。

图7 主设置相关界面

Android手机与网关通信,因为通信数据经过MD5加密和base64编码,通过Socket调试助手不能直接显示发送和接收的指令。网关端将接收和发送的指令及下发给串口的指令通过UDP广播,Socket调试助手接收广播并以十六进制显示,如图8所示。

图8 测试结果

其中包括房间添加、设备添加、设备控制等命令,表明客户端能成功地发送和接收消息。网关也能接收消息和将消息下发给串口,实现对设备的控制。

3 结 语

本设计基于Android平台的智能家居控制客户端能正确地判断客户端所处的网络并选择正确的通信方式,实现用户随时随地对智能家居的控制。Android客户端与网关通信,网关保存设备等信息,客户端通过查询网关获得信息并显示。这样避免传统智能家居控制中信息均存在客户端本地,不能实现多用户共享。客户端实现了动态添加房间和设备,更能适应人们的需求,大大提高了智能家居控制系统的灵魂性。并添加定时器和情景模式,使得用户对智能家居的控制更加人性化和方便。同时采用MQTT消息推送机制,及时地更新设备信息,是一款更加智能化、人性化、操作简便、性能良好的智能家居客户端软件。

但客户端还是存在有待改善的地方:如现在实现的是对卷帘、百叶、灯光和插座等设备的控制,可以添加更多类型的设备如空调等设备,使得智能家居系统更加完善;另一方面,系统和接受MQTT推送的消息时设备动画设置的稳定性有待加强;最后,UI界面可以做得更加人性化。

[1] 董立岩,隋鹏,辛晓华,等.基于Android的智能家居终端控制系统[J].吉林大学学报:信息科学版,2014,32(3):303-307.

[2] 李涛.基于Android的智能家居APP的设计与实现[D].苏州大学,2014.

[3] 郭健傧,蔡雪松.基于Android平台的公交信息发布终端软件的设计与实现[J].计算机应用与软件,2014,31(9):322-324,333.

[4] 周娟.基于Android的智能家居控制系统的研究与实现[D].西安科技大学,2014.

[5] 李中平,邱健峰,李璐,等.Android手机远程控制关键技术分析[J].计算机应用与软件,2013,30(4):113-115,127.

[6] 邵保新.云架构下的声控智能家居系统[D].郑州大学,2014.

[7] 关庆余.基于MQTT协议的移动社交网络客户端的设计与实现[D].中国科学院研究生院(沈阳计算技术研究所),2014.

[8] 许金喜,张新有.Android平台基于MQTT协议的推送机制[J].计算机系统应用,2015,24(1):185-190.

[9] 关庆余,李鸿彬,于波.MQTT协议在Android平台上的研究与应用[J].计算机系统应用,2014,23(4):197-200.

DESIGN AND IMPLEMENTATION OF ANDROID PLATFORM-BASED SMART HOME CLIENT

Qin Lihong1Qin Huibin1Zhu Jianbin1Cao Shuguang2

1(School of Electronic Information,Hangzhou Dianzi University,Hangzhou 310000,Zhejiang,China)2(ZhejiangHowellIlluminateTechnologyCo.,Ltd.,Yuyao315408,Zhejiang,China)

To improve the deficiencies of traditional smart home client in signal function, complicated operation and difficult in promotion, we design and implement a smart home client, it is based on Android system platform and integrates the key technologies including the control of smart home from internal and external networks, smart pairing, dynamic rooms and devices adding, multi-user data sharing, and information push, etc. By forwarding messages through cloud server, the client realises the communication between external network and gateway. The gateway reserves all the information about smart home, the client obtaines the information by gateway query to achieve multiuser data sharing. It uses MQTT protocol-based message pushing mechanism, and realises to push devices information to every user when there is the change in devices status. It is tested that the multi-user can get the information of devices or so from the gateway, and can control the devices as well. It is a smart home client software with good performance and friendly UI.

Smart homeAndroidCloud serverData shareMessage push

2015-03-27。秦利红,硕士生,主研领域:基于Android平台应用软件开发。秦会斌,教授。诸坚彬,硕士生。曹曙光,助理研究员。

TP311

A

10.3969/j.issn.1000-386x.2016.09.021

猜你喜欢
网关智能家居消息
一张图看5G消息
基于PLC的智能家居控制系统研究
信号系统网关设备的优化
基于Zigbee的无线通信技术在智能家居中的应用
关于智能家居真正需求的探讨
LTE Small Cell网关及虚拟网关技术研究
应对气候变化需要打通“网关”
智能家居更贴心
消息
消息