Sympapaのスマートホーム日記

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

Home Assistant: ZigBeeネットワークの安定化(2) ZHAよりZigBee2MQTT

Sympapaです。
ホームオートメーションにおいて安定性と即応性と誰もが違和感を感じない挙動はとても重要だと思います。
自分しか使わないものであれば癖を掴んでおけばこっちが合わせたりして対処したりもできますが、家は家族みんなが使うものなのでそうはいきません。


Home Assistantを稼働開始してからセンサー類を繋ぐZigBeeネットワークとしてHome Assistantの純正インテグレーションであるZHA(ZigBee Home Automation)を使ってきましたが、センサーなどのデバイスが増えるにつれ稀にセンサーのレポートを取りこぼしオートメーションが発動しないことがありました。それと、稀にデバイスを見失い、再登録しないといけないこともありました。
ググると「ZHAは電球などのルーター(リピーター)機能を持ったデバイスがネットワーク内にあると調子が悪くなる」という情報というか訴えをみかけたので、ルーター機能を持った電球やスマートプラグといったデバイス全てをHome AssistantのアドオンであるZigBee2MQTTへ移行してやったのが約1ヶ月前。


しかしZHAがセンサーのレポートを稀に取りこぼす現象は改善しなかったので、更にセンサー類も大半をZigBee2MQTTへ移行して様子を見ていました
コーディネーターを除いて47個ある我が家のZigBeeバイスの内、現在は32個がZigBee2MQTTで接続しています。
しかし移行するとなると新しいデバイスとして認識されることになるので、オートメーションを修正しなくてはならず面倒なんですよね。
オートメーションが複雑化していて移行が面倒な玄関周りのセンサー類と、ボタン数と長押し・ダブルクリックなどパターンの多くて同じく移行が面倒なリモートスイッチ類はZHAに残し、それ以外は全てZigBee2MQTTへ移行してやりました。
結果として3週間ほど経ってもZigBee2MQTTがセンサーのレポートを取りこぼす現象は見かけていませんし、デバイスを見失って復活しない現象も発生していません。それだけでなく何故かZHAの方も安定して稼働するようになりました。


■ZHAが取りこぼすのはAqaraの人感センサーのみ?

ZHAで稀に動作しなかったのはトイレと階段の自動照明オンでした。でも何故か廊下と玄関周りの照明の自動化はずっと安定していたんですよね。
トイレと階段にはAqaraの人感センサーを使っています。一方、廊下と玄関ではHueとSonoffの人感センサーを使っています。
よくよく考えてみるとZHAが取りこぼしていたのはAqaraの人感センサーのみで、それ以外は取りこぼしていなかったように思います。
ググってみるとXiaomi系(Aqaraもそう)のセンサーはZigBee規格に厳密に準拠していないのでHome Assistantで使うには癖があるという噂が出てきます。しかし、Xiaomi系でもAqaraのドア開閉センサーとXiaomiの照度センサーでは特に問題を感じたことが無く真相はわかりません。
しかし、Aqaraの人感センサーがネットワークに存在しない現在のZHAは確かにド安定です。
一方、Aqaraの人感センサーがネットワークに存在するZigBee2MQTTはそれはそれでド安定で稼働しています。
じゃあAqaraの人感センサーの使用を止めれば良いかと言うと、Aqaraの人感センサーは改造すれば更新間隔を5秒に出来るのと照度センサーも内臓しているので使い勝手がとても良く、我が家の人感センサーの8割がコレなので使わないわけにはいきません。
そんなワケでメインのZigBeeネットワークをZigBee2MQTTへ完全移行することに決めました。

■ZigBee2MQTTはZHAよりルーターの使い方がおりこうさん?

ZHAにはもうひとつ気になっていた点があって、ネットワーク内にルーターバイスがある場合に、センサーなどのエンドデバイスルーターとの距離やLQI(リンク品質)に関係なく接続するんです。わざわざ遠くのLQIの低いルーターに接続したり、設置してある位置に関係なく、ルーター(とコーディネーター)が複数あると全てに対してエンドデバイスの数をほぼ均等に割り当てているように見えます。
そしてエンドデバイスルーターが一旦接続したら、LQIが低くてもその組み合わせに固執する傾向があります。
ルーターバイスをひとつネットワークから外すと、そのルーターにぶら下がっていたエンドデバイスが他のルーターへ自動的に接続してくれない問題も結構発生していました。
f:id:sympapa:20220226092027p:plain

それに対しZigBee2MQTTはLQIが比較的高くなるよう適切にネットワークが形成され、あるルーターバイスがネットワークに存在しなくなってもそのルーターに接続されていたエンドデバイスは割とスムーズに他のルーターへ接続されるようです。
f:id:sympapa:20220227094748p:plain

■ZigBee2MQTT VS ZHA

そんなワケですが、ZHAは使うのがラクというメリットがあります。
Home Assistant純正インテグレーションなので導入も簡単ですし、デバイスの追加や削除、名前の変更なども全てHome Assistantの中で完結するので解りやすいです。
ZigBee2MQTTの場合はMQTTの設定も必要になるので導入が少し面倒で、デバイスの追加や削除、名前の変更などもZigBee2MQTTのUIを開いて実行しなくてはいけません。

一方、ZigBee2MQTTは細かいところまで設定できるのが良きです。
例えばHueの人感センサーではHue純正アプリと同様にセンサー感度が設定できたりします。
f:id:sympapa:20220321081204p:plain

Hueのデバイスの場合OTAによるファームアップまで出来ます。
f:id:sympapa:20220321081510p:plain


あと、人感センサーのタイムアウト時間も設定できます。
通常はそんなもん設定しなくてもデフォルトで使えばいいんですが、私的にはAqaraの人感センサーを改造し更新間隔5秒にして使うケースが多く、しかしデフォルトのタイムアウトは60秒になっているので、人感が無くなった時にリアルタイムにHome Assistant上のステータスを「人感無し」にするにはタイムアウトを短い時間に設定しなくてはいけません。
ZHAではサービス”Zigbee Home Automation: Set zigbee cluster attribute"を使って人感が検出されたらx秒後にリセットするというオートメーションを組んでいましたが、ZigBee2MQTTではUI上でタイムアウトする時間を設定可能です。
f:id:sympapa:20220321082510p:plain


初心者に優しいZHA、玄人志向のZigBee2MQTTって感じですが、とはいえHome Assistantを使おうなんて人にとってはZigBee2MQTTを使うのもちょっと手間がかかるってくらいのことなので、これからHome Assistantの導入を考えている方は最初からZigBee2MQTTを導入することをおススメします。

■ZigBee2MQTTで使うコーディネーターとルーター

現在、ZigBee2MQTTのコーディネーターはSonoff Zigbee 3.0 USB Dongle Plusを使っています。
ZHAやZigBee2MQTTのコーディネーターとして使用する分にはファームウェアの書き換えが不要なのと、1500円~2000円と比較的安価に買えるのでこれを選びました。更に、ファームウェアを書き換えたくなった時も特殊なケーブルが不要でUSB経由で可能という初心者に優しい仕様です。
ただ、電波の飛びはあまりよろしくないので広くない家でもルーターバイスは必要になると思います。
Sonoff Zigbee 3.0 USB Dongle Plusを複数購入しルーター用ファームウェアへ書き換えてルーターとして使うテもありますが、我が家では5個あるHueの電球の方が電波の飛びが良くルーターとして活躍してくれています。

■まとめ

というわけで今回は、メインのZigBeeネットワークをZHAからZigBee2MQTTへ移行したら凄く調子が良くなったし多機能だしこりゃいいわというお話でした。
ZigBeeネットワークの安定化も完了したし、Home Assistantでやりたいことは大体完了した感じです。他にやるとしたら防犯カメラくらいかな。
あと、Home Assistantがぶっ壊れた時に即復旧できる体制構築はしておきたいですね。


最近、家を買う検討をしているのですが、最初は「建売か中古でいいよ」と思っていたのにだんだん欲が出て「やっぱ注文住宅かな」となっていたりします。自動で洗浄してお湯張りしてくれるお風呂とか欲しくなりますね~どんどん予算オーバーになっていく(笑)
今後はそのこととスマートホーム関連を絡めたことを中心に書こうと思います。
あ、今までにやったことのネタもまだまだ残っているので書きますけど(笑)


それでは。