物联网数据服务中间件的设计与实现

2022-01-28 03:00
计算机应用与软件 2022年1期
关键词:适配器中间件异构

吴 宇

(复旦大学软件学院 上海 200433)

0 引 言

在过去的几年中,物联网得到了快速的发展[1],因其涉及的领域广,统一的设备通信标准尚未建立,从而涌现了多种物联网中间件来屏蔽底层设备的异构性[2-4]。与此同时,智能家居[5]和深度学习[6]的流行增加了对智能家居领域具备数据服务功能的中间件需求。

市面上已经存在一些可供用户使用的中间件,但大都集中在健康、医疗领域[7-9],较少涉及到智能家居领域,而提供通用业务相关的数据服务[10-11]更是少有。

因此,本文调研了已有中间件并借鉴其特点。文献[12]为减少数据传输的延迟将云计算结合到中间件中,但其非常依赖于网络的稳定性,而物联网场景下往往存在资源受限的设备和环境。文献[13]给出了名为服务系统的架构,阐述了其框架组成并提出了物联网、服务互联网、业务互联网和数据互联网之间的关联关系,强调了网络、业务与数据之间的紧密联系,这是一个启发性的概念。文献[14]提出并讨论了将中间件分为两层的想法,将存储与交互分离。文献[15]通过动态重新配置资源的方法来解决智能交通领域中异构系统和资源约束的问题。文献[16]通过为开发者预留插件接口使得其中间件可以作用于资源受限的移动设备。文献[17]的中间件集成了在线社交网络和物理上下文数据流,减少了开发社交感应应用程序所需的编程工作量,具有良好的适用性和针对性,这也是本文的设计目标。考虑物联网数据服务的趋势[18]及中间件模型的设计思路[19],本文设计并实现了智能家居场景下的通用数据服务中间件。连接到该中间件的每个设备会在系统中被抽象为对应的虚拟实体模型,虚拟实体封装了设备提供的所有服务并向外提供统一的接口,以供上层应用程序调用。实体池被用来存储、管理和维护这些虚拟实体。无用和重复的数据被该中间件过滤,以减轻系统压力,提高系统性能。当需要适配新的通信协议时,只要注册并生成协议适配器即可升级中间件,无须改动底层代码。基于本中间件,上层应用无须关心物联网家居场景下的底层设备和数据访问协议,只需要专注于相关的数据处理和对应的业务逻辑。

1 系统设计

该中间件的首要目标是支持市面上常用的家居物联网设备和协议,并支持动态添加新协议和设备而无须改变上层业务,同时为上层应用提供基础和稳定的数据服务功能,例如异常值监测、关键值提取等。

1.1 总体架构

如图1所示,本中间件系统分为三层,分别为设备控制与服务层、数据预处理层和数据服务层。新的外部设备想要连接并将数据发送到中间件,就须在协议注册模块中注册其协议,以便中间件识别。

图1 总体架构图

注册的设备将数据发送到中间件时,设备控制与服务层负责接收并通过轮询已注册协议的标识信息(例如前缀)识别数据流的通信协议,若无法解析,则证明该协议尚未注册,拒绝接收;否则系统将解析出对应的设备标识符,与已注册的设备进行对比,若此数据流的源设备尚未注册,则拒绝该设备的连接并丢弃该数据包,否则,中间件在实体池中查询对应的设备实体是否存在。若不存在,虚拟实体将由相应的协议适配器构建并存入池中。进一步,虚拟实体解析该数据流,除去不相关的元数据信息,将实体数据发送到数据预处理层,该层旨在过滤大量重复及无价值的数据,并将过滤后的不同格式的数据实体转为统一结构传至数据服务层。数据服务层可以直接调用实体池提供的服务,从而控制物理设备。当来自上层应用程序的命令到达此层时,将调用实体池封装的设备控制服务完成设备的管理。

1.2 模块化结构

