Home AssistantはZigbee2MQTTとCoreをどのように連携させるのか?

エヴァ・ウォンテクニカルライター であり ZimaSpaceの常駐ティンカーでもあります。 生涯のオタクであり、 ホームラボとオープンソースソフトウェアに情熱を持っています。彼女は複雑な技術的概念をわかりやすく、 実践的なガイドに翻訳することを専門としています。エヴァはセルフホスティングは楽しくあるべきで、怖がるものではないと信じています。彼女のチュートリアルを通じて、コミュニティが ハードウェアのセットアップを解明する手助けをしています。初めてのNAS構築からDockerコンテナの習得まで。

Home Assistantは、Zigbee2MQTTをHome Assistant Coreの一部として扱うのではなく、MQTTを介して連携します。Zigbee2MQTTはZigbeeコーディネーターとメッシュ通信を管理し、MQTTブローカーがメッセージを伝送します。そしてHome AssistantのMQTT統合が、ディスカバリーと状態のトピックを自動化で利用できるエンティティに変換します。

この分離は、Zigbeeの通信、メッセージブローカー、ホームオートメーションのロジックをそれぞれ独立して再起動または移動できるため強力です。一方で、3つのサービスからなる依存関係も生まれます。Zigbeeデバイスが正常でも、Zigbee2MQTT、ブローカー、ディスカバリー、または可用性メッセージに問題があると、Home Assistantでは利用不可と表示されることがあります。

Zigbee2MQTTが無線側のデバイス通信を管理する

Zigbee2MQTTはコーディネーターと通信し、Zigbeeデバイスの定義を管理し、メッシュからレポートを受信してMQTTメッセージに変換します。Zigbee2MQTTがコーディネーターを管理している場合、Home Assistantがコーディネーターに直接アクセスする必要はありません。

Zigbee2MQTTのHome Assistant統合ガイドでは、MQTTディスカバリーが、Zigbee2MQTTのデバイスとエンティティをHome Assistantに自動作成する標準的な方法であると説明されています。

この管理境界は、復旧時に重要です。Home Assistantを再起動してもZigbeeメッシュの再ペアリングは必要なく、Zigbee2MQTTを再起動しても、安定したエンティティIDを参照するHome Assistantの自動化が消えることはありません。

MQTTブローカーは2つのサービス間のメッセージ境界

Zigbee2MQTTはデバイスの状態とブリッジ情報をMQTTトピックに公開します。Home Assistantは関連するトピックを購読し、自動化またはユーザーによってデバイスが変更されたときにコマンドを返します。

MQTTブローカーがメッセージ境界となるのは、Zigbee2MQTTがトピックにメッセージを公開し、Home Assistantが必要なトピックを購読して、同じブローカーを通じてコマンドを返すためです。現在のMQTTアーキテクチャガイドでは、ブローカーがトピックベースのメッセージを仲介する一方で、パブリッシャーとサブスクライバーが疎結合を保つ仕組みについて説明しています。

ブローカーに障害が発生しても、Zigbeeメッシュ自体は存在し続け、Home Assistantの表示だけが更新されなくなることがあります。コーディネーターやCoreとは切り分けて、ブローカーを個別に診断してください。

ディスカバリーがエンティティを定義し、状態トピックが最新状態を保つ

ディスカバリーメッセージは、どのエンティティを作成するか、状態とコマンドに使用するトピック、所属するデバイス、値の解釈方法をHome Assistantに伝えます。エンティティが作成された後は、通常の状態メッセージによって最新状態が維持されます。

再読み込みや再起動によって、ここでの設定ミスが明らかになることがあります。Home Assistantコミュニティの事例では、期待される再ディスカバリーや保持状態の経路が正しく再構築されないと、MQTTでディスカバリーされたエンティティが利用不可のままになる場合が報告されています。

安定した一意のIDと、計画的な再ディスカバリー戦略を使用してください。ブリッジを変更するたびに新しいIDでエンティティを作り直すと、物理的なZigbeeデバイスが変わっていなくても、ダッシュボード、履歴の継続性、自動化が壊れてしまいます。

可用性はデバイス状態とは別のシグナル

ONのような状態は、Home Assistantに最後に報告された値を伝えるだけであり、Zigbee2MQTTまたはデバイスが現在到達可能であることを証明するものではありません。可用性トピックは、別個の稼働状態に関する契約を提供します。

Zigbee2MQTTの可用性判定では、常時電源デバイスとバッテリーデバイスが異なる方法で扱われます。後者のような受動的なデバイスは、要求に応じてPingできないためです。現在のドキュメントでは、アクティブなデバイスには短いチェックイン間隔とPing/バックオフロジックを使用し、パッシブなデバイスにははるかに長いチェックイン間隔を使用すると規定されています。したがって、可用性は最後に保持された状態とは別に解釈する必要があります。

可用性を考慮せず、古い状態だけを根拠に安全性が重要なアクションを実行しないでください。保持された値は状態の再構築には役立ちますが、現在オフラインのデバイスを表している可能性があります。

起動順序は偶然に頼らず、連携の契約を再構築するべき

適切な起動シーケンスは、単に「まずブローカー、次にZigbee2MQTT、その後にHome Assistant」というものではありません。サービスは異なる順序で起動する可能性があるため、メッセージングの契約は再接続に耐えられる必要があります。Zigbee2MQTTはブローカーに再接続し、ディスカバリーが利用可能になり、Home Assistantが購読を開始し、設計どおりに現在の状態が再公開または保持されるべきです。

ZimaSpaceのスマートホームイベントの例では、MQTTによって、スマートホームサービスが同じプロセスや同じ物理サーバーを共有せずにローカルイベントを交換できる仕組みを紹介しています。Zigbee2MQTTは、この分離の具体例です。

レイヤー 主な役割 障害の症状
Zigbee2MQTT Zigbeeメッシュとデバイス情報の変換 新しいZigbeeメッセージが届かない
MQTTブローカー サービス間のメッセージ配信 パブリッシュ/サブスクライブ経路が機能しない
Home Assistant MQTT エンティティのディスカバリーと状態のマッピング エンティティが表示されない、または利用不可になる
自動化/Core ルールとサービス呼び出し エンティティは正常だが、アクションロジックが失敗する

よくある質問

Zigbee2MQTTがZigbeeネットワークを維持するために、Home Assistantは必要ですか?

いいえ。コーディネーター側のZigbeeネットワークはZigbee2MQTTが管理します。Home AssistantはMQTTを通じてデータを受け取り、コマンドを送信する側です。Zigbee2MQTTサービスとブローカーが稼働し続けていれば、Home Assistantがオフラインでも問題ありません。

ブローカーまたはHome Assistantを再起動すると、なぜZigbee2MQTTのエンティティが利用不可になるのですか?

通常は、ディスカバリー、保持状態、可用性、または再接続メッセージによって、MQTT連携の契約全体がまだ再構築されていないことが原因です。デバイスを再ペアリングする前に、Zigbee2MQTTのブリッジ状態、ブローカーへの接続、ディスカバリートピック、エンティティの可用性を確認してください。

テック&AIハブ

もっと読む

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.