基于Wi-Fi的旅游團脫團預警系統的設計與實現
Wi-Fi是當今日常生活中使用十分廣泛的無線傳輸技術,隨處可見的Wi-Fi網絡大大促進了移動互聯網的發展。網絡覆蓋范圍小是智能路由的一個缺點,但是在某些特定情景下,利用其覆蓋面積小的特點,可以滿足特殊的需求。例如需要監控某個終端是否處于一定范圍內時,我們可以通過監控該終端是否處于某個Wi-Fi覆蓋區域內來實現。本文根據這一思路,設計并實現了一套旅游團脫團預警系統,通過基于OpenWrt的智能路由器實現Wi-Fi探針,監控路由器信號范圍內的終端,并由基于Android系統實現的手機客戶端進行分析比對,最終達到脫團預警的目的。
Wi-Fi是一種短程無線傳輸技術,能夠在一定范圍內支持互聯網接入的無線電信號。它的***優點是傳輸速度較高,在信號較弱或有干擾的情況下,帶寬可調整,有效地保障了網絡的穩定性和可靠性。另外它的傳輸有效距離也很長,在開放性區域通信距離可達305米,使用特殊的天線技術可以達到1000米左右,在封閉性區域通信距離為76米~122米,加入功率放大電路可以增加其傳輸距離。近年來,Wi-Fi技術在智能家居、工業控制、移動手持設備等嵌入式環境中需求日益增多。
如今隨著智能終端設備的普及、智能路由器的發展,市場上出現了一系列結合智能終端和智能路由器的應用系統。隨著旅游業的迅速發展、旅游人數的增多,經常有“游客脫團”現象的發生,導游需要時刻關注旅行團中人員數量,這對于導游來說是種負擔。利用Wi-Fi的探測功能可以開發一套脫團預警系統,在旅游團中,導游可根據該系統查看團員是否脫團。其優勢在于搭建成本小、使用方便。但由于智能路由器是依據終端設備與人的映射來建立監控,其準確性可能會差于傳感器的檢測。
本文以基于Android系統的智能手機和基于OpenWrt的智能路由為例,設計實現了一套監控系統,其使用場景為前文所述的旅游團導游監控團員是否脫團。該套系統具有簡單易用、簡易部署的特點,十分符合上述使用場景。
系統模塊設計
該系統主要由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登錄路由器,下載指定路徑中的文件,對文件進行解析后獲得所需的數據。
關鍵技術
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面向不同情景應用系統的開發提供了一些參考價值。