APP下载

智能家居网关与云服务器数据同步协议的研究

2018-09-21丁维龙

计算机技术与发展 2018年9期
关键词:关键字网关云端

吴 磊,原 鹏,丁维龙

(北方工业大学 计算机学院,北京 100144)

0 引 言

智能家居作为一个新兴产业,在国内正在进入快速发展阶段。智能家居最基本的目标是为人们提供一个舒适、安全、方便和高效的生活环境[1]。智能家居网关是智能家居环境的核心设备之一,负责对智能家庭设备的直接管理,包括信息采集、信息输入输出与集中控制等功能[2]。智能家居网关中存储了每个家庭个性化的设备数据和情景模式数据。对于家庭用户来说,这种方式足够给用户提供所需的对设备的管理功能;但是,对于智能家居服务人员来说,分散存储在各个智能家居网关中的数据,给管理人员的维护与管理带来了诸多不便。目前,常用的维护方式还是通过管理软件与智能家居网关直连方式,由维护人员上门服务。这种维护方式严重影响了管理效率,与智能家居的方便性背道而驰,导致用户的体验较差。

因此,利用云技术研究了一套智能家居网关管理系统,实现对用户分散的智能家居数据的集中管理,从而提高管理效率[3]。云端系统对智能家居网关中的数据进行了集中存储,当维护人员获得用户授权后,即可对单个用户的家庭数据进行远程管理。云端系统主要提供以下功能:对所有用户智能家居网关数据的集中存储、对所有用户智能家居网关数据的定时备份、对单个用户智能家居网关数据的管理、对单个用户智能家居网关数据的选择恢复[4]。

其中,核心技术是云端系统与智能家居网关之间的数据传输与同步技术。在数据传输技术中,研究了一套简洁实用的数据同步协议,实现云端系统与智能家居网关之间异构数据库的数据同步。

1 常见的数据同步协议及存在的问题

目前在数据同步领域常见的协议有Palm HotSync、CPISync和SyncML[5]。

HotSync协议是由Palm公司注册的,安装有Palm操作系统的Palm PDAs实现了HotSync协议。该协议的适用范围有限。

CPISync协议是基于代数方法解决两个远端数据的同步问题,但是在数据记录变化较大的情况下,计算复杂度相当高,从而造成数据传输上的瓶颈问题。

SyncML协议是由IBM、Lotus、Motorola、Nokia、Palm Inc、Psion、Starfish Software等公司成立的数据同步论坛组织—SyncML发起组制定的,是一种行业通用的数据同步协议。SyncML定义的数据类型有双向同步、慢同步、客户端发起单向同步、客户端发起刷新同步、服务器端发起单向同步、服务器端发起刷新同步、服务器端请求同步,共7种同步类型。但是SyncML对存储空间要求较高[6]。

2 数据同步协议的制定

由于常用的数据同步协议在智能家居环境中并不能很好地适用,所以,文中研究制定了一套简洁的数据同步协议,用于解决智能家居网关与云服务器之间的数据同步问题。

在智能家居环境中,云端系统一般使用较大型的数据库,用于满足存储大量家庭用户数据的需求。而属于嵌入式设备的智能家庭网关由于硬件环境的限制,只能使用小型数据库,所以导致了两者之间使用的数据库的异构性[7]。并且由于智能家居网关带宽与存储空间的限制,使用增量的数据同步协议能够很好地节省资源[8]。所以文中制定了一个用于异构数据库之间的增量数据同步协议。

同步的数据通过云端系统与智能家居网关之间的报文消息进行传输,报文消息包括智能家居发送给云端的请求消息和云端回复的响应消息。传输的数据封装在消息的数据域中。双方对通信的报文格式有一个协定,这样发送的报文才能在对方进行解析与处理,并且方便移植到其他系统中。然后,在通信报文的基础上规定一套通信流程,实现云端系统与智能家居网关之间的数据同步。

2.1 通信消息的格式

通信消息分为从客户端到服务器的请求消息和从服务器端到客户端的响应消息两种类型。两种消息都由一个消息开始行,一个或多个头域,一个可有可无的数据域和一个消息结束行组成。

2.1.1 消息开始行

(1)请求消息的开始行。请求消息的开始行由消息关键字和客户端Mac地址组成。关键字用于表示该消息的功能,Mac地址用于记录该消息的来源客户端。其中,所有能正常与服务器进行通信的客户端,都需要在服务器进行Mac登记。当服务器接收到未登记的客户端发来的请求消息时,会拒绝与该客户端交互消息。

请求消息的关键字有以下几个:

Detect:探测消息,表示该消息是用于探测服务器是否有数据修改操作的;

SendData:发送数据,该消息用于将客户端的数据修改操作发送给服务器;

SynOk:同步成功,表示客户端成功将服务器的数据修改操作同步到本地数据库;

SynError:同步失败,表示客户端虽然接收到了服务器的数据修改操作,但是并未成功同步到本地数据库;

UnKnown:接收到未知消息,表示客户端无法识别接收到的服务器消息。

(2)响应消息的开始行。响应消息的消息开始行由消息关键字组成,关键字用于表示该消息的功能,响应消息的关键字有以下几个:

SendData:发送数据,该消息用于将服务器的数据修改操作发送给客户端;

SynOk:同步成功,表示服务器成功将客户端的数据修改操作同步到数据库;

SynError:同步失败,表示服务器虽然接收到了客户端的数据修改操作,但是并未成功同步到数据库;

EndConnection:结束连接报文,告知客户端本次数据同步过程可以结束。

2.1.2 消息的头域

请求消息和响应消息使用相同的头域,头域有:

Syn:表示是否成功将对方的数据修改操作同步到数据库,如果成功为true,否则为false;ErrorCode:当接收到无法识别的消息时,会定位无法识别的位置,然后将错误消息封装到该头域中。错误类型有:

101:消息开始行格式错误;

102:消息关键字无法识别;

103:客户端Mac未登记;

201:消息头域的格式错误;

202:出现了无法识别的头域;

301:消息数据域格式错误;

302:数据域中操作类型无法识别;

303:数据域中操作的表名无法识别;

401:数据写入错误;

501:其他错误。

HasData:表示该消息是否有数据域,如果有为true,否则为false。同时HasData要求是放在头域的最后一行,用于表示头域结束和数据域开始。

2.1.3 消息的数据域

请求消息和响应消息的数据域使用相同的格式。数据域的每一行由操作类型、操作的表名、操作数据的主键和具体字段组成,它们之间用“#”号分隔。每一行数据代表了一条具体操作。数据格式如下:

操作类型#操作的表名#操作数据的主键#字段1 字段2 …… 字段n

其中操作类型有:insert、delete、update,分别代表对该条数据进行增加、删除或者是更新操作。

操作的表名为数据库中存放数据的表。客户端和服务器存放数据的表名可以相同,也可以不同。如果不同,则由服务器在封装和解析报文时进行表名转换工作。

操作数据的主键是进行了数据修改操作的数据主键,根据操作记录表中该数据的所在表名,当进行数据同步时,会从相应的数据表中查询出具体数据,然后一起封装到消息的数据域中[9]。

2.1.4 消息结束行

两种消息都由一个消息结束行作为消息的结束标记。消息结束行由单行的#END#组成。客户端和服务器双方通信时,不断从Socket中读取对方发送的数据,当遇到消息结束行时,表示接收到一个完整的消息,这时就可以对该消息进行解析与处理。为了健壮性,会忽略消息结束行之前的所有空行。

2.2 数据同步流程

数据同步流程主要分为三个阶段:准备阶段、周期等待阶段和数据传输阶段。

2.2.1 准备阶段

准备阶段主要负责在云服务器登记注册智能家居网关信息,主要登记Mac地址。然后由智能家居网关将采集到的家庭设备信息发送给云服务器,实现两者之间数据的初始同步[10]。

2.2.2 周期等待

智能家居网关每隔一段时间向云服务器发送一次探测消息,探测云服务器是否有数据修改操作。一次数据同步结束到下一次发送探测消息之前的时间间隔称为等待周期,这个过程称为周期等待。

由于每次通信连接的建立都需要由智能家居网关主动发起,所以当云服务器有数据修改操作时,数据库的触发器会自动将修改操作插入到操作记录表中[11],等待智能家居网关探测消息的来临,然后发送给智能家居网关。

同时,为了防止客户端频繁与服务器通信,当智能家居网关有数据修改操作时,先将修改操作暂存在操作记录表中,在周期等待结束发送探测消息之前,先将自己的数据修改操作发送给服务器,等服务器将客户端的数据修改操作同步结束后再发送探测消息。

等待周期的长短可以根据数据同步及时性的要求在智能家居网关中设定,一般为几毫秒到几秒不等。

2.2.3 数据传输

当等待周期结束后,智能家居网关与云服务器建立连接,进行数据传输。数据传输过程负责将智能家居网关采集到的智能家庭设备的变化信息,及时上报给云服务器,同时,云服务器将数据管理操作下发给智能家居网关。

传输流程:数据传输开始时智能家居网关先与云服务器建立TCP连接;连接建立后,智能家居网关查询操作记录表,将采集到的变化的数据信息上报给云服务器;然后发送探测消息,获取云服务器的数据修改操作。双方数据交互结束后,断开连接进入等待周期。

