MacroDroidで車のエンジン停止トリガーを考える【Android】

MacroDroidを使って車を降りた時に自動でマクロを動かしたかった。つまり、「車のエンジンが切れた瞬間」をどの様にして正確に検知するかが課題になる。

車内で常に充電する運用であれば「電源の切断」をトリガーにすれば簡単に実現できる。
しかし、スマホをカバンやポケットに入れたままにするなど、車内で充電をしない運用の場合はこの電源トリガーが使えない。

この問題を解決するため、エンジン停止を最速検知する方法を考えた。

目次

結論

検証環境:Pixel 8a(Android 17)/マツダコネクト/Ottocast A2AIR PRO

スマホを車内で充電しない運用なら、Android AutoのWi-Fi切断をトリガーにする方法が最も安定していた。

Bluetooth切断やAndroid Autoの通知消去、USB Bluetoothアダプターなども検証したが、それぞれタイムラグや誤作動などの問題あり。

実際の検証ログをもとに、それぞれの方法を比較しながら最適なトリガーを紹介する。

完璧な降車検知を目指して

検知のために様々な方法を検証したが、それぞれに致命的な罠があった。

車のBluetooth切断をトリガーにする

【結果:大遅刻】エンジンを切ってもナビの残電力がしばらく消えない車種が多く、車を降りて歩き出してからマクロが動くため遅すぎた。

車のUSBポートにPC用のBluetoothアダプターを挿す

【結果:使用不可】エンジン始動でBluetoothアダプターが起動、スマホとペアリングされたアダプターがエンジン停止と共に電源が落ちるため検知できるかと思いきや、そもそも、ドライバーがないため、Bluetoothアダプターとして機能しない。

Android Autoの通知消去をトリガーにする

【結果:使用可能だが誤爆する】普段は、Android Autoを使用している。当然、Android Autoはエンジン稼働中のみの動作となっている。Android Auto起動中は、常に通知が表示されていたのでこれを利用することにした。
エンジン停止でAndroid Autoの通知も消える。この通知の消去トリガーは、想定通りエンジン停止のタイミングを取得することができた。

しかし、起動時に通知のオン・オフ(チャタリング)が何度も発生する。マクロ側に複雑なチャタリング対策を組み込んでも動作が安定しなかったため、実用性を考慮して断念。

💡ちなみに、MacroDroidのトリガー設定でAndroid Autoの通知を対象にしたい場合、デフォルトのアプリ一覧には表示されない。アプリ一覧で「起動不可アプリを表示」にチェックを入れると表示される。

解決策:Wi-Fi切断をトリガーにする

私の車は、有線接続のAndroid Auto/CarPlayにしか対応していないため、OTTOCAST(オットキャスト)製のワイヤレス化アダプターを使用している。

あらゆる方法を試した結果、最も実用的だったのが、Android AutoワイヤレスアダプターのWi-Fi切断を利用する方法だった。

ワイヤレスAndroid Autoの仕様の壁

はじめはワイヤレスアダプターのBluetooth切断をトリガーにすれば解決すると思った。

しかし、ここにワイヤレスAndroid Autoならではの通信の仕様という大きな罠があった。

実はワイヤレスAndroid Autoは、BluetoothとWi-Fiを以下のように役割分担して通信を行っている。

  • Bluetooth:端末の発見・認証・接続開始の合図
  • Wi-Fi:画面映像・音声・操作などの本体データ通信

Bluetoothで「今から繋ぐよ」と最初の挨拶だけを交わし、接続が確立した瞬間に大容量通信ができるWi-Fiへとバトンタッチする仕様なのだ。

そのため、ワイヤレスアダプターのBluetoothはAndroid Autoが起動するとすぐに切断されてしまう

つまり、「エンジンを切ったからBluetoothが切れる」のではなく、「乗車して繋がった直後にBluetoothが切れる」ため、降車トリガーとしては全く役に立たないのだ。

BluetoothがダメならWi-Fiだ!…思ったら表示されない?

ならば、本音通信をしているWi-Fiの切断をトリガーにしよう!

そう考えてMacroDroidの設定画面を開いたのだが、ここで第二の罠が牙をむく。

設定したいのに、Wi-Fiの候補リストにワイヤレスアダプターのSSID(ネットワーク名)が表示されないのだ。

なぜ表示されないのか。理由は先ほど解説した「Bluetoothで認証してから、裏でWi-Fiを立ち上げる」というAndroid Autoの特殊な仕様そのものにある。

このWi-Fiは、自宅のように常時電波を出して待機しているわけではない。車に乗り、スマホとアダプターがBluetoothで「挨拶」を交わした後に、その場限りの臨時の通り道として初めてスマホ内に生成されるのだ。

つまり、自宅の部屋でいくらMacroDroidを開いても、スマホはそのWi-Fi電波の存在すら感知できないため、リストに出てくるはずがないのだ。
任意で接続したWi-FiではないのでMacroDroidのWi-Fiリストに過去の履歴としても表示されない。

しかし、Android Auto起動中は確実にWi-Fi接続されている。

設定は「実際の車内」で行う

この仕様の壁を突破するための答えはシンプル。

「実際に車に乗り、Android Autoが完全に接続されて動いている状態」でマクロを設定することだ。