图2为系统模块化结构。设备控制与服务层的核心模块包括设备适配模块、连接管理模块、协议注册模块、适配器等。

图2 系统模块化结构

为了屏蔽底层设备的异构性,需要为每个异构网关动态分配一个适配器,以达到自动适应的目的。因此,设备适配模块利用抽象工厂设计模式,负责查找和生产适配器。

许多异构物联网网关都会向中间件发送大量连接请求,因此,连接管理模块被设计为处理这些请求。考虑到网络的不稳定,连接可能会断开,该模块设计了缓冲池机制消除了重新适应和重新生成的过程,从而提高系统性能。

来自不同制造商的物理设备具有不同的数据通信协议,因此需要注册指定的协议并将其存储在协议仓库中,以便解析异构设备的数据并正确封装命令。协议注册模块完成该功能。

适配器用于解析异构设备上传的数据,并将其封装为上层的统一格式。类似地,上层发送的指令将被封装并发送到相应的异构设备,适配器负责处理特定网关的不同设备。

虚拟实体引擎模块是中间件的核心组件。所有设备被抽象为对应的虚拟实体模型,从而异构设备具有统一的结构和属性,可以相互通信。虚拟实体引擎可以为连接到中间件的每个设备构建相应的虚拟实体。虚拟实体模型包括协议解析所需要的适配器及对应的物理设备需要向外界暴露的接口属性,以协助数据交换和设备发现。它解析异构设备上传的数据,并将其封装为上层的统一格式。类似地,上层发送的指令将被解析并转发至相应的设备,完成对应控制功能。

每个连接的设备都构建了虚拟实体,因此系统中实体数量太多会影响其性能。实体池模块被设计来动态管理虚拟实体。该模块集成了所有实体,并提供资源和服务列表供上层调用。

来自底层设备的所有数据都通过虚拟实体形式的实体池传输到数据预处理层。该层包括消息过滤和处理引擎,消息缓冲区队列和设备状态管理器。家居场景中仍涉及较多设备,且每个设备会持续感知周围的环境状态并发送数据,因此系统处理速度和性能无疑将成为瓶颈问题。为了减轻系统压力,本中间件将数据缓存在消息队列中。考虑到物联网场景下设备上传的数据通常是低价值且冗余的,因此数据过滤模块将从队列中逐步提取消息并丢弃异常数据,对于正常数据,在警告规则文件中定义了相对应的阈值规则,在规则之外的数据将被过滤。数据处理引擎能够计算出一段时间内数据的基础特征信息,如平均值、最大最小值、方差等,通过这种方式为上层提供数据服务。该引擎将某段时间内的数据基础特征信息上传至服务层以提供接口给上层应用调用。通过上述策略,本系统可以向上层提供稳定的数据服务。

1.3 资源文件结构

中间件的执行基于资源文件,资源文件配置了系统运行时需要加载的相关配置数据。如图3所示,中间件的资源文件包括协议描述文件、适配器描述文件、在线设备列表、数据处理规则、资源服务列表。

图3 系统资源文件结构

协议描述文件与特定的设备通信协议关联。由于缺乏标准化的定义,因此协议具有明显的异质性。为了基于指定的协议解析设备数据,每个协议都定义了一个协议描述文件。协议描述文件定义了协议的数据格式和相应位置上数据的物理含义,即语法和语义。

当网关首次建立与中间件的连接时,系统将根据协议特征查询适配器描述文件,以找到相关的适配器类型信息,然后通过反射机制生成对应实例。

在线设备列表维护家居环境下物理设备的联机状态。假设湿度传感器连接到中间件,数据将发送到设备控制和服务层进行解析和封装,设备状态管理器在处理消息缓冲区队列中的数据时会找到此设备。然后,该设备将被添加到活动列表中,状态将标记为在线。如果设备离线,其状态将被设置为脱机。

根据传感器所测量指标的不同,用户对其值的范围约束也不同,因此不同检测指标具有不同的阈值规则。不同用户对于数据处理规则的需求也不同。因此,数据处理规则文件定义了数据过滤和处理的规则,其可以与用户绑定,也可以与检测指标绑定。例如,当系统发现监测空气质量传感器的值大于规则文件所定义的阈值时,向上层应用提供了报告异常事件的接口。该规则文件还可以根据需要配置家居环境自动化控制,只要系统检测到发生异常事件,设备控制命令就会根据适配器服务和此文件中定义的参数自动发送。考虑到不同异构设备的数据可能具有不同的单位,因此系统支持单位转换。

资源服务列表位于设备控制和服务层,它提供了可被直接调用的基础设备资源服务接口。上层应用程序调用服务接口与物理设备进行交互。

1.4 性能提升机制

由于网络的不稳定性,异构设备发起的连接可能在某段时间内经常断开,也就会出现异构设备在短时间内多次向中间件发起连接请求的情况。若不缓存相应适配器,每次连接都将生成新的实例,浪费大量资源,因此对于短时间内重连的异构设备应分配给其原来生成的适配器。在这种需求下,本中间件构建了适配器缓存池,用来缓存那些已成功和中间件建立起连接的物理设备所绑定的适配器实例,设备与中间件的连接断开后如果在短时间内该异构设备重新发起连接请求并成功建立连接,则系统从该缓存池中取出与该设备之前绑定的适配器实例使其继续提供服务。

物联网应用场景中的设备是海量的,设备与中间件建立连接并成功匹配、生成适配器之后,会将该适配器与网关进行绑定并存储于内存中。每一个物联网网关在内存中会有一个键值与其相对应,由于内存资源有限并且稀缺,若所有适配器都常驻内存,系统将会变慢甚至崩溃,而且如果物联网网关断线后长时间没有连接中间件,而在服务器的内存中仍保存着其绑定的适配器是十分浪费资源的。因此本中间件提出了计时器模型,其两大关键属性为当前存活时间和最大存活时间。当适配器创建并与设备绑定存储于内存时,就启动该适配器的计时器,当该计时器达到系统设定的阈值后将该适配器从缓存池中移除。

2 协议适配

本中间件解决的首要问题是兼容多种物联网通信协议,使得不同厂商的感知设备、控制设备和通信设备可以在本中间件的基础上互联互通。因此,本文需要对物联网设备抽象建模。

2.1 设备抽象与虚拟化

物联网环境下的异构设备根据其功能通常分为三类:感知设备、控制设备和带有通信功能的物联网网关。功能不同的异构设备所具备的特征和虚拟化过程中的关键因素也不同。感知设备的主要功能是采集周围环境指标数据,因此感知设备的虚拟化要素包含感知设备采集指标数据的特征,指标数据属性应包含指标名称、指标值、采集时间以及数据单位。控制设备用于接收和转发指令。转发的指令所具备的属性包括指令数据、指令执行结果以及行为操作时间。物联网网关的主要功能是作为汇聚节点,具有两种工作方式:接收感知设备上传的感知数据,并将该数据转发给物联网中间件;接收物联网中间件下发的指令并转发给相应的控制设备。为了能够对上层应用提供透明化服务,在寻址和下发指令的过程中需要精确定位每一个物理设备个体。

定义1统一资源标识符。不同的制造商具有不同的设备代码和标识。在抽象虚拟化过程中,每个物理设备都需要具有唯一的标识符。统一标识符UID由厂商唯一编码标识和设备在该厂商中的编码组成:

UID=CompanyCode+deviceCode

deviceCode∈CSA

(1)

式中:CSA为厂商内部设备标识编码集合。

定义2虚拟实体。根据上述物联网异构设备的分类以及统一资源模型的定义,将异构物理设备被抽象为虚拟实体,涵盖了感应实体和控制实体的公共属性,包括统一资源标识符、设备传感网内部标识、在线状态以及创建时间。虚拟实体ve表示如下:

