Home Assistantをもっと便利に!MQTTを活用した自作デバイスとの連携とオートメーション構築


こんにちは!
SJC共同開発推進室の鈴木です。
以前の記事Home Assistantの導入から基本的なセンサー連携までをご紹介しました。
今回は、自作のデバイスIoT機器MQTTを利用してHome Assistantと通信し、利用する仕組みをご紹介します。

目次

1. Home AssistantでのMQTTの活用メリット

MQTT(Message Queuing Telemetry Transport)は、IoT分野で広く使われている軽量な通信プロトコルです。Home AssistantMQTTを利用する最大のメリットは、ArduinoやRaspberry Piといったあらゆるマイコンで作成した自作IoT機器を、メーカーの垣根を超えて簡単に統合できる点にあります。

今回は例として、Jetson Orin Nano(以下、Jetson)を「パブリッシャー(送信側)」とし、Home Assistantを「サブスクライバー(受信側)」として利用する仕組みをご紹介いたします。
Home Assistant自体に重いAIライブラリ(TensorFlowやPyTorchなど)を直接インストールして推論させるのは、OSの安定性やリソース管理の面からあまり適していません。

そこで、推論はパワーのあるエッジ機(Jetson等)で行い、その結果(パラメータや判定フラグ)だけをMQTTHome Assistantに送るという役割分担をしております。

実際に利用してみて、Home AssistantエッジAIを利用する場合は、このように分けて対応するのが良いと感じております。

2. 今回の構成図

今回は、例としてJetsonを「パブリッシャー(送信側)」とし、Home Assistantを「サブスクライバー(受信側)」として構成します。

具体的には、Jetsonからの指示(MQTTメッセージ(例として、トピック:myhome/workroomにfan_onという値))をHome Assistantが受け取り、Home Assistantに登録されているSwitchBotのサーキュレーターを連動して動かす、という構成です。
※今回は、Home Assistant側の仕組みに焦点を当て、JetsonでのAI推論側の詳細は省略します。

3. MQTT Broker(Mosquitto)の立て方

MQTTを行うには、メッセージを中継する「Broker(ブローカー)」が必要です。
Home Assistantなら、Home Assistant内のアプリを使って数クリックで簡単に「Mosquitto broker」を構築できます。

サイドバーの「設定」=>「アプリ」を開き、右下の「アプリをインストール」を押下します

検索窓に「Mosquitto broker」と入力し、インストールします。

インストール後、「開始」ボタンを押下すればブローカーが立ち上がります。

4. Home Assistant独自の「MQTTセンサー」とは?(MQTT Discoveryの活用)

MQTTにはパブリッシャー(送信)、ブローカー(中継)、サブスクライバー(受信)といった概念がありますが、Home Assistantで登録する「MQTTセンサー」の位置づけの点も補足でご紹介いたします。

Home Assistantの「MQTTセンサー」とは、標準的なMQTTの仕組みをHome Assistantが理解できる「仮想デバイス(エンティティ)」に変換したものになります。
Home Assistant側で「このトピックに来たデータは、温度センサーの値として扱う」といった具合に定義してあげることで、ダッシュボードに表示したり、オートメーションの条件に使ったりできるようになります。

さらにHome AssistantにはMQTT Discoveryという機能があります。
通常はHome Assistant側の設定ファイル(yaml)などで手動で設定する必要がありますが、Jetson (パブリッシャー(送信))側から、Mosquittoに対して「TopicPayload」を最初に1回送るだけで、Home Assistant側が「新しいデバイスが来た」と自動的に認識し、ダッシュボードに反映してくれます。

つまり、JetsonHome Assistant上の「一つのセンサーデバイス」として簡単に登録できるということです。

5. オートメーションの活用(Jetson Orin NanoでSwitchBotを操作)

Home Assistantの醍醐味はオートメーションです。オートメーションは基本的に以下の3つの要素で構成されます。

  • トリガー(きっかけ): 何が起きたら実行するか(例:時間が来たら、センサーが反応したら)
  • 条件(任意): 実行するための前提条件(例:夜間だったら、家に人がいたら)
  • アクション(実行): 何をするか(例:電気をつける、スマホに通知する)

今回は、Jetson(MQTTセンサー)SwitchBotサーキュレーターオートメーションで連携させます。

  • トリガーJetsonからMQTT経由で fan_on というPayload(状態)Home AssistantMQTTセンサーに届く。
  • アクションHome Assistantが、連携済みのSwitchBotサーキュレーター電源を「オン」にする。

設定」=> 「オートメーションとシーン」=> 「オートメーションの作成」から作成できます。

同様に、Jetsonから 「fan_off」 という状態が届いた場合をトリガーにして、サーキュレーターを「オフ」にするオートメーションを作成します。これにより、Jetson側のAI画像認識などで特定の条件を満たしたときに、自動で家電を操作するといった制御が可能になります。

6. まとめ

今回は、Home AssistantでのMQTTの活用メリットと、JetsonなどのマイコンからMQTTを通してSwitchBotデバイスを制御する事例をご紹介しました。

MQTTブローカー(Mosquitto)Home Assistant内のアプリで簡単に構築でき、MQTT Discoveryを利用することで面倒な設定なしに自作デバイスをHome Assistant上の「センサー」として登録できます。そしてオートメーションを組み合わせることで、メーカーの異なるデバイス同士をシームレスに連携させることができますので、Switchbotなどのスマートホームデバイスをお持ちで、ご興味ある方は是非ご挑戦してみてください!

エコモットでは、ともに未来の常識を創る仲間を募集しています。
弊社に少しでも興味がある方はぜひ下記の採用ページをご覧ください!