ESP32でAirTagを自作してみた(OpenHayStack + HomeAssistant + ESPHome)

こんにちは。エンジニアの八尾です。
今回ですが、自宅で余っているESP32をAppleのAirTagのように動作させてみました。
ESP32をAirTagのようにBluetooth信号を発信し、その位置を追跡可能にするオープンソースプロジェクト OpenHayStack を紹介します。

OpenHayStack とは

  • OpenHayStackは、Appleの「Find My」ネットワークを利用して、自作のBluetooth端末を追跡できるオープンソースプロジェクトです。(Find My Networkに接続するため、MacOSのメールアプリにプラグインとしてインストールして動作させます。)
  • プロジェクト内のPythonスクリプトでESP32などの端末にファームウェアを書き込むことで、端末に電力を供給した際に自動的にBluetooth信号を発信させて、端末の位置を追跡することができます。

  • *注意: このプロジェクトはApple非公式のPoCプロジェクトであり、Appleが今後もFind My Networkのこのような利用を許可するかは不透明です。そのため、利用する際は自己責任でお願いします。

ESP32とは

  • ESP32は Espressif Systems 社が提供する、Wi-FiやBluetooth通信が可能な低消費電力かつ多機能なマイクロコントローラーです。
  • 今回は、自宅にあったESP32C3というタイプのESP32に、OpenHayStack用のファームウェアを書き込む方法を調査しました。

ESP32C3 は OpenHayStack非サポート端末だった

HomeAssistantのプラグインESPHomeを使ってESP32C3にファームウェアを書き込む

  • 調査したところ、公式のissue( https://github.com/seemoo-lab/openhaystack/issues/138 )に記載されている通り、HomeAssistantのプラグインESPHomeのOpenHayStackコンポーネントを利用することで、ESP32C3にファームウェアを書き込むことが可能だとわかりました。

ESP32 + OpenHayStack + HomeAssistant + ESPHomeの開発環境

  • ESP32の種類
    • Seeed Studio XIAO ESP32C3
  • OpenHayStack
    • macOS 13 - v.0.5.3
  • RaspberryPi4 のスペック
    • モデル: Raspberry Pi 4 Model B
    • RAM: 4GB
    • MicroSD: 32GB
  • Home Assistant
    • Core: 2024.9.1
    • Supervisor: 2024.09.1
    • Operating System: 13.1
    • フロントエンド: 20240906.0
  • ESPHome
    • version: 2024.8.3

HomeAssistantサーバーをRaspberry Pi 4で構築する

  • Home Assistantは、自宅内のスマートスイッチやIoT機器を管理するオープンソースプロジェクトです。( https://www.home-assistant.io/
  • 今回はHomeAssistantのプラグイン機能を利用するため、Dockerではなく、LAN内にRaspberry Piでローカルサーバーを構築して利用しました。

ESPHomeプラグインで、ESP32C3にOpenHayStackのファームウェアを書き込む

external_components:
  - source:
      type: git
      url: https://github.com/ytatsuno/esphome-config-files
      ref: main
    components: [openhaystack]

esphome:
  name: test-esp32c3-openhaystack
  platformio_options:
    board_build.flash_mode: dio

esp32:
  board: esp32-c3-devkitm-1
  variant: ESP32C3
  framework:
    type: arduino
    version: latest

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

# Enable logs
logger:

# Enable Home Assistant API
api:

ota:
  platform: esphome
  password: !secret ota_password

openhaystack:
  # OpenHaystackのキーをBase64でエンコードしたものをここに記述します
  # セキュリティ上、!secretとして管理することをお勧めします
  key: !secret openhaystack_key
  • ファームウェアを書き込んだESP32C3を自宅の車のUSBポートに接続し、昼休みに自宅近くのイオンまで行った際の追跡記録が以下の通りです。

感想

以上で、電力供給したESP32C3をOpenHayStackを使って追跡することができるようになりました。

今回の記事作成にあたって、HomeAssistantを利用したIoT機器の管理についての知識を得ることができました。
また、ESP32がWi-FiやBluetooth接続を持っており、さまざまな用途に活用できることに大変興味が湧きました。今後もESP32に関する調査を続けていきたいと思います。

以上です。