ve=(UID,AddrDev,Status,TimeCreated)

(2)

如图4所示,根据设备功能可将虚拟实体分为感知实体和控制实体,它们都继承自虚拟实体。一些传感器同时检测多种指标,可被分为多个虚拟实体。感知虚拟实体代表环境监控指标,其具有额外的属性:该虚拟感知设备对应的物理感知设备所监测的指标名称、监测指标的单位。控制虚拟实体用于执行中间件发送的指令并返回操作结果,具有控制指令、指令集和指令执行结果的属性。

图4 虚拟实体层次结构图

2.2 协议注册与解析

通信协议包含两部分内容,即发送数据的结构以及各部分结构的数据所代表的意义。现阶段,物联网设备厂商采用的获取或发送数据的方式基本可分为两类,第一类提供明确的通信协议、数据传输格式与数据包具体字段含义,如DFRobot公司生产的温度/湿度传感器,该传感器通过Intel Edison开发板接入网络,使用HTTP通信协议,数据以JSON的形式传输,且协议明确说明JSON中包含温度或湿度数据字段;第二类将所有数据交互的相关逻辑封装为SDK,提供对应的接口供使用者调用,如南京物联公司的物联网设备,该公司未说明其设备的数据交互细节,只是提供了C++和Java两个版本的SDK。

针对上述两类不同的协议形式,分别采用不同的封装方法。对于第一类方式,传入数据包的主要差异是通信协议(如HTTP、TCP等)和传输格式(如JSON、XML等)。中间件同时监听各常用通信协议端口,监听到有数据包进入后,根据连接类型、数据包长度和数据特性搜索并匹配其对应的协议封装类,最后协议封装类需要实现数据提取函数。对于第二类方式,基于代理模式调用其SDK数据解析方法并将其与第一类协议封装为统一的调用接口,从而利用Java语言的多态特性完成协议。

协议解析模块的结构图如图5所示,协议解析采用“单例+策略”的设计模式。虽然各类异构设备的协议互不相同,但协议本身较为稳定,在短时间内不会发生变化,因此在实例化某一协议封装类后,基本不需要在运行时有任何调整。此外,接入中间件平台的某些设备可能采用相同的协议,可以提高代码复用性,避免系统资源的浪费。策略模式是将多组算法封装起来,在运行时可以根据需要相互替代,类似于面向切片编程(Aspect Oriented Programming,AOP)。协议解析就是一个切片,在探测到接入设备的协议类型后,中间件平台使用策略模式将相应协议封装类单例传入协议加载器进行解析。

图5 协议解析流程

当中间件平台需要兼容新的协议时,需要实现协议接口成为新的封装类,写入协议配置文件后在运行时利用反射机制得到相应解析实例。而策略模式使得协议封装类和协议加载类解耦,新添加的协议封装类可以单独进行单元测试后再加入中间件平台部署。该过程不会影响中间件平台的正常运行,实现了动态注册。

2.3 协议适配总流程

如图6所示,当外部设备将数据发送至中间件,首先遍历缓存,根据握手包头识别其通信协议,若不能识别则拒绝连接,否则识别后判断该通信协议在协议仓库中是否已经注册。如果已注册,则根据协议类型创建相应的协议适配器解析该数据包,得到发送方设备标识符以及数据实体。若该设备编号已注册至系统配置文件,则将解析后的数据流输出到上层应用,否则,系统将丢弃该设备发送的数据。

图6 协议适配流程

在本中间件系统中,通过为每一种类型的协议创建协议描述文件并绑定对应的适配器来完成数据包解析工作,适配器由服务提供商接口(SPI)和协议适配引擎组成。指令可以通过SPI发送到异构设备。设计SPI的目的是使系统的其他部分可以方便地调用接口。SPI分为查询接口和控制接口。查询接口包括获取某设备的一个指标、获取某设备的所有指标、获取某网关下所有设备的所有指标;控制接口可根据不同类型的设备的不同的复杂程度分为通用的打开设备、关闭设备,以及个性化的报警、设置设备等。

3 数据服务

物联网数据具有以下四个特征:传感器类型指标及通信协议不同带来的异构性;精确及时感知物理世界状态带来的数据海量性;采样频率较高带来的数据冗余性;某些业务如安防所带来的数据实时性和连续性。

3.1 数据建模

物联网中的数据由感知设备采集,是某物理空间中特定环境指标的状态体现;感知设备的一次数据采集包含一个或多个环境指标数值;感知设备部署在物理空间中,由唯一的设备控制服务器向外传递感知信息。在开环的网络环境中,描述一个物理空间通用的方式是提供该环境所处地理位置的客观地址(如国家、城市、街道、门牌号等)和GPS经纬度精确数据,或使用GS1(Globe Standard 1)的全球位置编码GLN(Global Location Number)标识物理地址和法人实体。GLN标定的物理空间可大可小,可以是一张桌子、一个车厢,在供应链中,商品流转的空间有加工车间、供应商仓库、零售店专柜等;家居场景中的空间有客厅、盥洗室等。

定义3物理空间。针对时效性要求高的实时感知数据处理,以房间的大小为粒度,使用一个GLN去标定一个感知物理空间ci:

ci∈C=〈id(ci),A(ci)〉

(3)

式中:C代表了感知信息系统中注册的物理空间集合;id(ci)代表物理空间ci的唯一标识符,id(ci)∈CID,是GS1的全球位置编码GLN(Global Location Number);A(ci)代表物理空间具有的属性集合。A(ci)形式化定义为:

A(ci)⊂CA={a1,a2,…,an}

(4)

例如,上海爱森肉食品加工厂冷鲜仓库SAICWareHouse的形式化定义是:SAICWareHouse=〈6937938310579.{(city,SH),(country,China),(longtitude,121.64),(latitude,30.87)}〉,其中:6937938310579代表SAICWareHouse在物联网感知信息系统中的唯一标识符,与全球位置编码GLN对应;属性列表代表所在城市是上海,所属国家是中国,经度是121度64分,纬度是30度87分。

定义4感知设备dj。感知网络中的设备分为有通信功能和无通信功能两种。具有通信功能的设备一般指感知网络的网关和具有直接与设备控制服务器通信功能的传感器。感知设备常规属性有设备地址、设备监测指标等。dj表示为:

dj∈D=〈id(dj)∈DID,c(dj)∈C,A(dj)〉

(5)

式中:D代表了感知信息系统中感知设备的集合;id(dj)代表感知设备dj的唯一标识符;c(dj)代表设备dj部署物理空间的唯一标识符;A(dj)代表感知设备具有的属性集合,其形式化定义与物理空间属性集合相似。

定义5观测ok。一次观测包含了信息源标识、观测时间、观测指标数据列表。ok表示为:

ok=〈d(ok)∈D,timestamp,P(ok)〉

(6)

式中:d(ok)代表观测ok数据来源传感器的编码,即上文中的统一资源标识符;timestamp代表该次观测ok发生的时间;P(ok)代表观测ok包含的环境指标数据列表。P(ok)的形式化定义为:

P(ok)={p1(ok),p2(ok),…,pn(ok)}

(7)

pm(ok)被定义为观测ok的第m个环境指标,n是观测ok的总环境指标数,它的形式化公式为:

pm(ok)=〈typeph,typevalue,value,unit〉

(8)

式中:typeph代表现象的类型,如温度、湿度、光照、房门开关等;typevalue代表数据类型,如浮点、整数、字符串等;value代表环境指标值;unit代表环境指标值单位,是可选项,有连续取值的环境指标需说明采样值单位,离散取值的环境指标是非必需项。

