Zigbee2MQTTとHome AssistantでZigbeeデバイスをローカル接続する:クラウド不要のセットアップ

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

プロプライエタリハブを捨てる理由

多くの人はPhilips Hue、Aqara、Tuyaといったベンダー製ハブからスマートホームを始める。最初は問題なく動く。しかし、特定のエコシステムに縛られ、自分では管理できないクラウドサーバーに常時接続することになる。インターネットが落ちたら?照明が反応しないかもしれない。メーカーがサポートを打ち切ったら?そのハブはただの置き物と化す。

私は数年前にユニバーサルなZigbeeコーディネーターとZigbee2MQTTに移行した。クラウド依存はゼロ。十数ブランドのデバイスをひとつのネットワークで管理できる。すべてのデータはローカルサーバーに留まる。Raspberry Piの再起動やネットワークの一時的な障害が起きても、110台以上のデバイスをひとつのコーディネーターで安定して運用し続けている。

クイックスタート(5分セットアップ)

必要なものはふたつ:MQTTブローカー(Mosquitto)とZigbee USBコーディネーター(Sonoff ZBDongle-P)。DockerとHome Assistantがすでに動いている前提で、最短で動作する環境を構築する手順を紹介する。

1. USBデバイスを確認する

ZigbeeドングルをUSBポートに挿し、以下のコマンドを実行する:

ls -l /dev/serial/by-id/

/dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_...のようなパスが表示される。そのパスをそのままコピーしておこう—次のステップで使用する。

2. Docker Compose の設定

以下の内容をdocker-compose.ymlに追記する。MosquittoとZigbee2MQTTをセットで起動する設定だ:

services:
  mqtt:
    image: eclipse-mosquitto:2
    container_name: mosquitto
    restart: unless-stopped
    ports:
      - "1883:1883"
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log

  zigbee2mqtt:
    container_name: zigbee2mqtt
    image: koenkk/zigbee2mqtt
    restart: unless-stopped
    volumes:
      - ./zigbee2mqtt-data:/app/data
      - /run/udev:/run/udev:ro
    ports:
      - 8080:8080
    devices:
      - /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_YOUR_ID_HERE:/dev/ttyACM0
    environment:
      - TZ=Europe/London
    depends_on:
      - mqtt

3. 基本設定

zigbee2mqtt-dataフォルダ内にconfiguration.yamlを作成する:

homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://mqtt'
serial:
  port: /dev/ttyACM0
frontend:
  port: 8080

docker-compose up -dを実行する。約10秒後にhttp://your-ip:8080でWeb UIにアクセスできるようになる。

アーキテクチャの仕組み

Zigbee2MQTTはブリッジに過ぎない。USBドングルから受け取った生のZigbee信号をMQTTメッセージに変換するだけだ。Home AssistantはMQTTインテグレーション経由でそのメッセージを受け取る。シンプルで疎結合、デバッグも簡単な構成だ。

Zigbee2MQTT vs ZHA

Home AssistantにはZHAという独自のZigbeeインテグレーションが内蔵されている。インストールは簡単だが、私はいつでもZigbee2MQTTを選ぶ。その理由はこうだ:

  • 疎結合:Home Assistantを再起動してもZigbeeネットワークは動き続ける。継続的な稼働が求められるオートメーションには重要な特性だ。
  • デバイスサポート:Zigbee2MQTTは新しいデバイス定義の追加が速い。ZHAは新しいハードウェアへの対応が数週間から数ヶ月遅れることが多い。
  • 診断機能:Zigbee2MQTTのフロントエンドには、各ホップのLQI(リンク品質指標)値を表示できる本格的なネットワークマップがある。ZHAのツールはそれに比べると機能が乏しい。

ハードウェアの選び方

コーディネーターはケチらないこと。Sonoff ZBDongle-Pを選ぼう—TI CC2652Pチップを搭載しており、50台以上のデバイスも余裕でさばける。ZBDongle-E(EFR32MG21チップ)という選択肢もそれなりに優秀だが、安定性においてコミュニティで現在最も支持されているのはPモデルだ。いずれにしても、デバイスのペアリングを始める前にコーディネーターのファームウェアを最新版にアップデートしておくこと。古いファームウェアは、デバイス数が増えたときに謎の切断が多発する原因ナンバーワンだ。

