ESP32とHome AssistantでBLE位置測位をやってみる

はじめに

以前からHome Assistantを利用した自宅の自動化に興味があり、ESP32を利用したBLE位置測位システムを構築しています。

最終的な目標は、

  • 部屋ごとの在室判定
  • 照明の自動ON/OFF
  • 家電の自動制御

などです。

現在はシステムの大部分が完成しており、実運用開始目前の状態まで来ています。

なぜBLE位置測位なのか

Home Assistantにはスマートフォンの位置情報を利用した在室判定機能があります。

しかし、

  • スマートフォンを常に持ち歩くとは限らない
  • 充電中は置いたままになる
  • 部屋単位の判定は難しい

といった問題があります。

そこでESP32を利用したBLE位置測位を採用することにしました。

各部屋に設置したESP32でBluetooth信号を受信し、その受信強度からどの部屋にいるかを推定します。

構成

現在の構成はこんな感じです。

Garmin vivoactive 5

↓ BLE

ESP32 (BLE Proxy)

↓ Wi-Fi

Home Assistant

↓

照明・家電制御

ESP32はESPHomeを利用してHome Assistantに接続しています。

AirTagを試してみた

最初は手元にあったAirTagを利用できないか試してみました。

ESP32からは一時的に検出できたものの、

  • ボタン操作直後は見える
  • しばらくすると見えなくなる
  • 継続的な監視ができない

という状態でした。

AirTagは本来Appleの「探す」ネットワーク向けに設計された製品なので、一般的なBLEビーコンのような使い方には向いていないようです。

少なくとも今回の用途では採用を見送りました。

Garminの時計が使える?

そこで普段使用している Garmin vivoactive 5 を試してみました。

正直なところ、最初は期待していませんでした。

Garminのスマートウォッチはスマートフォンとの連携を前提としており、

Bluetooth機器として見えたとしても位置測位には使えないだろう

と思っていたからです。

BLEアドレスが変わる

実際に確認してみると、vivoactive 5はBLEアドレスが定期的に変更されていました。

そのため当初は、

ああ、これは追跡できないな……

と思っていました。

名前は変わらなかった

ところがしばらく観察していると面白いことに気付きました。

BLEアドレス
→ 定期的に変わる

デバイス名
→ 変わらない

のです。

つまりアドレスで追跡しようとすると失敗しますが、デバイス名で判定すれば継続的に認識できます。

これに気付いた時は、

しめしめ……

となりました(笑)

現在の進捗

実はソフトウェア部分はほぼ完成しています。

  • Home Assistant導入済み
  • ESP32設定済み
  • Garmin検出確認済み
  • 位置判定の目処もついた

という状態です。

ただし実運用にはもう一歩足りません。

ESP32を常設したい場所に電源が無いため、コンセント増設工事が必要になっています。

現在はその工事待ちです。(免許は持っていますので自分で工事します

今後の計画

無事に運用開始できたら、

  • 人がいる部屋だけ照明を点灯
  • 一定時間不在なら自動消灯
  • エアコンとの連携
  • 在室状況の可視化

などを試してみたいと思っています。

また、現在運用中の太陽光発電設備やESP32を利用した各種監視システムとの連携も考えています。

まとめ

ESP32とHome Assistantを利用したBLE位置測位システムを構築中です。

AirTagは継続的な監視には向いていませんでしたが、Garmin vivoactive 5は意外にも位置判定へ利用できる可能性が見えてきました。

システム自体はほぼ完成していますが、現在はESP32設置用のコンセント増設待ちとなっています。

完成したら記事にしようと思っていましたが、完成する前に別の工作を始めそうなので、とりあえず現状を記録として残しておきます。

コメント

タイトルとURLをコピーしました