定义6现象事件PE。一个观测进入接入分析层之后把环境指标数据列表拆分成一个或多个PE:

PE=〈UID,timestamp,typeph,typevalue,value,unit〉

(9)

式中:UID是PE数据来源传感器的统一资源标识符编码;timestamp是该次现象采集时间;typeph代表现象类型;typevalue表示数据类型;value是现象采样值;unit是采样值对应的单位,是可选项。

3.2 数据处理

物联网感知数据的值有两种形式,一种是理论上取值范围是实数域的连续值,如温湿度;另一种则是离散值,如标识房门开关状态的布尔值。形式的不同将影响后续数据处理方法数据窗口的选择,以及划分上下文的判断指标,如连续值需要单位相同而离散值不包含单位属性。

3.2.1异常值监测

异常值监测分为以下五步:

Step1在录入物理空间信息时,可以设置该物理空间待监测的指标类型与正常值区间。基于策略模式,通过配置文件设置不同检测指标所对应的监测规则,包括数据源设备编码、数据对应指标类型、数据区间、数据单位。

Step2将环境感知数据封装成上文定义的观测。该步骤将数据流中杂乱无章的混合数据提取成多条细粒度的观测数据,即某个空间中用于监测同一指标的所有传感器的数据。

Step3将观测拆分为多个现象事件。在Step 2的基础上进一步细化数据,即将监测空间中某一指标的数据绑定到对应的传感器。

Step4建立基于时间的数据窗口,根据属性将现象划分为不同的上下文。根据不同算力的机器对数据窗口设置不同的时间长度,如设置长度为三分钟的基于时间的滑动窗口,则每三分钟更新窗口内数据从而重新匹配监测,在此三分钟内到达的PE进入该窗口,并依据数据来源设备的编码、现象类型(监测的指标)、数据类型及数据单位(离散数据不包含)来划分上下文。

Step5筛选同一上下文中的数据。通过Step 4的划分得到了传感器在某一时间窗口的数据,根据传感器设备编码可以得到其所监测的物理空间编码,可以得到该空间规定的指标值的正常区间,从而判断当前值是否为异常值。考虑到网络的不稳定性,单次异常值并不具有代表性,因此需要考量时间窗口中异常值出现的次数,而不同的业务对异常值出现的频率有不同的容忍程度,因此通过配置文件来配置数据窗口的时间长度和异常值次数的示警下限。

3.2.2基于粒子群算法的关键值提取

关键值提取是在一个取值变化频率较低或者变化幅度较小的数据列表中提取在相邻区间内具有显著变化的数值,即数据抽稀。物联网感知环境下通过为数据抽稀设置一个阈值,以数据列表的第一项作为第一个关键值,与该关键值之间差值的绝对值小于阈值的数据项将会被视为冗余项,大于阈值的数据项会成为新的关键值。为了评估关键值提取的精度和去冗余度,我们使用幅值误差AE(Amplitude Error)和压缩率CR(Compression Rate)分别量化数据去冗余的精确度和去冗余效率。

定义7幅值误差。实际采集数据序列与去冗余压缩后恢复生成的序列相似度的衡量指标。AE数值越小,表示数据压缩后恢复的精确度越高。有实际序列IList={u1,u2,…,un},其中ui是IList的第i项;有恢复序列RList={v1,v2,…,vn},其中vi是RList的第i项。RList和IList的幅值误差AE计算公式如下:

(10)

压缩率CR等于压缩后序列元素数与实际序列的比值,CR越小,压缩率越高。

关键值提取的目标是在尽可能保持数据高精度还原环境状态的条件下减少数据冗余,也就是同时获得AE和CR的最小值。然而AE和CR是一对矛盾的指标。如果保留实际序列的所有数据,实际序列等价于压缩序列,AE取得最小值0,而此时CR达到最大值1;若抛弃实际序列中所有数值,压缩序列为空,CR取得最小值0,而AE则是最大值。因此,本文引入混合粒子群算法来动态寻找关键值提取阈值,以平衡两项指标,得到最优解阈值,即在保持高精度的情况下,使压缩效率最大化。