応用設定と最適化

基本が固まったら、いくつかの追加設定で趣味のセットアップを実用レベルに引き上げられる。

OTAアップデート

Zigbee2MQTTはデバイスへのファームウェアアップデートを無線で配信できる。IKEA TRÅDFRIの電球やSonoff SNZBセンサーは、後続のファームウェアで修正されているバグを抱えたまま出荷されることがある。Zigbee2MQTTのダッシュボードを開き、「OTA Updates」タブからアップデートを直接実行できる。メーカーのアプリも、クラウドアカウントも不要だ。先月は14個のIKEA電球を約40分で、すべてひとつの画面から更新した。

ダイレクトバインディング

ダイレクトバインディングを使うと、ZigbeeスイッチとZigbee電球がZigbee2MQTTやHome Assistantを完全にバイパスしてピアツーピアで通信できる。私は寝室の照明にこれを使っている。サーバーがメンテナンスでオフラインになっても、物理的な壁スイッチは即座に機能する。クラウドも、ハブも、問題もない。

レポート間隔の設定

電池駆動のセンサーはスケジュールに従ってデータを送信するが、その間隔は調整できる。デバイス設定でmin_rep_intervalmax_rep_intervalを設定しよう。温度変化が少ない部屋の温度センサーが30秒ごとにレポートする必要はない—間隔を5分に伸ばすだけで、実用上のトレードオフなしに電池寿命を2倍にできる。

現場で学んだ実践的なコツ

110台のZigbeeネットワークを3年間管理してきた中で、いくつかの教訓を痛い目を見て学んだ。これを無視すると、週末を謎の切断問題の調査に費やすことになる。

1. 必ずUSB延長ケーブルを使う

これは絶対条件だ。Raspberry PiやIntel NUCのUSB 3.0ポートは、1メートル以内でZigbee信号の信頼性を損なうほどの強い2.4GHz RF干渉を発する。1メートルのUSB 2.0延長ケーブルを用意して、ドングルを本体から離そう。ホームオートメーションフォーラムで報告されるランダムな切断の80%は、この一手で解決した。

2. 適切なZigbeeチャンネルを選ぶ

ZigbeeとWi-Fiは2.4GHz帯を共有している。Wi-FiルーターがチャンネルChannel 1、6、または11(標準的な非重複チャンネル)を使用している場合、複数のZigbeeチャンネルと重なってしまう。Zigbeeネットワークはチャンネル25に設定しよう。Zigbeeスペクトルの上端に位置し、ほとんどのWi-Fi干渉を回避できる。この設定は初期セットアップ時に一度だけ行うものだ—後から変更するにはすべてのデバイスを再ペアリングする必要がある。

3. 密なメッシュネットワークを構築する

メッシュのルーターとして機能するのは、常時電源が供給されるデバイスだけだ。電池センサーはエンドデバイスであり、送受信はするが中継はしない。4つのモーションセンサーがあっても常時電源デバイスがひとつもない遠い寝室は、コーディネーターの品質に関わらず接続の問題が生じる。私のルール:電池センサー5〜7台につき、常時電源デバイス(スマートプラグ、電球、または専用リピーター)を1台。10ユーロ程度のSonoff S26R2スマートプラグが優秀なリピーターになる。

4. LQIマップを週次で確認する

Zigbee2MQTTのネットワークマップにはノード間のLQI値が表示される。活用しよう:

  • LQI > 200:優秀。そのままで問題なし。
  • LQI 100〜200:安定。経過観察で十分、緊急性はない。
  • LQI < 50:パケットロスや応答の遅延が発生する可能性がある。

スコアが低いデバイスがあっても、まずセンサーを移動しようとしないこと。そのデバイスとコーディネーターの中間にルーターデバイスを追加しよう。十中八九、他に何も触れることなくそれだけで解決する。

まとめ

Zigbee2MQTTは、スマートホームをインターネット依存のおもちゃから、本当に自分のものとして所有できるインフラへと変える。セットアップはHueブリッジのインストールより時間がかかる—Dockerに慣れていなければ正直30〜60分はかかるだろう。しかしそれ以降は、インターネット障害、クラウドサービスの終了、Home Assistantの完全な再インストールがあっても動き続けるネットワークが手に入る。本気のHomeLabを運用するなら、これ以外の選択肢はない。

Share: