一般的なWindows用小型デスクトップPCであるIntel NUCに、Home Assistantをインストールしました。初めて使うHome Assistantなので、いまだに使い方が良くわからないのですが、とりあえずはESPHome使ってLチカしました。Home AssistantはHomeKitブリッジとして使えるので、ESPHomeで作ったデバイスはiPhone/Macのホームからも利用できました。
Intel NUCをサーバにする
Home AssistantはRaspberry Pi 4をサーバにしての動作例が多いです。でも手持ちのRaspberry Pi 4が故障してしまい、予備も無く、昨今の品不足で手に入らなくなってしまいました。それでお蔵入りだった初代Intel NUC DC3217IYEを引っ張り出しました。メモリは8GB、SSDはmSATAの64GB、CPUはCore i3-3217Uを搭載してます。現在、Homebridgeを動かしているマシンも同じ機種で、さらに1台予備があったのでそれを使いました。
ケースや冷却がしっかり作られた汎用コンピュータは、常時電源入れっぱなしのサーバーとして、Raspberry Piよりも適しているのではと思い始めてます。昔のCore i3ですが、それでも処理速度はRaspberry Pi 4の2倍くらいはありますし、mSATA SSDはSDカードより堅牢です。消費電力は多少多いですが、Macbook Airなどに搭載されているモバイルCPUシリーズなので省電力です。Raspberry Pi 4と比較すると、2.5倍程度の消費電力になります。具体的には、Raspberry Pi 4だと年間400円くらいの電気代が、1000円になる程度の差です。
初代Intel NUCは、中古でしか入手できませんが(7000円くらい)、品不足のRaspberry Piよりも入手容易かもしれないです。この機種以外にも、似たようなスペックの小型省電力中古デスクトップPCはたくさんあるので選択肢も多いです。Intel NUC以外にも、HPのEliteDesk、DellのOptiPlex、LenovoのThinkCentreなどの小型モデルが、スマートホームサーバーに向いていると思います。中古と新品の価格を比較するのはフェアでは無いですが、古い中古ならばRaspberry Pi 4の8GBモデルとあまり変わらない価格で入手できます。
汎用x86-64版を導入
汎用PCを使うので、Home Assistantも汎用x86-64版を使います。home-assistant.ioのサイトから、Generic x86-64のページに行き、その内容に従ってインストールします。
Home Assistantは、Linuxからaptコマンドなどを使ってコツコツインストールするのではなく、イメージを使ってインストールする方法を推奨しているようです。その方が問題が発生しにくいのは確かです。なので、
- OS込みのディスクイメージをボリュームに書き込む
- イメージをKVM, VirtualBox, Vmwareなどの仮想マシンで使う
- イメージをDockerなどで使う
などの方法が最初に書かれてます。WindowsとMacで可能なのは2の方法だけです。3の方法は、主にQNAPなどのNASで使うことを想定しているようです。WindowsやMacでネイティブに動くバージョンも配布しているHomebridgeに比べると割り切った実装です。今回は、休眠マシンを使うこともあり、ハードウェアを贅沢に使う感じの、1の方法でインストールしました。
まずは、Intel NUCのSSD (容量は64GB) をmSATAソケットから取り外し、mSATA – SATA変換基板に取り付け2.5インチSSDの形状にして、USB接続HDDケースに入れて、これをMacに取り付けました。MacからはUSB接続SSDとして認識されました。
次に、Home Assistantのページの記述に従って、Balena EtcherソフトウェアのMac版をダウンロードして起動します。そして、Flash from URLを選んでページに書いてある最新のイメージのURLを指定します。
https://github.com/home-assistant/operating-system/releases/download/8.5/haos_generic-x86-64-8.5.img.xz
最後に書き込み先のドライブとして、USB接続したmSATA SSDを指定して、Flash!ボタンを押します。
この結果をディスクユーティリティで確認すると以下のようになってました。
このSSDを、元のIntel NUCのmSATAソケットに戻して、電源を入れればHome Assistantが起動します。この先はNUCをディスプレイ無しで運用する予定ですが、最初の起動だけはディスプレイに接続して動作を確認しました。
ここに書かれているように、http://homeassistant.local:8123に接続すれば、webページが開き、設定と操作が全てできるようになります。初めて使うHome Assistantでしたし、機能が豊富で複雑なので、色々試行錯誤しながら設定していきました。正直なところとても難しいです。
ESPHomeを使ってLチカする
まずは初心者向けに、LEDの点滅(Lチカ)でもやってみようと思いました。以前にコマンドラインから使ったESPHomeを、
ご本家のHome Assistantで使ってみます。前回と同様にGPIO 13番ピンにLEDを取り付けたESP32開発基板を用意しました。これをHome Assistantが動いているIntel NUCのUSBポートに接続します。「設定」「アドオン」から「アドオンストア」に行ってESPHomeの通常版を導入します(他にベータ版や開発版がありました)。すると、「設定」「アドオン」にESPHomeが現れるので、開きます。
ここで「WEB UIを開く」を押したら、ESP32にプログラムをダウンロードできるようになりました。USBに接続したESP32に名前をつけて、以下のようなyamlファイルを作りました。内容は前回の記事のyamlとほぼ同じですが、今回はHome Assistantからも使えるように、apiを有効にしてあります。MQTTの設定は残してありますので、MQTTメッセージも流れます。
apiのkeyは自動的に作成されました。WiFiやMQTTのIDとパスワードなどは動かす環境に合わせて設定します。
esphome: name: espled esp32: board: esp32dev framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ota: password: "xxxxxxxxxxxxxxxxxx" wifi: ssid: "xxxxxxxxx" password: "xxxxxxxx" # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "espled Fallback Hotspot" password: "xxxxxxxx" mqtt: broker: 192.168.xxx.xxx username: xxxxxxxx password: xxxxxxxx switch: - platform: gpio pin: 13 name: 'blue_led' captive_portal:
この後、「設定」「デバイスとサービス」のページで、完成したESP32を「ダッシュボードに追加」できます。その結果、「オーバービュー」のページに、このデバイスがスイッチとして現れました。操作するとESP32のLEDが点灯、消灯します。
前回の記事と同じですが、Homebridgeにはmqttthingプラグインが入れてあります。今回のyamlファイルに合わせて設定すると、Homebridgeのconfigファイルのmqttthingプラグインの部分は以下になりました。MQTTブローカーはHomebridgeと同じマシンで動いているので、こちらのIPアドレスはlocalhostになってます。topicsはyamlファイルに現れる名前をつなげたものです。topics名が不明な場合は、Home AssistantでESP32を操作しながら、topicsの上階層(例えばespled/#)をサブスクライブすれば、topics名を知ることができます。
{ "type": "lightbulb-OnOff", "name": "Blue LED", "url": "mqtt://localhost:1883", "username": "xxxxxxxx", "password": "xxxxxxxx", "topics": { "getOn": "espled/switch/blue_led/state", "setOn": "espled/switch/blue_led/command" }, "onValue": "ON", "offValue": "OFF", "accessory": "mqttthing" },
その結果、iPhone/Macのホームに、MQTT連動した電球アクセサリが現れました。これはESP32がパブリッシュするMQTTメッセージに連動して表示が変化します。また、電球アイコンをクリックすれば、HomeKit側からもESP32のLEDを点灯・消灯できます。
HomeKitと連動する
Home Assistantの初期設定の過程で、おそらくHomeKitプロトコルが動いていることが検知された結果だと思いますが、HomeKitブリッジとして機能させるかどうかを聞かれました。設定したところ、HASS Bridge:XXXXXという名前で、Home AssistantがHomeKitのブリッジとして動き始めました。「設定」「デバイスとサービス」を見ると、「統合」のタブの場所にブリッジが現れています。
この後、Home Assistantの「通知」に現れるQRコードを使って、iPhoneのホームからブリッジを追加しました。すると、Home Assistantで作ったデバイスが、HomeKitのアクセサリとして現れるようになりました。ここで作ったESP32も表示されました。この結果、同じESP32が、MQTTブローカー経由と、Home Assistant経由で、それぞれ表示されました。
左がMQTT経由、右がHome Assistant経由のESP32です。違う経路でHomeKitに接続されていますが、同じデバイスなので、どちらかをon/offすると、もう一つも連動してon/offします。
まとめ
Home Assistantを初めて使ってみました。半導体不足の影響でRaspberry Piが入手できないので、お蔵入りしていた小型デスクトップコンピュータにインストールしました。Raspberry Piじゃ無くてもこれで良いように思いました。
慣れていないこともありますが、Home AssistantはHomebridgeに比べて複雑で、使い方がいまだによくわかりません。HomeKitを使う前提ならば、Homebridgeをメインに使っていくのが簡単で良いと思います。一方で、Home Assistantの高機能を活かせる用途では、そちらで設定をして、ブリッジ機能を使ってHomeKitから使用するのも良いと思いました。例えば今回試したESPHomeを使えば、Home Assistantでの開発とテストが容易です。なので、MQTTでも動くように設定しておけば、HomeKitから直接使用できて便利かと思います。
コメント