コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Home AssistantでDIY Smart Home】zigbee2mqttアダプタを刷新

【Home Assistant(Hass.io)】
SONOFF Zigbee 3.0 USB Dongle Plusに切り替える

「Home Assistant(Hass.io)でホームオートメーション 再起動!」シリーズです。

 zigbeeバイスで家の隅々の戸締り、人の移動、電灯の点け消し、降雨関係などの状況の把握に努めております。が、特に外のデバイスや明るさセンサーあたりが時々脱落する傾向を見せております。今使っているCC2531ベースのデバイスは、電波が弱いので既に「Not Recommended(非推奨)」と言われており、このあたりが原因かと。
 ということで、少しは接続が強く、まあお安いコーディネーター/ルーターであるSONOFF Zigbee 3.0 Dongle Plusに置き換えてみたいと思います。

sonoff.tech

 曰く「Can use ZHA in Home Assistant or Zigbee2MQTT(HomeAssistatのZHAやZigbee2MQTTで使えます)」だそうです。すばらしい。

この記事の前提条件
Home Assistant core 2022.3.5
Home Assistant OS 7.5
Server Raspberry Pi 4(2GB)

 上記バージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)

1. 準備

f:id:maky_Ba:20220314012345j:plain:w200:left SONOFF Zigbee 3.0 USB Dongle Plus
CC2531はもはや推奨ではないので、お薦めのCC2652Pベースのドングルです。電波の飛びはピカイチとまではいきませんが、金属ケース付きでいいかんじです。
そもそも綺麗な箱に入っていて「製品」という感じがします。いままでのCC2531は静電袋に入ったジャンク屋で見つけたパーツみたいでしたから雲泥の差です。
価格:Aliexpressで1500~1800円ぐらい。(10 US$ちょっとぐらいと言っているので、いまの円の実勢は160, 170円/$ぐらいなのか…)

2. アダプタ準備

 CC2351からCC2652への変更ではいろいろ頑張ると再ペアリングしなくても大丈夫、とか言っていますが、折角なので綺麗にペアリングしてゆきたいと思います。

2.1. コーディネーター準備

 前述のとおり、実はSONOFFのこのアダプタは、最初からZigbee2MQTTで使えます。「Pre-flashed with Z-Stack 3.x.0 coordinator firmware」という事で、Zigbee2MQTTのコーディネーター(Coordinator)として使えるようになっています。が、いつの版のコーディネーターが入っているかは接続してみないとわかりません。面倒なので最新のコーディネーターに入れ替えてしまいましょう。

 Zigbee2MQTTのコーディネーターファームウェアの入れ替え方法などは、下記のサイトが参考になります。
notenoughtech.com

(ちなみに、上記記事では「デバイスにうまくペアリングできない!」とか言っていますが、同じ人が「最新のファームウェアに入れかえたら出来ました」と言っています。SONOFFのこのアダプタは、互換性や性能面でベストではないが、価格を考えると魅力的選択肢、とのこと。)
notenoughtech.com