Android Autoが起動している真っ最中であれば、スマホはアダプターのWi-Fi電波をしっかり掴んでいる。そのため、MacroDroidのWi-Fi選択リストにも、普段は隠れているアダプターのSSID(ネットワーク名)がひょっこり出現する。

具体的な設定手順は以下の通り。必ず車内で接続した状態で行ってほしい。

  1. 車内でAndroid Autoを起動し、スマホと接続させる。
  2. MacroDroidを開き、新規マクロを作成。
  3. 【トリガー】を追加 ➔ 「接続」 ➔ 「Wi-Fi状態の変化」を選択。
  4. 「ネットワークから切断時」を選択。
  5. Wi-Fiの一覧リストが表示されるので、現在接続されているワイヤレスアダプターのSSID(例:OTTO-XXXXAAWireless-XXXX など)を選択。

【検証結果】実際のシステムログで見るタイムラグ

「Wi-Fi切断が本当にベストなのか」を証明するため、エンジン停止の瞬間に手動で基準ログ(0秒)を記録するマクロを組み、実際のタイムスタンプを計測した。

なお、検証時の私の環境は以下の通り。

  • 車種(ナビ):マツダ(マツダコネクト)
  • スマホ:Pixel 8a(Androidバージョン17)
  • ワイヤレスアダプター:A2AIR PRO(Ottocast)

この環境で2度計測した、リアルなシステムログデータがこれだ。

1回目の計測ログ

13:14:07 – Android Auto通知消去(※起動時の誤爆①)
13:14:09 – Android Auto通知消去(※起動時の誤爆②)
13:20:21 – 【基準】エンジン停止(手動記録)
13:20:34 – Wi-Fi切断(アダプター電源オフ) ➔ 【13秒後】
13:20:34 – Android Auto通知消去 ➔ 【13秒後】
13:21:25 – 車Bluetooth切断 ➔ 【1分4秒後】

2回目の計測ログ(有線充電トリガーも比較)

14:12:21 – Android Auto通知消去(※起動時の誤爆①)
14:12:24 – Android Auto通知消去(※起動時の誤爆②)
14:13:13 – 【基準】エンジン停止(手動記録)
14:13:15 – 電源切断(有線充電トリガー) ➔ 【わずか2秒後!】
14:13:27 – Wi-Fi切断(アダプター電源オフ) ➔ 【14秒後】
14:13:27 – Android Auto通知消去 ➔ 【14秒後】
14:14:17 – 車Bluetooth切断 ➔ 【1分4秒後(64秒)】

ログから見えた決定的な事実とトリガー選びの結論

この2回のデータ比較から、各トリガーの驚くべき実態が浮き彫りになった。

  • 電源の切断:約2秒(最速)
    文句なしの最速。
    ただし、これはスマホを車に乗るたびに電源接続する場合のみ使える最速トリガーだ。カバンに入れっぱなしの無線環境では使えない。
  • 車のBluetooth:1分4秒遅れ(大遅刻)
    今回の2回の検証では1分4秒(64秒)の遅延という結果だった。
    エンジンを切っても、残電力が切れるまでにこれだけの時間がかかる仕様なのだろう。車を降りて歩き出してからマクロが動くため、降車検知としては実用外だ。
  • Android Autoの通知消去:実用範囲内の速度だが…(地雷)
    タイムラグ自体はWi-Fi切断と同等だが、致命的な欠点がある。エンジンを切る前の走行中に、高確率で通知が消えたり出たりする「誤爆(チャタリング)」が発生しているのだ。これでは運転中に降車マクロが暴発してしまう。
    このトリガーを使用する場合はMacroDroid側でのチャタリング対策が必要となるため却下。
  • Wi-Fi切断:最も実用的
    スマホの処理を挟むため、エンジン停止から約13秒のラグは生じる。しかし、走行中の誤爆が一切なく、2回ともほぼ同じ秒数で安定して検知できている。

結論として、スマホをカバンに入れたままの無線環境において、実用性と確実性を兼ね備えた「不戦勝の完全勝利トリガー」はWi-Fi切断である。

設定例(MacroDroid)

MacroDroidを初めて使う場合は、基本的な使い方を先に確認しておくと設定がスムーズです。

運転終了マクロの設定例

今回使用したマクロは非常にシンプル

  • トリガー:Wi-Fi状態の変化 → ネットワークから切断時:OTTO-XXXX
  • アクション:バイブ(動作確認用)
  • 条件:なし

今回は検証のため、アクションはバイブレーションのみを設定。実際の運用では、通知の送信やアプリの起動など、目的に応じて好きなアクションへ置き換えよう。

まとめ:自分のスタイルに合わせて最適なトリガーを選ぼう

今回は、MacroDroidを使った「完璧な降車検知」について、ログデータを元に検証した。

結論として、車内でスマホをどう扱うかによって、選ぶべき最適解は変わる。

  • スマホをカバンに入れっぱなしの「無線派」 ➔ 今回実証した「ワイヤレスアダプターのWi-Fi切断」が、誤爆なしで最も安定したベストな選択肢だった。
  • 車に乗ったら毎回ケーブルに繋ぐ「充電派」 ➔ 「車のBluetooth接続中 & 電源の切断」を条件にするのが、設定も簡単で文句なしに最速(約2秒)の判定ができる。

有線・無線のそれぞれの罠と特性を理解して、カーライフに合わせた快適な自動化マクロを組んでみよう!

よかったらシェアしてね!

コメントする


目次