在算法中,实际序列的第一个值被保留在压缩序列中,作为第一个参照值,序列中的下一项与参照值比较。只有与参照值之间差值绝对值超过该阈值的项才会被保留在压缩序列中,并成为新的参照值。关键值提取分为如下7步:

Step1初始化粒子群。根据设置初始化大小为m、搜索范围为[xmin,xmax]的两个粒子群AEP={AEP1,AEP2,…,AEPm}和CRP={CRP1,CRP2,…,CRPm}。xmin是粒子群搜索的最小阈值,xmax是粒子群搜索的最大阈值,[xmin,xmax]区间中每一个阈值点即为粒子可能到达的一个位置点。粒子群AEP以找到使得幅值误差AE最小的阈值为目标,CRP以找到使得压缩率CR最小的阈值为目标,两个粒子群的优化函数分别为其定义的计算公式。

Step2找出两粒子群的全局最优解gbest。对于粒子群AEP每一个粒子,使用它们的当前位置作为阈值生成一个压缩序列,同时以时间戳为横坐标,现象值为纵坐标,以每一个压缩序列中的数据项的(timestamp,value)作为坐标系中的点,依照时间的先后顺序,用直线连接坐标系中相邻的两点,连线上纵坐标的值即为该压缩序列所构成的恢复序列的现象值。使用恢复序列与实际序列作为式(10)的两个输入序列,计算AEP中每一个粒子的优化函数值AE,选择获得最小AE值的粒子当前的位置为gbestAEP。同理获得粒子群CRP的全局最优解gbestCRP。

Step3对于粒子群AEP中第i个粒子AEPi和粒子群CRP中的第i个粒子CRPi,其中i∈[1,2,…,m],使用其定义的计算公式更新AEPi和CRPi的速度和位置。

Step4繁殖后代。以AEPi和CRPi作为“父辈”,繁殖后代粒子nAEPi和nCRPi,并计算两个后代粒子的速度和位置。

Step5粒子替换。用后代粒子nAEPi替换AEPi,用nCRPi替换CRPi。

Step6重复Step 2-Step 5以求得达到最大迭代次数,迭代完成后最后获得的gbest即为最终的最优阈值。

Step7关键值提取。使用该序列的最优阈值进行数据关键值提取,以实际序列的第一个值被保留在压缩序列中,作为第一个参照值,序列中的下一项与参照值比较。与参照值之间差值绝对值超过该阈值的项会被保留在压缩序列中,并作为新的参照值与下一项进行比较,直到到达序列的最后一项。最后被保留在压缩序列中的项都是提取出的关键值。该压缩序列是同一时间维度内进入同一数据窗口,且由同一传感器节点产生的关于同一指标的感知关键数据流。

3.3 数据服务接口

数据服务接口是数据流的出口,可根据不同的需求灵活地定制相应接口。考虑到通用数据业务需求,本中间件实现了消息订阅与推送接口,用于向订阅用户报警等业务。市面上的第三方推送系统可分为两类,分别通过Restful接口和SDK交互,可将其封装为统一的接口。

如图7所示,通过单例模式和策略模式,系统封装不同类型的推送系统并提供统一的服务接口,使用JSON文件定义不同的订阅者使用的服务类型。对其他模块而言,策略模式屏蔽了不同推送服务在接口和调用方式上的区别;对内部实现而言,这样的设计利于独立的单元测试,且在需要添加其他推送服务时,只需添加相应的封装类,不用对整体逻辑进行调整。当某一实体的当前状态发生改变时,将该消息推送到多个订阅实体。在实现上,由推送系统维护其所属频道的订阅者的列表。每条进入推送系统的消息有一个全局唯一的Token类参数,标识了该条消息的身份信息,说明了这条消息从属的频道,对于消息的订阅者来说,需要提供该参数以标明自己需要的某个或多个频道。

