一般的な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を指定します。
最後に書き込み先のドライブとして、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から直接使用できて便利かと思います。





コメント