見出し画像

コンテナ版Home AssistantをOpenWrtで動かす


ホームオートメーションを行える Home Assistant (HA) には複数のインストール方法があります。その中でも、Containerを使用したインストールは、ほかのインストール方法と比較して手軽です。ARMv7用のContainerが入手できますので、同アーキテクチャを採用したSoCを積んでいて、かつOpenWrtが導入可能な機種であれば、docker-composeにより手軽に Home Assistant を導入できます。しかし、ビルドに潤沢なリソースが必要なので、パワフルなデバイスを選択する必要があります。

そこで、某オークションなどで安価で入手できる Fortinet Fortigate 50E に対し、OpenWrt および Home Assistant の導入を行いました。このデバイスはパワフルなだけでなく、無線を積んでいないので技適を気にせずに好き放題できます。
また、信頼性に疑問が残りますが、dbus(deamon)と安価なBluetoothモジュール(TP-Link UB400)を用いてBluetoothを構成し、SwitchBotの温湿度計とプラグミニと通信できることを確認しました。

必要なもの

  • 最低でも以下の条件に合致しているデバイス

    • 2つの仮想CPU

    • 2GBのメモリ

    • 32GBの記憶領域(USBメモリでも一応いい)

    • OpenWrtが導入可能

  • USBハブ

  • Bluetoothアダプタ

参考:筆者が使ったもの

  • Fortinet Fortigate 50E(OpenWrt 23.05.2 導入済)

  • USB 3.0ハブ(Anker A7516)

  • USBメモリ 32GB(SanDisk Ultra Fit 32GB SDCZ430-032G-J46)

  • USB Bluetoothドングル(TP-Link UB400)

注意

Bluetoothに関して、2点の注意点があります。

Home Assistant のドキュメントにDBusの実装はdbus-brokerでなければなならないと記述されているのを見るに、OpenWrtでパッケージとして提供されている dbus (deamon) は、HomeAssistantが推奨する環境ではないようです。

また、使用した TP-Link UB400 は、公式には非対応扱いになっています。

どちらも試しに利用してみたら、現在の筆者の環境では特に問題なく動いてしまいました。環境によっては問題が生じるかもしれません。

手順

たいていのOpenWrtに対応するデバイスは十分な記憶領域が存在しないので、まずはこちらを参考にrootfsを拡張しておきます。
筆者はテストのためにUSBメモリ上にインストールしていますが、長期運用を考えるのであればSSDやHDD上へのインストールを推奨します。

また、可能ならビルド時にswapも確保しておくといいと思います。なんとかメインメモリの2GBだけでもビルドできましたが、ビルド時は常にかつかつでした。

容量が確保できたら、必要なパッケージをインストールします。
(足りてないものや必要ないものもあるかも)

opkg update
opkg install dockerd docker-compose luci-app-dockerman bash zoneinfo-all
opkg install bluez-daemon bluez-libs bluez-utils bluez-utils-btmon bluez-utils-extra kmod-bluetooth
opkg install dbus dbus-utils libdbus

シンボリックリンクされたtimezoneでエラーが出たので、日本のもので上書きしました。

cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

適当な場所にディレクトリを作り、docker-compose.ymlを書きます。
(適切な場所を知らない)

mkdir /root/docker/docker-homeassistant
cd /root/docker/docker-homeassistant
vi docker-compose.yml

筆者の場合、こんな感じに書いています。公式のドキュメントから、OpenWrt側のconfigの場所とDBusの場所を変更しています。

version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: "ghcr.io/home-assistant/home-assistant:stable"
    volumes:
      - /root/docker/docker-homeassistant/config:/config
      - /etc/localtime:/etc/localtime:ro
      - /var/run/dbus/:/run/dbus:ro
    restart: unless-stopped
    privileged: true
    network_mode: host

変更が終わったらdocker-composeします。とても時間がかかる(1時間くらいかかった)のでコーヒーでも飲みながら待ちましょう。

docker-compose up -d

docker-composeが終わったら、http://<デバイスのIPアドレス>:8123 でブラウザからアクセスできるはずです。

この記事が気に入ったらサポートをしてみませんか?