そういえば記事にしてなかった気がしますが、最近Home Assistantを導入しています。これは各種IoTホームデバイスを一元管理できるオープンソースのWebプラットフォームです(スマホアプリもある)。例えば、我が家にはSwitchBot、Sesame、NatureRemoなどのスマート家電制御アイテムが混在しており、他にも3Dプリンターやセキュリティカメラ、家電などIoTデバイスが無数にあります。通常はそれぞれに用意された専用アプリを使って操作したり状況を読み取ったりするわけですが、Home Assistantを使えばそれを一元管理し、統合ダッシュボード上で操作・監視できるというわけです。同様のシステムのHome Bridgeがありましたが、それの令和版といったところでしょうか。
我が家ではあまり活用できてなかったMac miniサーバーのDockerコンテナ版を動かしています。専用サーバー製品Home Assistant Greenのようなワンボードマイコンを使った専用デバイスもあります。
■今回のミッション
今回のミッションは3Dプリンターやレーザー加工機、フィラメントドライヤーなどがひしめく一角の電力消費を正確に把握したい。可能ならばヤバい時にアラートを出したい、というものです。我が家は慢性的なコンセント不足で、タコ足配線が常態化しています。これらの機器も別々のコンセントから取れるといいのですが他にもPCやらサーバーやらNASやらなんやらで全く余裕がなく単一のコンセントに、X1-Carbon、AMS、AMS HT、SANLU AMS Heater、XTOOL F2、レーザープリンター、テスコムコンベクションオーブンなどがぶらさがっています。これら全てを同時に使うことは希ですが、うっかり1,500Wを超えてしまうとよろしくないので、肌感覚としてどれくらいに消費電力なのかを監視したり、あわよくば1,500Wに近づいたらアラートを出すみたいなこと実現したいと考えました。
SwithBotスマートプラグをHAに統合してみたが…
今回使用したのはこれ。おそらく日本でいちばん普及しているスマートプラグです。
SwitchBotデバイスはほとんどHAにも対応しているので、登録自体はすんなり完了。オンオフ制御はもちろん、消費電力や電圧、電流量もきちんと読み取りできます。しかし、この数値の更新がリアルタイムではなかった…
どうもこれはSwitchBotクラウドを経由した同期だから更新間隔が5分とか結構空いてしまうと判明。これだけでもおおよその勘をを鍛えるには良いですがアラートのソースとして使うには少し不安。あと、SwitchBotアプリで消費電力を確認するには、ダッシュボードで当該デバイスを選択タップするんですが、その右上に電源ボタンがあるのが恐すぎ問題w

造形中の消費電力をチェックしようとしてうっかり電源を落としてしまう、なんて笑えません。
どうもHAのSwitchBotコネクターにBluetooth経由のアダプターが存在することに気付きました。Geminiさんによるとこっちならばクラウド(WAN)を経由しないのでほぼリアルタイムで数値の更新が望めるとのこと。
macOS + Docker環境ではBluetoothデバイスを認識できない…
しかし実際にSwitchBot Bluetoothコネクターでセッテイングをしようとしてもデバイスが発見できない。どうもmacOSホストのDockerだとMac内蔵のBleutoothデバイスを仮想化してDockerコンテナから使用することができないとか。そういえばSesameなどのMatterデバイスの登録も成功してないのはこれか…
回避策としては、
- USB BluetoothアダプターをつないでDockerにバイパスする
- ESP32デバイスでBluetooth->Wi-Fiプロキシを建てる
- 他社のローカル通信でリアルタイム更新ができるスマートプラグに買い換える
などが挙がりました。その中で興味がわいたのは2です。ESP32はWi-Fi/Bluetoothも使えるワンボードマイコンです。ラズパイをもっと簡素化したようなものと捉えてもらえば良いでしょう。これを使って、こいつがやりとりしたBluetooth信号をWi-Fiに載せてHAサーバーに中継できる模様。しかも単一のHAサーバーに手足のように複数のデバイスを統合できるので、他階のBluetooth電波が届かない場所にあるスマートデバイスもHAに直接参加させられる可能性があります(例えば玄関のSesameなど)。
とりあえずこれを1セット用意して実験してみることに。ESP32互換ボードはたくさんありますが、とりあえずシェル(ケース)がついていてUSB-C給電仕様で、きちんと国内企業が技適を通しているもの、ということで、こちらのM5Stack ATOM Liteをチョイス。
想像より小さくてテンション上がります。SDカードよりちょっと小さいフットプリント。天面と左側面にボタン。

背面は4ピンと5ピンのピンヘッダー、USB端子と同じ面にも4ピンのカプラー、色々な制御に使えそうです。

今回は全く使わないんですが、ラズパイが高くなってしまった今、どんな遊び方ができるのかまた探っていきたいです。
■セットアップ
接続しようとしているMacにUSBケーブルでM5stackを接続(通電してランプが点灯します)。
ESPHome公式のこの自動セットアップページを開きます(ChromeかEdge必須。Safariは非対応)。「I want to create a:」というラジオボタンで「Bluetooth proxy」を選択。下にセットアップする機材の選択肢がでるので、「Generic ESP32」を選択して「Connect」
このようなダイアログが出るので、M5stackを選択。

「Install esphome.bluetooth-proxy」を選択

確認ダイアログで「Install」を選択

そのままファームウェアを書き込んでくれます。すご!

インストールが終わるとWi-Fi設定に進む。「Network」に近所に飛んでるSSIDがリストされるので自宅のものを選択肢、パスワードを入力して「Connect」

自宅Wi-Fiにつながると成功メッセージとともに「Add to Home Assistant」の項目が出現するので選択

おまえんとこのHAのURLを入れろ、と言われるので入力してSave

HAダッシュボードの統合画面が開き、「ESPHomeを設定しますか?」と聞かれるのでOK

しかしここでハマる。IPアドレスとポート番号を入力するダイアログが出るも一瞬で消えてしまう。何度やっても同じ。手動でESPHomeの追加をすると、こうなるけど、前の画面に戻っても降られたIPアドレスが不明。

ログ画面でIPアドレスを調べて手入力。あとで変わっても困るので、ルーター側でそのIPアドレスをM5Stackに固定で割り振る様にしておきました。
これで接続成功こんな感じで発見でしたSwitchbotのBluetooth電波がずらっと出ます。

宅内にスマートプラグ(Plug Mini(JP)は複数ありますが、続く()内の4桁英数字がMACアドレス末尾4桁なので、SwitchBotアプリで目的のプラグのMACアドレス(Wi-FiもBluetoothも下四桁は同じ)で照合。
これで無事クラウド経由とは別のBluetoothデバイスとして追加されたので、ダッシュボードのグラフのソースを切り替え。
Bluetooth経由であれば1fpsかそれ以上の更新頻度で数値が切り替わっていきます。下の動画はレーザープリンターでラベル用紙1枚印刷した瞬間のものです。
なんでもかんでもBluetooth経由にしてリアルタイム通信する必要はないので、当面はこのクラフト機器のプラグだけ登録しましたが、これは楽しいですね。
ミッションコンプリート!