手順は下記のとおり。

  1. USBドライバ導入
    このSONOFFのドングルで使っているUSB2.0のデバイスはCH341SERのようです。いろんな安いデバイスで活躍している石みたいですね。ここからデバイスドライバをダウンロードしてインストールしておきます。
  2. SONOFF USBドングルを分解
    ネジを2本外すとケースから本体を取り出すことができます。
    f:id:maky_Ba:20220321112327j:plain:w200
  3. SONOFF USBドングルを挿入
    ブートボタン(USBコネクタに近い方のボタンスイッチ)押しながらPCに差し込む。
    f:id:maky_Ba:20220321112410j:plain:w200
  4. SmartRF Flash programmer」から「FLASH-PROGRAMMER-2」( CC2531の時は「2 / V2じゃないほう」と言いましたが今回は、2の方)をダウンロードしてインストールします。TI(Texus Instruments)のアカウントであるmyTIアカウントを作ることを求められますが、以前つくっているのでそれでログイン。
  5. Z-stack 3.x.0 Coordinator Firmwareリンク先のフォルダの中のCC1352P2_CC2652P_launchpad_coordinator_20211217.zipをダウンロードして解凍しておきます。
  6. Flash Programmer2を起動。左側のdevice欄にいろいろ出てきたら、silicon lab(先ほど導入したUSBドライバ)を選択してその下のドロップダウンリストで「CC2652P」を選択。次にFlash Imageに先ほど展開したファイルを指定。Action欄は、「Erase」「Program」「Verify」にチェックを入れる。最後に再生ボタンを押すと書き込みが始まります。OKとなったら良し。
    f:id:maky_Ba:20220321115957j:plain:w300
  7. Zigbee USBアダプターの接続状況の確認
    ファームウェアを入れ替えたUSBアダプタを稼働中の(Home Assistantを実行中の)Raspberry Pi 4BにUSB延長ケーブル越しに接続します。
     次にZigbee2mqttアドオンの設定に記述するためにUSBがどこに刺さっているかを調べます。左側のサイドバーで「設定」画面を開き「アドオン、バックアップ、Supervisor」を選択して「システム」タブを開きます。Hostパネルの右下の3つ点でHardwareを選びます。
    ざっとみてゆくと今回は/dev/ttyUSB0にSonoffのZigbee USBアダプターが刺さっているということがわかります。

2.2. USBアダプター(ルーター)用ファームウェアの導入

 ルーターファームウェアの書き込む手順は上記のコーディネイター(Coordinator)と同じです。 違いはファームウェアです。下記のサイトからCC1352P2_CC2652P_launchpad_router_20210128.zipをダウンロードし展開して、CC1352P2_CC2652P_launchpad_router_20210128.hexをUSBアダプタに書き込みます。 github.com

3. Zigbee2mqttアドオン設定変更

 Zigbee2mqttアドオンを一旦停止して、設定タブのserial:を下記の様に記述してアドオンを再起動します。

(前略)
serial:
  port: /dev/ttyUSB0   ←ここを書き換える
(以下略)

4. デバイス再接続

 zigbee2mqttを接続モードにして、ルーターの電源を入れる(USB電源に刺し込む)とルーターは多分自動的にペアリングされると思います。そのほかのデバイスは再度ペアリングが必要なので、下記記事の「3. デバイスの接続手順」に従って、チミチミと設定してください。

maky-ba.hatenablog.com

5. ビフォーアフター

Z-Stack coordinator firmwaresの記載によれば、下記のような状況らしい。CC2531デバイスの時は、ルーターの配下の最大デバイス数も20ぐらいだったのでどんどんルーターを増やす必要があった(結局、余裕を見て4ルーターで運用してました)が、どうやら今回のものは結構接続できそう。

Z-stack ver. バイス コーディネーター
直下
ルーター当たりの
バイス最大数
Z-Stack_Home_1.2
(source_routing)
1.2HA CC2531 5 21 ?
Z-Stack_3.x.0 3.0 今回のもの
CC2652P
50
全体で200?

ネットワーク図と接続状況の対比を下記に纏めておきます。
LQI(Link Quality Index)がどの程度の参考になるかはわかりませんが、20前後だったのが、100越えの数値に改善しました。

CC2531
コーディネーター
Sonoff zigbee 3.0 USB Dongle Plus
ネットワーク図
f:id:maky_Ba:20220321155929j:plain:w230
 ⇒ 
f:id:maky_Ba:20220321155946j:plain:w230
接続状況
f:id:maky_Ba:20220321170429j:plain:w230
 ⇒ 
f:id:maky_Ba:20220321170452j:plain:w230

6. おわりに

 依然、脱落するデバイスが無いわけではありません。どうやらしばらく反応が無いときに脱落状態になったりします。ただ以前はそうなると完全に復旧は見込めないのですが、今は、再度反応があったときに再接続される可能性が高くなりした。

maky-ba.hatenablog.com