2014/12/03

用 beacon 通知阿福, 然後阿福會去叫燈泡君打開燈.

先前在做 iBeacon 尋寶遊戲的時候, 就想說也可以用 iBeacon 來做自動控制. 趁最近有空, 萊恩大兵整合了一個叫做 阿福幫我 的 iOS app 出來. 


以結果來說, 它的確有做到 (iBeacon + 自動控制). BUT! 人生最厲害就是這個 BUT! 它有很多應用的限制, 很難用. 

分享一下這次的實作過程與檢討:

這隻 iOS app 的名字叫做 阿福幫我.


AppIcon
Launch Image

理論上它是一隻 always on, always stand by 的 app, 當偵測到附近有 iBeacon 訊號時, 會依收到訊號的 (major, minor) 值, 做出不同的事情. 


app 主畫面

例如:
* (major, minor) = (-, 1) 時, 就開啟 browser, 連到萊恩大兵的部落格頁面.




* (major, minor) = (-, 2) 時, 就連去 YouTube 播放五月天的將軍令 MV.
* (major, minor) = (-, 3) 時, 就會打開遙控燈泡君 (萊恩大兵寫的一隻遙控燈泡開關 iOS app) 起來, 並主動點亮燈泡.




程式碼部份, 阿福幫我是從嗶嗶尋寶 (萊恩大兵寫的一隻 iBeacon 尋寶遊戲 iOS app) 修改出來的, 再透過 URL Scheme 的機制去呼叫別的 app (例如 browser, YouTube 或遙控燈泡君) 做事.

全部的程式碼已分享在 Github_GoGoPrivateRyan_AFuuHelpMe, 細節這邊就不多講了, 有興趣的人可參考文末的連結或私訊討論. (遙控燈泡君的程式碼也加上了 URL Scheme, 也一併更新在 Github_GoGoPrivateRyan_CBRemoteController 上了.)

前面說過, 萊恩大兵並不滿意阿福幫我的功能. 原因有幾個:

(1) iBeacon 驅動所需時間會因 app 的狀態而有不同.

理想情況下, 是要 iBeacon 一靠過去, 相應的 app 就要馬上立刻 right now 被驅動起來. 實際使用時, 卻很難做到即時. 

光 app 就有可能是 
a) 在前景執行 
b) 在背景執行 
c) 沒有被執行

而 iDevice 的螢幕有可能是 
i) 打開的
ii) 鎖定的 
iii) 關閉的

這些不同組合, 都會有不同的 iBeacon 偵測週期. 某些組合甚至得等上數分鐘之久, 才會有動靜.

(2) app 跑到背景後, 就很難自動化了.


在 iDevice 上, 當 app 跑到背景之後, 就只能靠 local notification 的機制來提醒用戶做手動控制. 雖然某個層面來說, iOS 這個限制也算合理, 但若著眼在自動控制, 這限制根本天殘.

阿福幫我跑到背景後, 再拿 beacon 靠近時, 它會跳出通知. 



用戶得自己去點按通知, 才會把阿福拉回前景, 然後才能觸發預定的動作. 

以自動化的角度, 這樣是不是很難用?

(3) iBeacon 只能做開關控制.

這是萊恩大兵目前的看法. 簡單的實驗下來, iBeacon 會比 NFC 更適合做中短距離的開關自動控制 (開關燈, 開關冷氣, 開關電視), 但應付不了後續而來的複雜調控 (燈泡亮度調整, 冷氣溫度調整, 電視轉台).

(4) iBeacon 做自動控制會有 security concern.

這也是萊恩大兵目前的看法. iBeacon 僅能藉 UUID,  Major 和 Minor 來做區隔, 並沒有 access control 的機制. 只要知道這些資料, 隨便拿個 iDevice 都能模擬成 iBeacon 發訊器發送相同的訊號出來. 因此, 拿 iBeacon 做些無害的自動控制 okay, 要訴求隱私或安全就不 okay 了.

(5) 3rd party app 得先 URL Scheme 註冊.

並不是所有安裝在 iDevice 上的 app 都能被阿福叫喚來叫喚去. 它們之間得有個共通的連絡機制, 例如 URL Scheme, 然後才能串在一起.

(6) 某些 3rd party app 得等它 warm up 才能送命令給它.

這條比較像是經驗談. 在呼叫遙控燈泡君時, 萊恩大兵發現它需要一些 warm up 的時間, 若太急著送命令給它, 反而會造成命令丟失的狀況.

以上這些就是萊恩大兵這次實驗的心得. 對這主題有興趣的朋友, 歡迎留言交流, 謝謝.


話說, 萊恩大兵做完這 app 才發現, 網路上已經有類似的東西了. (Launch Here- iBeacon based app shortcuts)


[參考資料]



[萊恩大兵的其它文章]

自製大四軸

自製大四軸, 實作分享@華山文創園區
自製大四軸, (1) 零組件篇, 遙控器 (Drone, Quadcopter, Futaba, Maker, Arduino, Animatronic Eye)
自製大四軸, (2) 零組件篇, 飛控板 (Drone, Quadcopter, MultiWii, Arduino, Futaba, Maker)
自製大四軸, (3) 零組件篇, 自行雷切木質機架 (Drone, Quadcopter, Maker, Laser Cut)
自製大四軸, (4) 零組件篇, 馬達與電變調整 (Drone, Quadcopter, Maker, Electric Speed Control, Motor)
自製大四軸, (5) 組裝篇, 四軸飛行器成形 (Drone, Quadcopter, MultiWii, Arduino, Maker, Electric Speed Control, Motor)
自製大四軸, (6) 調整篇, 飛行前兩三事 (Drone, Quadcopter, Maker, Futaba, Arduino, MultiWii)
自製大四軸, (7) 充電篇, iMax B6 充電器操作記要 (Charger, Battery)
自製大四軸, (8) 問題篇, 機架損壞維修 (Drone, Quadcopter, Laser Cut)
自製大四軸, (9) 改良篇, 方便拆卸的木質機架 (Drone, Quadcopter, Maker, Laser Cut)
自製大四軸, (10) 外飛篇, 新手的青蛙跳與遛狗 (Drone, Quadcopter, Maker, MultiWii)

自動報球速的棒球


CC2540 Bluetooth Low Energy
筆記, CC2540 Bluetooth Low Energy, (1) 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (3) SimpleBLEPeripheral 簡單介紹 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (4) 在智慧手機上執行範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (5) 偵測與發送 iBeacon 訊號 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 發訊器 x 防丟器 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 尋寶遊戲 (Bluetooth, CC2540, iBeacon, iOS app)
實作, BLE + iOS app, 遙控燈泡君 (Bluetooth, CC2540, iOS app)
做實驗, 用 iBeacon 做自動控制的可行性 (Bluetooth, iBeacon, CC2540, Automation, URL Scheme, iOS app)

OpenCV 學習路徑

記錄, OpenCV 學習路徑, (1) 環境安裝與第一個範例 (OpenCV, Python)
記錄, OpenCV 學習路徑, (2) 辨識多邊形 (OpenCV, Python)
記錄, OpenCV 學習路徑, (3) 人臉辨識 (OpenCV, Python, Face Recognition)

小惡魔 無線溫度感測器

108 大眼仔
Plot Clock

體驗, 原住民互動故事書@宜蘭大同鄉泰雅生活館
體驗, 蛋生音互動裝置@兒童美術館 (Arduino, 3D Printing, HC-SR04, Interactive)


實作, 電容感應音樂樹

0 意見:

張貼留言