Sympapaのスマートホーム日記

スマートなんとかはスマートじゃない方法でつくられている

Home Assistant: ZigBeeネットワークの安定化(1) ZHAからZigBee2MQTTへの移行を考える

Sympapaです。


人感センサー、ドア開閉センサーはホームオートメーションにおいて欠かせませんが、後付けで構築する場合にはセンサー類は無線であることと小さいことが必須となります。
我が家のHome Assistantのセンサー類はZigBee接続のものを使っていますが、ZigBeeWi-Fiより電池消費が少なくメッシュ構築によってBluetoothよりネットワークの範囲が広げられるというホームオートメーション向きのネットワーク規格のようです。
省電力だから電池が小さくて済むのでセンサー筐体のサイズも小さくなり、それでいてルーター(リピーター)またはその機能が内臓されたデバイスを配置すれば家中どこにでも電波が届くという素敵さ。
小さいセンサーを好きなところに貼り付けてホームオートメーションを構築できるというとても良い時代になりました。

今回は我が家のHome Assistantで使用しているZigBeeネットワークの安定化について書いていきたいと思います。

■なんだかZHAの調子が悪い

Home AssistantHome AssistantにはZigBeeネットワークを使用するためにインテグレーションとしてZHA(ZigBee Home Automation)が用意されています。アドオンとして用意されているZigBee2MQTTDeconzを使用することもできます。(他にもあるのかもしれませんが)
私はHome Assistantを使い始めた時にZHAでZigBeeネットワークを構築したのでZHAをメインで使用しています。
コーディネーターとしてファームウェアの書き換えが不要かつ電波の飛びが良いという噂だったHUSBZB-1を選び、HUSBZB-1がZHAにしか対応していなかったのがZHAを選んだ理由です。

その後、ZigBee2MQTTも追加してサブで試用してきました。
コーディネーターはSonoff Zigbee 3.0 USB Dongle Plusを使っています。
Sonoff Zigbee 3.0 USB Dongle Plusはやはりファームウェアの書き換えが不要なので選びましたが、電波の飛びがあまりよろしくありません。


そんなワケでZHAをメインで使用し続けていましたが、ZHAのデバイス数が増えるに従い、時々センサーのレポートを取りこぼしたり、ごく稀にセンサーがネットワークから切断され「利用不可」となり復帰しない問題が起きるようになりました。
大した頻度ではないのですが、家族も使う家の自動化であるため99.99999%の確実動作が求められるのです。

色々とググった結果と経験から「ZHAはネットワークにルーターが存在すると不安定になる」可能性が高いと考えました。
ZHAはセンサーなどのエンドデバイスがどのルーターに接続するかを自動で選びますが、距離やLQIに関係なく選んでいるように見え、遠くの電波の飛びもよろしくないルーターに接続したりします。
そしてルーターを指定してエンドデバイスを追加しても、適切とは思えないルーターが自動で選択されてしまいます。
f:id:sympapa:20220226092027p:plain

他にも、電球などに内臓されているルーターは通信をドロップしやすいといった情報もあったりしますが、その点の真相はわかりません。


ならばルーターを排除すれば良いのではないかと思うわけですが、電源が接続されている電球やスマートプラグなどのデバイスルーター機能を持っているものが多く無効化できません。
ルーター機能を持ったデバイスを全てサブのZigBee2MQTTへ移行したとしても、電池で駆動するエンドデバイスだけで40個近くあります。
コーディネーター: HUSBZB-1だけで接続できるデバイス数は定かではないのですが、調べると32個までだという情報が多くそれ以上のデバイスを接続するにはルーターの追加が必要になるそうです。

■メインをZigBee2MQTTへ移行してみることにした


では、ZigBee2MQTTに移行すればZHAのような問題はないのか?
少なくともZigBee2MQTTでは、センサーなどのエンドデバイスが接続するルーターの選択はZHAよりも適切に行われているように見えます。
まず、ZigBee2MQTTはエンドデバイスを追加する時に接続するルーターを指定しなければ基本的にコーディネーターに接続され、その後変更されないように見えます。
ルーターを指定してエンドデバイスを追加した場合は最初は指定したルーターへ接続され、その後、自動でそのエンドデバイスを他のルーターへの接続へ変更する場合はあるようですが、よりLQIの高いルーターを選んでいるように見えます。
なのでエンドデバイスを追加する時に接続するコーディネーター/ルーターを適切に指定してやれば、少なくともそれよりLQIが低くなる接続に自動的に変更されることはなさそうです。


そんなワケでメインのZigBeeネットワークをZHAからZigBee2MQTTへ移行するべく、ルーター機能を持った全てのデバイスとエンドデバイスの半分以上をZigBee2MQTTへ移し、ZHAにはルーターが無い状態として様子を見ることにしました。
多数のオートメーションが絡んでいるエンドデバイスをZHAからZigBee2MQTTへ移行するのは苦労するのでそういったものはZHAに残したままとし、トイレや廊下のまわりなど動作の異常に気づきやすい箇所のエンドデバイスを移行しました。


ZHAにはルーターが無い状態となりましたが、コーディネーター:HUSBZB-1の電波の飛びがすこぶる良いのでLQI的には問題ありません。というか、むしろ電球などのルーターの電波の飛びはHUSBZB-1より遥かに悪いのでルーターを排除した方が全てのエンドデバイスでLQIが高くなります。
一方のZigBee2MQTTは、コーディネーター: Sonoff Zigbee 3.0 USB Dongle Plusの電波の飛びはよろしくなく、電球などのルーターの電波の飛びもよろしくないので家中に合計9個のルーターを配置(ってかほとんどは電球などですが)してカバーすることにしました。
f:id:sympapa:20220227094748p:plain

■まとめ

というわけで今回は、メインのZigBeeネットワークをZHAからZigBee2MQTTへ移行したら安定するのか試してみるというお話でした。
数週間様子を見て、また結果を書きたいと思います。
一応、ZigBeeネットワークの安定化とトラブル時に速攻で復旧できる体制構築が完了したら、Home Assistant導入によりどっぷりハマった私の中の「第2次スマートホームブーム」は終了となる予定です(笑)
「第2次スマートホームブーム」のゴールについてはまたその内書きたいと思います。
ってかスマートホーム関連しか書いてないこのブログはどうすんだろね?(笑)

それでは。