基于Wi-Fi的旅游团脱团预警系统的设计与实现
2016-03-31北京邮电大学网络与交换技术国家重点实验室I徐畅
北京邮电大学网络与交换技术国家重点实验室I徐畅
杭州东信北邮信息技术有限公司I沈奇威
基于Wi-Fi的旅游团脱团预警系统的设计与实现
北京邮电大学网络与交换技术国家重点实验室I徐畅
杭州东信北邮信息技术有限公司I沈奇威
本文设计实现了一套监控系统,其使用场景为旅游团导游监控团员是否脱团。该套系统具有简单易用、简易部署的特点,十分符合上述使用场景的需求。
Wi-Fi是一种短程无线传输技术,能够在一定范围内支持互联网接入的无线电信号。它的最大优点是传输速度较高,在信号较弱或有干扰的情况下,带宽可调整,有效地保障了网络的稳定性和可靠性。另外它的传输有效距离也很长,在开放性区域通信距离可达305米,使用特殊的天线技术可以达到1000米左右,在封闭性区域通信距离为76米~122米,加入功率放大电路可以增加其传输距离。近年来,Wi-Fi技术在智能家居、工业控制、移动手持设备等嵌入式环境中需求日益增多。
如今随着智能终端设备的普及、智能路由器的发展,市场上出现了一系列结合智能终端和智能路由器的应用系统。随着旅游业的迅速发展、旅游人数的增多,经常有“游客脱团”现象的发生,导游需要时刻关注旅行团中人员数量,这对于导游来说是种负担。利用Wi-Fi的探测功能可以开发一套脱团预警系统,在旅游团中,导游可根据该系统查看团员是否脱团。其优势在于搭建成本小、使用方便。但由于智能路由器是依据终端设备与人的映射来建立监控,其准确性可能会差于传感器的检测。
本文以基于Android系统的智能手机和基于OpenWrt的智能路由为例,设计实现了一套监控系统,其使用场景为前文所述的旅游团导游监控团员是否脱团。该套系统具有简单易用、简易部署的特点,十分符合上述使用场景。
图1 系统示意图
系统模块设计
该系统主要由3部分内容构成:搭载在Android系统上的脱团预警APP客户端、智能路由器上的编程、服务器端。图1展示了3个组件的不同职能和相互之间的联系。
1.Android客户端设计
Android客户端供团队中的导游或领队使用,主要具有以下两个方面功能。
第一,导游可以方便地通过客户端连接智能路由,连接完毕后可以通过认证系统获取用户身份,完善相应权限的鉴权操作。通过了鉴权的用户可以查看所连接路由的信息,并且对路由进行操作。由于智能终端和智能路由的可交互操作,在该应用场景下,用户无需连接互联网即可获得流量统计的相关数据。
第二,导游在连接互联网之后,可以新建旅游团,完善旅游团信息,等待团员的签到,流程如图2所示。导游新建旅游团完毕后,团员可通过签到网址进行签到,此操作是为了获取团员的手机MAC地址,为后续的脱团监测所用。游客签到的流程如图3所示。游客签到完毕后,导游可开启脱团预警功能,脱团预警的流程如图4所示。
2.智能路由器端功能设计
智能路由器上需要进行以下两个模块的开发。
(1)需要开发数据采集模块,采集连接到路由器上手机的MAC地址。该功能采用Wi-Fi探针技术实现,原理是利用智能设备商Wi-Fi模块发出的无线广播信号进行设备的感知。
(2)保存采集到的MAC地址、连接时间等数据,存储在本地,以供客户端进行分析和展现。
由于OpenWrt系统的长足发展,其支持的路由芯片越来越多,通过简单易用的方式降低了嵌入式Linux开发的门槛。因此本课题中的智能路由器基于OpenWrt进行开发。
3.服务器端功能设计
服务器端的主要职能是负责与客户端的通信,在后台备份旅游团数据。服务器提供了接口可供客户端调用,客户端通过提供的接口进行旅游团的创建。同时,服务器端维护了签到的入口,游客通过签到入口将个人信息上报至服务器,服务器将对应信息同步给客户端,本文中的服务器端基于Play框架进行开发。
智能路由器端实现原理
1.数据采集模块
数据采集模块是智能路由器端的核心,该模块通过以下3个子模块进行数据采集。
(1)数据搜集。数据搜集子模块工作在路由器的驱动层。路由器硬件接收到当前信道上的数据帧之后上报硬件终端。终端处理函数通过帧头信息判断帧的类型,并将相关信息提取出来,然后调用数据广播子模块提供的数据发送接口,发送给用户层的数据接收子模块。
(2)数据广播。数据广播子模块实时监听数据搜集子模块发送来的数据,将数据搜集子模块发送的数据发送给数据接收子模块,这些是主要的探针数据。
数据广播子模块与其他子模块之间的数据交互如图5所示。
(3)数据接收。数据接收子模块根据应用层发来的参数,决定是否接收驱动层发送上来的数据,以及接收数据后,将数据以怎样的格式打印到控制台。数据接收子模块是连接驱动和应用层的一个核心模块,需要实时监听驱动层送来的探针数据,又可以接收用户设定的参数,将一些参数通过数据广播子模块设定进内核并驱动。该模块目前接收两个主要的用户设置参数,一是监听探测数据,二是设置RSSI的值。
2.数据处理模块
数据处理模块调用数据侦听模块,获取数据侦听模块打印到控制台的数据,通过脚本将需要的探测帧的数据过滤出来,为每条数据打上时间戳,并进行简单的加密处理,最后将处理好的数据写入本地文件,保存在固定路径中。
客户端将每隔一定时间请求路由器端的数据,通过FTP登录路由器,下载指定路径中的文件,对文件进行解析后获得所需的数据。
图2 新建旅游团流程图
图3 游客签到流程图
图4 脱团预警流程图
图5 数据广播子模块交互示意图
关键技术
1.利用Wi-Fi探针监测获取原始数据
802.11 协议可以支持利用Wi-Fi探针实现监测周围终端的功能。协议要求每个AP(Access Point)每隔一定时间(几十毫秒到几秒不等)向周围的终端广播beacon帧,告知周围终端自己的信息,并通知终端可以连接。每个终端除了监听周边AP发送的beacon帧以外,还会发送probe帧,告知AP自己的MAC地址,并请求连接。
一般的无线路由器信号强度在-30dbm~-120dbm,有效距离大概是50~100米。利用路由能够搜索周围终端的MAC地址。路由收到探测帧后,将MAC地址记录下来,生成“MAC地址-信号强度-时间”格式的原始数据,将其保存成文本文件,等待服务器定时下载,进行处理分析。
2.通过处理原始数据进行脱团预警
在本文的监控系统中,脱团预警是通过比对原始数据与白名单中的数据实现的。在智能路由器端,每隔一定时间刷新一次原始数据并写入文件保存;在客户端,每隔一定时间下载一次原始数据文件,并与白名单中的数据进行比对,如果发现白名单中的某个MAC地址没有在原始数据文件中出现,则发出警告。
由于原始数据量较为庞大,而白名单通常只有十几个到几十个,因此我们采取的比对算法如下:
(1)将客户端本地保存的白名单复制到哈希表中,以MAC地址为key;
(2)遍历原始数据,每条MAC地址均在哈希表中查找,如果找到该条地址,则将该条地址从哈希表中移除;
(3)如果哈希表长度变为0,说明所有白名单中的地址均在原始数据中出现,比对结束;
(4)如果原始数据遍历完毕,则哈希表中剩余的地址为未出现的地址,发出脱团预警。
在白名单长度不太长的情况下,哈希表的性能不会有太大降低,可近似认为每次查找的时间复杂度为O(1),总的比对过程时间复杂度为O(n),较为高效。
结束语
本文基于旅游团的实际需求出发,设计了一套完整的脱团预警监控系统,并基于Android系统、Play框架和OpenWrt平台进行了实现。该套系统在测试和实际使用中均取得了良好的效果,同时也为Wi-Fi探针技术的应用做出了有益的探索,为基于Wi-Fi面向不同情景应用系统的开发提供了一些参考价值。
编辑|舒文琼 shuwenqiong@bjxintong.com.cn