P2P无线传感器网络层的设计与实现
2018-12-25李莹
李 莹
(焦作大学信息工程学院,河南 焦作 454003)
0.引言
随着传感器网络的大规模部署,数据集成和访问会变得越来越重要。从应用角度来看,从这些高度分布的传感器网络中获得有意义的数据十分困难,因此,数据获取机制及统一的访问入口就成为急需要解决的办法。就数据获取来说,网关移动和部署多个无线传感器网络是两种可行的方法。但实际部署的传感器网络,会采用不同的传感设备、使用不同的通信协议,因此,可行的方法就是通过某种方法屏蔽传感器网络节点差异,将传感器网络作为支持高层应用的数据源[1]。
在一些无线传感器网络典型的应用中,通常采用集中式的方式对数据进行处理。例如环境检测中,传感器节点感应到的数据传送到一个网关节点上后,由网关节点负责将传感器节点传来的数据经由一个传输网络发送到一个集中的数据处理中心[2-4]。而上述应用场景不同于传统无线传感器网络应用,使其难以采用集中式的架构。
P2P无线传感器网络是解决上述问题的一种尝试[5-7],它通过对传感器网络功能的描述,屏蔽了底层网络的差异,并利用P2P网络的特点实现了传感器网络动态变化的支持及多个传感器网络之间的信息共享。
本文基于已有的研究成果,提出了这个网络层的设计与实现,并且在实际的项目中进行测试。
1.功能分析
P2P传感器网络的主要目的之一是实现传感器网络之间的信息共享。而传感功能的发布则是共享信息的第一步,因此如何实现对传感信息的描述,以供P2P网络进行发布进而实现共享就成为需要解决的问题之一[6]。
1.1 传感功能管理
无线传感器网络的节点通常具有多种功能,以单个传感器节点为例,可能具有多种功能,例如温度、湿度、光照等多种参数的测量。这就造成单个传感器节点会支持多个传感功能。与此相对应,在实际的应用中,为提高监测的精确度,降低对单个节点传感器精度的要求,通常是由多个无线传感器网络协同完成对被监测区域的监测任务。从分析看出,传感器节点状态和数量的变化会对该无线传感器网络提供的功能产生影响。
1.2 传感数据管理
传感功能发布后,用户会根据传感功能列表进行选择,由系统根据用户的选择和相应的Peer通信后返回传感数据,这些传感数据应是经过处理的有意义的数据。这就要求系统具备对传感器采集数据的解析、存储和查询的功能。
不同的应用背景对传感器的要求不同,其硬件平台、软件系统和网络协议必然会有很大的差别,所以无线传感器网络不像Internet一样,有统一的通信协议平台[2]。因此,在进行传感应用设计时,要根据具体的应用提供相应的数据解析,得到有意义的数据。
2.主要组件
传感器层的设计为单个无线传感器网络的设计,可将其应用分为两部分:外部应用和内部应用。网关是外部应用的入口,在其上运行了外部应用的接口,称之为Gateway API;内部应用API,根据其功能可以看出主要运行在传感器节点上,称之为 Node API[3]。在具体实现中,Node API是指运行在传感器节点上的数据采集程序,负责周期性采集被监测区域的信息;Gateway API则需要实现对传感器数据的解析、传感功能的描述、根据接受的查询请求进行数据访问。
2.1 传感器节点描述
为了实现对传感器节点的实时监控,需要为每个加入到无线传感器网络中的传感器节点构建一个描述文件,称之为传感器节点描述,它与传感器节点之间是一一对应的关系。它会在传感器节点加入时建立,在网关无法监测到节点时删除。传感器节点描述以XML格式对传感器节点的静态特征以及在网络中的角色进行定义。
2.2 传感功能描述
无线传感器网络部署后,其网络中的节点状态和数量通常会发生变化,这会导致所提供的功能也随之发生变化。外部应用在访问无线传感器网络的时候,通常仅仅关注网络当前所能提供的功能,因此,对无线传感器网络功能的描述必须是实时的,即相应的功能描述信息必须根据无线传感器网络当前的传感器节点信息动态生成[4,5]。
XML作为一种可支持动态生成文档的标记语言,成为描述无线传感器网络功能的语言。从图1中可以看出传感功能描述和传感器节点描述之间是多对多的关系,并且传感功能描述是在传感器节点描述的基础之上动态生成的。
图1 传感功能描述和传感器节点描述的关系
2.3 数据报解析
在本文中,采用MICAz无线传感器网络套件作为实际的试验环境,以TinyOS作为操作系统[2],并在传感器节点上运行Surge_Reliable作为数据采集程序。该应用程序采用主动的方式收集数据,并每隔8秒将其经过多跳后发送给网关。下面以传感器节点作为例,说明传感器数据的解析和存储[6]。
2.4 传感数据存储和访问
Surge_Relaible的特点是主动采集数据,它支持集中式的无线传感器网络数据管理结构。这种结构中,感知数据的查询和无线传感器网络的访问是相对独立的。处理过程分为两步:首先将传感器数据按事先指定的方式从无线传感器网络传输到中心服务器;然后,在中心服务器上进行查询处理。
3.无线传感器网络层的实现
3.1 主要模块交互图
主要模板的交互涉及到三种数据流:传感功能注册数据流、传感数据采集流、传感信息访问流。
传感数据采集流:传感器节点会运行采样程序,每隔一定的时间段将数据发送到网关。由DataCollector模块循环从gateway读取数据,根据分隔符126将数据包切割开,调用Parser来解析数据包。为了实现对历史数据的保存,便于以后的数据查询,SensorAcess模块会将 Parser的结果持续不断地送入到本地数据库。
传感功能注册数据流:为了支持外部应用对传感器功能的访问,需要在网关上对其所提供的功能进行注册。为此将根据Parser的解析结果进行判断,如果是“新”节点,生成传感器节点描述文件,同时根据其所提供的功能进行注册。此外,还必须提供对描述信息的更新功能,以保证传感功能的实时性。
传感信息访问流:传感器信息访问流由两部分组成。在本文中,无线传感器网络层的主要功能即是向上屏蔽无线传感器网络的通信细节,以传感应用的方式暴露给外部应用。因此,为获得该无线传感器网络所提供的功能列表,需要进行功能发现。此后,用户根据获得的列表进行相应的选择,从而得到该应用的数据。
3.2 传感功能注册数据流
传感功能注册数据流主要包括两个部分:Sensor Watch模块和传感器节点描述。下面主要介绍Sensor Watch的功能,如图2所示。
图2 传感器节点注册和删除活动
节点注册:节点在加入无线传感器网络时,会和网关进行通信,SensorWatch模块将根据解析的结果判定其功能,向相应的功能注册该传感器节点,同时生成传感器节点描述文件。
节点删除:为了保证该无线传感器网络功能的实时性,SensorWatch模块需要根据Parser的结果不断地扫描多个功能文件夹下已经注册的传感器节点。如果在设定的时间间隔内传感器节点信息没有更新,即认为该节点已经和网关失去联系,SensorWatch模块会从相应的目录下删除该传感器节点对应的传感器节点描述。
3.3 传感器数据采集数据流
传感器数据采集数据流,主要是实现对传感数据的解析,为传感功能注册提供信息,并实现传感数据的本地存储,这里采用开源java类库RXTX支持开发。RXTX项目提供了Windows、Linux、Mac Os X、Solaris操作系统下的兼容 javax.comm串口通讯包API的实现,为其他开发人员在此类系统下开发串口的应用提供了方便。
3.4 传感功能访问数据流
传感信息访问流主要包括对传感功能描述的访问和对本地数据库的访问。
功能发现请求:接收来自上层P2P网络的查询命令,由Query Generator生成适合本地查询的格式。根据查询命令对基于本地的传感器描述、文件传感器节点描述和生成传感功能描述。
数据查询:用户端接收到传感功能描述后,在本地进行解析生成功能列表。客户端会根据生成的功能列表,选择感兴趣的功能后,将查询消息通过P2P网络发送到对应的网关。由网关根据本地的传感器节点描述的解析结果,查询本地数据库中对应节点的信息。
返回数据:传感器节点每隔一定时间将传感器数据写入网关上的数据库中。根据本地数据库的查询结构,由网关负责将数据通过上层的P2P网络返回给最终用户。
4.实验和测试
4.1 实验平台
我们的实验部署如图3所示。
图3 实验部署图
为了评估该网络层应用架构的可行性,搭建了一个实现环境。测试环境在同一局域网内实现,由同一个局域网的多个节点构成。根据试验室的设备情况,我们利用两台PC充当其中的两个 Peer(P3和 P4),并连接传感器网络,以提供传感功能。其中P3提供地点room2的信息,P4提供地点room1的信息。此外,根据JXTA的可在一台物理设备上运行多个Peer节点的特点,我们可以在其中的一台机器上设定另外一个Peer(P1),以供用户加入P2P网络。根据P2P网络的设计,在某一时刻,由P3、P4充当查询响应代理,P1作为客户端,形成了基于P2P的传感功能查询网络。
在本试验平台中,利用MICAz节点充当传感器节点,它是由美国加州大学Berkeley分校开发,由CrossBow公司生产和销售的一款无线传感器网络节点,是当前最受欢迎的一款无线传感器网络产品。为了测量环境中感兴趣的物理量,可以对传感板进行扩展,可包含光、温度、相对湿度等传感器。根据使用的通信协议,我们预先设定了传感器节点的GroupID和NodeID号,试验平台中传感器节点的初始状态如表1所示。
表1 试验平台中传感器节点状态
4.2 传感功能查找及数据显示
下面用户对P2P网络中传感功能进行访问。首先,由提供room1传感器信息的Peer4首先启动,它会自动发布本地的传感功能。此后用户通过Peer1加入P2P网络中,系统会返回Peer4上发布的的无线传感器网络功能。为便于验证该架构的正确性,同时返回了提供功能的传感器节点名称(以SensorGroupIDNodeID的格式命名),在此过程中两个Peer之间信息交互如图4。
图4 Peer1加入后和Peer4的信息交互
这里我们设定系统返回:最大值 (MAX),最小值(MIN),平均值(Average),在图形界面上显示的结果如图5。
图5 用户选择后返回的数据
4.3 传感功能更新
(1)传感器网络的加入
传感器网络的加入,即是其对应Peer节点的加入过程。映射与部署在地点room2的传感器网络的Peer3加入,一段时间后,用户端将反映发生的变化。Peer3和用户端的交互过程如图6。用户可通过该界面访问该P2P网络中所有的传感器功能,或某个传感器网络的某种功能。
图6 Peer2加入后的用户端的更新
(2)传感器节点动态变化
传感器节点通常会加入或退出传感器网络,如果提供某个功能的所有传感器节点全部失效,则应该向客户端反映这种变化。在本场景的验证中,我们以传感器节点退出为例,进行验证。某时,提供room1的传感器网络中提供光照的传感器节点退出(关闭节点即可模拟该过程),一段时间后,Peer4应向用户反映这种变化。用户进行功能选择后,该P2P网络将不再提供该光照的功能,具体的执行情况如图7。
图7 传感器节点退出时的情况
从上面可以得出结论,我们的P2P无线传感器网络层验证了传感器功能的访问、传感器网络的加入及传感器节点的变化等典型场景,能够实现分布在不同地点传感器网络之间的信息共享,满足实际应用需求。
5.结束语
本文主要研究了P2P无线传感器网络层的设计及实现。通过对传感器节点和传感网络功能的描述以及对传感器网络采集数据的解析,从传感功能注册数据流、传感器数据采集数据流和传感功能访问数据流三个方面对模块之间的交互进行了设计,最后通过实验验证发现P2P无线传感器网络屏蔽了底层网络的差异,并利用P2P网络的特点实现了传感器网络动态变化的支持,及多个传感器网络之间的信息共享。