[IOT]從有線到無線,我的 Beacon 開發之路

在網路上看到 Beacon 的介紹,可以運用在很多地方。

而在一般的企業中可以有什麼樣的應用呢?

以下分享筆者這陣子利用 Beacon 開發的經驗給大家,

 

前言

Beacon 是什麼呢? 它的英文就是燈塔、烽火臺 …

它就像燈塔一樣一直發送 藍芽的廣告訊號,

主要有 UUID, Major 及 Minor 再包含一些 payload 資料。

而 UUID 可以代表一個公司, Major 及 Minor 則可以讓我們再分別定義 分公司 或 地區等等。

 

那要如何知道這個 Beacon 在那裡呢?

要透過藍芽去掃描它,iOS就內建有 Core Location APIs 可以使用。

而 Android 則可以使用 Beacon Library 來掃 Beacon。

在一開始測試 Beacon 時,建議使用 Android 安裝 掃描 Beacon 的 App比較方便,

因為 iPhone 無法直接掃描,需要輸入 UUID 等資訊才可以掃。

一開始掃到時,會有進入這個 Beacon 區域的事件 (Monitoring),

當進入 Beacon 這個區域後,就可以一直掃描這個 Beacon (Ranging),然後取得它的 RSSI 值來判斷跟它的距離。

最後如果掃不到這個 Beacon 的話,會有一個 離開這個 Beacon 區域的事件 (Monitoring)。

 

有了 Beacon 之後,初步的 Survey 後,

我們就開始試看看它到底能不能像網路上說的那麼神奇,

所以我們做了以下的應用,

 

實作

1.室用定位

網路上的文章都說它可以用在室內定位,那一個辦公室中,我放3個Beacon是不是就可以利用三角定位來找出人在那裡呢?

所以原本的目標是一個辦公室中放個4顆 Beacon,看看能不能取得每個人行走的路線,未來還可以分析那條路是熱區,或是那個員工都會去找那個員工之類的分析。

測試結果發現, Beacon 過了3公尺後,RSSI值後不穩定,所以如果我真的要定位準的話,就要買很多顆的 Beacon。

如果多顆的話,就要用 Fingerprint 來算位置在那裡。

一顆穩定的 Beacon 不便宜,如果要在辦公室達到目標的話,成本太高,所以後來我們就放棄了。

 

2.自動簽到、簽退

前面提到,我們可以知道進入、離開及一直掃描 Beacon ,所以我們可以自動記錄這些資訊。

就可以知道員工幾點到公司、幾點離開公司。

本來 App 是使用 Cordova 來寫,但這樣員工到公司時,就要拿出手機,然後開啟 App 去掃描,

這樣跟拿出門禁卡來刷,好像好不到那去。

所以我們就改用 Xamarin 來寫,Android的部份如果要在背景掃的話,就要使用 Service,Android 6.0 還要加入白名單。

而iOS內建就Support在背景處理(App拉掉,還是會運作),但雖然 App 知道進入或離開 Beacon 區域,這時 Http 卻不給用,因為畫面是暗的。

這時我們目前的解法就是當 User 進入或離開時,發一個 Local 的通知,讓手機亮起來,這時 Http 就可以用,所以就可以將資料送到 Server 上了(只是有點擾人)。

 

3.控制門禁,達到自動開門

當知道人與Beacon的距離之後,因為我們公司有門禁,進出都要刷卡。有時開會時,手上會拿筆電或其他的東西,再要刷卡實在不太方便。

如果我們就使用 RPi 來模擬 Beacon ,同時再接公司的門禁,當員工靠近門時,Server收到資訊之後,就透過 Azure IOT Hub 發訊息(免費的跟付費的數量跟速度有差哦)讓 RPi開門。

架構圖如下,

演示的視頻如下,

結論

看起來雖然簡單的事,但實際去做往往會遇到意料之外的問題,例如RSSI不準、Android 在背景久了之後會休眠,然後就無法順利掃描(可設定 Wake Lock)。

除了開發技術上的問題之外,使用者是否願意開藍芽、定位等權限,也常常讓 App 無法順利運作。

未來就往 Physical Web 方向走,會場報到、員工簽到、退,逃生口的開關 Web 化 ….

大家可以多發揮一些想像來讓世界更美好。

開發過程非常感謝同事們的幫忙 …

 

參考資料

Beacon微定位商機崛起

室內定位視頻

Physical Web

 

本文也發表於亂馬客Blog

作者: 亂馬客

亂馬客 @叡揚資訊 rainmaker_ho@gss.com.tw https://rainmakerho.github.io/ https://www.slideshare.net/rainmakerho

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *