コンテナ版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 でブラウザからアクセスできるはずです。
この記事が気に入ったらサポートをしてみませんか?