MacroDroidで自宅だったら何かを自動で実行したい。
「GPSでいいじゃん」
「Wi-Fiでええやん」
そんな声が聞こえる。私もそう思っていた。
しかし、その先には深淵のごとく深い闇が広がっていることを知る者は少ない。
そんな泥沼にどっぷり浸かってしまった私が、まさかの『コーヒーマシン』によって窮地を脱したときの記録である。
理想と現実。なぜ定番の方法ではダメなの?
私のやりたかったことは非常にシンプル。
「〇〇したとき、その場所が自宅なら処理を続行する」
ただ、それだけだ。
- 車から降りて、自宅なら玄関のカギを開ける
- ボタンを押したら、自宅ならエアコンをONにする
みたいな感じ。
巷でよく使われる「自宅に着いたら〇〇する」とは若干違うのだ。
GPS(ジオフェンス)で判定する
結果:断念
定番のGPS。自宅に着いたらといったらコレだよね。
しかし!!!!位置情報の更新頻度にはどうしてもラグがあるのだ。自宅の敷地に入った「その瞬間」に判定したいのに、数十秒〜数分前の位置情報で判定されては意味がない。
じゃあ更新頻度を爆上げすればいいじゃない。スマホが常にアチチ状態かつバッテリー消耗極大が許容できるのなら。
現在の基地局で判定する
結果:論外
いかんせん判定の範囲が広すぎる。ガバガバ判定だしNO IDとかになっちゃうので、使い物にならなかった。
自宅のWi-Fi圏内にいるかで判定する
結果:あと一歩で断念
一番現実的だし、これで行けると思った。しかし自宅のWi-Fiはそこまで男気にあふれていなかった。一歩外に出ると、電波がギリギリ届かない。「敷地内に入った瞬間」を捉えるには、あまりにも電波が繊細すぎたのだ。
ドルチェ グストという光明
計画はそうそうに頓挫するように思えた。
途方に暮れる、私。
家にしかないものはないかな?
さて、手前ここに取りいだしたるがAndroidアプリ『BLE Scanner』
その辺に飛び交ってるBluetooth電波を丸裸にしちゃうやつだ。
何か検討がつかないやつがある
『iBeacon』って書いてある
( ゚д゚)ハッ!
ビーコン!!!
いや、お前は誰なんだ?
画面に表示されているのは、身元不明のiBeacon。
しかし、そのすぐ近くに並んでいる別のBluetoothデバイスのMACアドレスに目が留まる。
我が家のコーヒーマシン「ネスカフェ ドルチェ グスト」だ。
ドルチェグスト(GENIO S Touch)のMACアドレスがこれ
11:bb:cc:dd:ee:ff (※例です)
そして、謎のiBeaconのMACアドレスがこれ。
22:bb:cc:dd:ee:ff(※例です)
ほぼ一緒やん!!!
正体はお前だったんか。
まさか毎日コーヒーを淹れつつ、ビーコンの電波を解き放っていたとは。なぜにビーコンを?
こまけぇこたぁいいんだよ!!
こうして勝利を確信した私だったが、この後さらに泥沼へ足を踏み入れることになる。
MacroDroidの限界と泥沼のマクロ分割作戦
光の速さでMacroDroidを開く私。
しかし、トリガーやアクションの中に「ビーコン」なんて項目は見当たらない。
実験的機能でビーコントリガーを発見
諦めきれず設定画面を漁ると、「設定」→「実験的な機能」といういかにもなスイッチ発見。
これをONにすると、トリガーの一覧に「Bluetoothビーコン」が追加された!
「これで全て解決した」
、、、と思うやん?
MacroDroidのビーコン機能は、あくまで 「ビーコン圏内に入ったら発動するトリガー」だった。
つまり、
ビーコン圏内に入ったら → △△する
これはできる。
しかし私がやりたいのは、
〇〇が起きた → その瞬間だけビーコン圏内か判定する → 圏内なら△△する
コッチだ。
残念ながらMacroDroidには、アクションとしてビーコンを判定する機能が存在しない。
しかも、ビーコン圏内に入るまでスマホが定期的にビーコンチェックし続けるため、あの忌まわきバッテリー消費爆速問題が再燃する。おまけに、圏内から動いていないのに何度も誤実行されたりして、私のやりたいことと致命的にズレている。
(;-ω-)ウーン
マクロ分割作戦
だったらトリガーしか使えないビーコンを、無理やり判定処理として魔改造してやろうじゃないか。
マクロを3つに分割しちゃうのだ。
- トリガー用マクロ(きっかけ担当・ビーコン起動係)
- ビーコン用マクロ(自宅判定担当)
- 実行用マクロ(自宅で実行する処理担当)
トリガー用マクロが作動
↓
ビーコン用マクロを有効化
↓
ビーコン圏内なら自宅フラグをON
↓
実行用マクロ起動
通常時はビーコン用マクロを無効化しておき、必要なときだけ有効化する作戦。
仕組み的には完璧。
バッテリー消費問題もクリアした!
この作戦、まさに天才軍師のそれであった。
「これで全て解決した」
、、、と思うやん?
MacroDroidはそんなに甘くなかった。
それでも解決しなかった理由
ビーコン用マクロを有効にしても、その瞬間にビーコンを確認してくれるわけではない。
検証した限りでは、一定間隔で行われるビーコンスキャン待ちがそのまま残っており、結局すぐには判定されなかった。
さらに、マクロの有効・無効を頻繁に切り替える構成も動作が安定しない。
理論上は完璧。
しかし、現実では使い物にならなかった。
(;-ω-)ウーン
最終決戦:謎プラグイン「iBeacon Tasker Plugin」
やはり、MacroDroidでは限界なのか、、、。
私は、Android自動化の禁忌、Taskerプラグインの導入へと足を踏み入れることにした。
しかし、Google Playストアで探すも、お目当ての機能を持つアプリは見つからない。
F-Droidの野良アプリを選んだ理由
執念で、オープンソースアプリの総本山「F-Droid」で配布されている『iBeacon Tasker Plugin』というアプリに辿り着いた。
ネットに情報は一切ない。完全なる「野良アプリ」の一種である。
ええい、ままよ!
虎穴に入らずんば虎子を得ず
ケセラセラ
、、、と思うやん?
よく吟味してインストールした。
理由は、このアプリが要求してきた「権限」にある。
よく確認すると、このアプリにはインターネット通信権限がない。
Bluetoothスキャンに必要な位置情報やBluetooth関連の権限だけだった。
F-Droidで配布されていることも踏まえ、今回は自己責任で導入することにした。
というわけで、私は以下の設定で権限を付与してインストール!
位置情報: 常に許可(正確な位置情報を使用)
付近のデバイス: 許可
通知: オフ(通知は不要なので黙らせる)
※ストア外のアプリを入れるのは自己責任だし、最悪の場合、スマホのデータを盗まれるリスクだってあるよ。試すときは自己責任でね!
設定と実際の値の入れ方
こうして導入した『iBeacon Tasker Plugin』
開いてみると、英語で不親切極まりない画面が私を出迎えた。
しかし、UIは至ってシンプルだった。
アプリに説明書なんて気の利いたものは存在しない。頼れるのは、『BLE Scanner』で調べ上げたドルチェグストのビーコン情報だけだ。
MacroDroidのアクションから「Tasker/Localeプラグイン」→「iBeacon Tasker Plugin」を選択。
手探りで以下の値を入力していく。
UUID: BLE Scannerに表示されていた長〜い英数字のID
Major: 〇〇
Minor: 〇〇
Duration:60 (※スキャンする秒数。1分間じっくり探してもらう!)
一言一句間違えないようにブチ込み、設定を保存。
完成したシステム
これで、私が夢にまで見た最強のシステムが爆誕した。
- トリガー(車から降りた、ボタンを押したなど)が発動
- 「iBeacon Tasker Plugin」が起動し、その瞬間だけドルチェグストのビーコンを探しに行く
- ビーコンが見つかれば「自宅」と判定して処理を続行!
裏でスマホがずっと電波を探し続ける必要は一切ない。
ピンポイントでチェックが入るため、バッテリー消費問題もない。
ラグもなければ、誤検知もない。ただトリガーが引かれた瞬間に、「我が家のコーヒーマシンが近くにあるか」を正確に、かつ確実に判定してくれる。
それは、混沌とした世界に穿たれた、一筋の烈光であった。
否、完璧という生ぬるい言葉すら、その絶対的な存在の前には色褪せる。
思考が、概念が、そして世界の理そのものが、一瞬にして再構築されるような衝撃。
暗中模索の果てに渇望し、夢にまで見た至高の「答え」が、今ここに完全なる具現となって降臨したのだ。
あまりの美しさと、あまりにも必然に満ちたその姿に、理性を引き裂かれた魂はただただ、歓喜の哄笑をあげるほかなかった。
「人類は、創世の瞬間からこれを求めていたのだ」
三ヾ(。・∀・)ノィェァ♪