图7 消息推送流程

4 实 验

4.1 并发实验分析

本实验所用的计算机配置为3.40 GHz的Intel Core i7-6700和8 GB内存。在实验中,逐渐增加连接到中间件的设备数量。这意味着虚拟实体的数量也相应增加。

如图8所示,当实体数量显着增长时,中间件的数据转发延迟维持在较稳定水平,因为连接模块节省了设备短时间断线重连时重新创建适配器的时间。实验证明,该中间件可以处理大量高并发数据的转发问题,同时将丢包率保持在较低水平。

图8 并发实验结果

4.2 数据服务实验分析

本次实验将中间件用于智能温控项目,旨在通过分析用户的历史数据和实时位置数据,预测用户的归家时间来预先设置空调。在该系统中,本中间件为项目提供实时数据服务。

实验涉及的硬件包括DFRobot公司的温度传感器、英特尔开发板、南京物联公司的智能开关和网关。这些设备来自不同的供应商,因此需要使用本文的中间件来屏蔽异构性。软件包括一款安卓应用、一个Python编写的用户归家时间的预测系统及本中间件。

如图9所示,在该智能温控项目中,所有物理设备和外部系统在中间件中都有相应的虚拟实体。当传感器虚拟实体的状态刷新时(意味着有一个新的温度数据通过过滤器),消息订阅和推送模块会将数据推送给订阅者。订阅者是安卓应用和预测控制系统,安卓应用程序将其实时位置数据上传到预测和控制系统。预测与控制系统根据用户的实时位置和历史位置数据预测用户的归家时间,然后根据实时室内温度确定是否需要打开空调。

图9 智能温控系统流程图

实验机器的配置与上一实验相同,使用固定路径的GPS数据集作为历史数据。安卓手机在汽车中实时发送GPS数据。在第一次测试中阈值被设置得足够大,以使中间件不过滤数据,在第二次测试时将阈值调整为正常值。

从表1所示的实验结果可以看出,在不使用过滤规则时的计算时间较长,因为温湿度传感器及安卓手机在实时发送传感和GPS数据,虽然单次数据量较小,但发送频率很高,而在这段密集型数据中,大部分数据都是冗余无用的。在调整过滤规则后,大部分数据被中间件排除在外,从而计算时间得到了显著的降低,有用的数据得到了保留,因此对预测结果的影响较小。

表1 智能温控系统实验结果

5 结 语

本文设计并实现了家居场景下提供数据服务功能的物联网中间件。将设备抽象成虚拟实体并利用资源统一描述模型屏蔽设备的异构性,帮助系统有效解析多种通信协议下的数据包,并支持协议的动态注册。此外,本中间件可以过滤无用冗余的数据、检测异常数据并提供基本数据发布订阅接口,以确保中间件的性能和通用性。通过分层结构以及策略设计模式,可以灵活快速地注册新的协议、创建新的数据服务接口,而不会影响底层的物理设备和上层应用程序。基于该中间件,开发人员可以只关注项目的业务逻辑,而无须关心底层设备通信与交互。

未来工作将考虑利用该中间件开发一整套智能家居解决方案,不仅支持用户随时监控家居环境、主动操作家居设备,还能通过预设规则、对历史数据的自主学习来自动维护家居环境。

猜你喜欢
适配器中间件异构
离散异构线性多智能体系统的输出一致性
试论同课异构之“同”与“异”
我国自主可控中间件发展研究
凝聚与铺张——孙绍振教授《以丑、呆为美》两岸同课异构教学观摩后记
基于3D打印的轻型导弹适配器
电源适配器怎么选
6款电力线网络适配器横向评测
美国麦格普公司新型M—LOK相机三脚架适配器
以实力证明 用事实说话
中移动集采:东方通中间件脱颖而出