3 数据同步协议的应用

在智能家居系统中,为了方便对智能家居数据的集中高效管理,云端系统负责集中存储家庭数据。当云端或智能家居网关中的数据更改操作时,两端数据需要及时进行数据同步操作[12]。同步初始化时,先在服务器登记客户端信息。主要登记客户端的Mac地址。登记成功后,客户端将全部的初始数据封装到以关键字SendData开始的消息中,发送给服务器。服务器将数据写入数据表,完成服务器与客户端数据的初始同步。

等待周期结束后,客户端先查询操作记录表,如果客户端有未同步到服务器的数据修改操作,则将具体操作封装到以关键字SendData开头的请求消息中发送给服务器。服务器接收到客户端的SendData消息,解析消息的数据域。然后对服务器数据进行相应的数据修改操作[13]。如果操作成功,则回复SynOk消息;如果操作失败,则回复SynError消息,并且将错误代码封装在头域的ErrorCode中。客户端接收到响应消息后,解析消息的关键字。如果是SynOk,则清除操作记录表中的相应记录。如果是SynError,则解析头域中的错误消息,写入日志文件,对操作记录表不做操作。然后客户端再发送以关键字Detect开头的探测消息,探测服务器是否有数据修改操作。

服务器接收到客户端发送的Detect探测消息后,查询操作记录表。如果有未同步到客户端的数据修改操作,则将操作封装到以关键字SendData开始的响应消息中回复给客户端。客户端接收到SendData消息后,解析消息的数据域,然后对客户端数据进行相应的数据修改操作[14]。如果操作成功,则向服务器端发送SynOk消息;如果操作失败,则向服务器发送SynError消息,并且将错误代码封装在消息的ErrorCode头域中。服务器端接收到客户端的消息后,解析消息的关键字。如果是SynOk,则清除操作记录表中的相应记录;如果是SynError,则解析头域中的错误代码,写入日志文件,对操作记录表不做修改。然后向客户端回复以EndConnection关键字开头的响应消息。客户端接收到该响应消息后断开与服务器的连接。本次数据同步过程结束,进入等待周期。

具体的数据同步流程如图1所示。

图1 客户端与服务器的数据同步流程

4 实验结果与分析

在本次实验环境中,家庭智能网关使用ARM-Tiny6410开发板,安装Fedora9-FriendlyARM操作系统,使用SQLite数据库;云端服务器使用MySQL数据库。家庭网关和云服务器的数据包括设备信息、情景模式信息和情景设备关系信息。

以下分3种情况对协议的功能和性能进行测试,主要记录数据同步过程中的同步时延。

(1)客户端进行数据修改操作。依次在客户端修改多条数据,测试协议的功能与性能。实验结果显示,客户端能够及时地将数据修改操作同步到云服务器。数据同步过程中的时延如表1所示。

表1 客户端进行数据修改操作

(2)服务器进行数据修改操作。依次在服务器修改多条数据,测试协议的功能与性能。实验结果显示,云服务器能够及时地将数据修改操作同步到客户端。数据同步过程中的时延如表2所示。

表2 服务器进行数据修改操作

(3)客户端和服务器同时进行数据修改操作。依次同时在客户端和服务器修改多条数据,测试协议的功能与性能。实验结果显示,云服务器和客户端都能及时地将数据修改操作同步到对方,并且当客户端和服务器的数据修改操作冲突时,确实是以客户端的修改操作为准的。数据同步过程中的时延如表3所示。

表3 两端同时进行数据修改操作

经过实验结果分析,该数据同步协议能够适用于智能家居环境中,实现智能家居网关与云服务器之间的数据同步,并且同步时延在可接受范围内。

5 结束语

随着智能化技术的不断发展,智能家居产业也正在展现出新的生机与活力。越来越多的新技术引入家庭环境中,为人们提供一个更加舒适的生活环境[15]。文中利用云技术研究并设计了一套智能家居管理系统,提供了对分散的家庭设备信息的集中高效管理。该系统的核心是云端系统与智能家居网关之间的数据同步技术。详细定义了数据同步协议中通信报文的格式与具体报文交互流程,由此实现了云端系统与智能家居网关之间异构数据库的增量同步。

猜你喜欢

关键字网关云端
四海心连·云端汇聚
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
基于FPGA的工业TSN融合网关设计
一种主从冗余网关的故障模式分析与处理
在云端永生
云端之城
成功避开“关键字”
天地一体化网络地面软网关技术及其应用
车联网网关架构的设计
在云端