Zigbee2MQTT on RPi

部屋の間取りを変えたので、照明も入れ替え。
RPiから自動で点灯・消灯したり、スマホのNodeRED UIから操作したい。

というころで、安定&安価なZigbee対応のIKEA製品(TRADFRI)を、Zigbee2MQTTで管理する。

MQTT について、過去記事

ゆるい空き室モニタをつくる2(RPi MQTT Broker編)

ゆるい空き室モニタをつくる2(RPi MQTT Broker編)

2022.03.13

対象商品

色調整ができるのと、できないの両方。

リモコン1

リモコン2

電球1

電球2

Zigbee

Aliexpress で、2700円くらい。
これをRPi3 に差して、使う。

仕組み

Claude に書いてもらったモジュール図。

Zigbee2MQTTは、MQTTの一種で、ハードウェアをサポートするため、UIも独自にカスタマイズされている。

以下は、device一覧画面

http://Zigbee2MQTTのIP:8080/

これらは、Groupで一括処理などもできるが、電球はダクトレールで別々の方向に向ける予定なので、Node-REDで個別に制御することにする。

setup

RPi3 にWIfiのsetup。
Sonoff Zigbee 3.0 USB を差すと、/dev/ttyUSB0 として認識する。

おもむろに、nodejs と Zigbee2MQTTをinstall。

# Node.js 18以降をインストール
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# Zigbee2MQTTをインストール
sudo mkdir /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
git clone https://github.com/Koenkk/zigbee2mqtt.git .
npm start

/opt/zigbee2mqtt/data/configuration.yaml

version: 4
homeassistant:
  enabled: false
frontend:
  enabled: true
  port: 8080
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://$(MQTT BrokerのIP)
  }
serial:
  port: /dev/ttyUSB0
  adapter: ember
  baudrate: 115200
advanced:
  channel: 11
  network_key:
    - 228
    - 105
    - 213
    - 231
    - 42
    - 70
    - 144
    - 135
    - 27
    - 245
    - 61
    - 11
    - 183
    - 60
    - 187
    - 173
  pan_id: 45685
  ext_pan_id:
    - 135
    - 96
    - 167
    - 175
    - 170
    - 68
    - 16
    - 163
  log_level: error
  permit_join: true
devices: []

devices は、このあとZigbee 機器とペアリングしていくことで、増える。

ペアリング

Zigbee 端末はだいたい一緒らしい。

リモコン

ペアリングボタンがあるので、 タス、タス、タス、タス、タス と5回ほど押す。

LEDが点滅するとペアリングモード。

電球

主電源(部屋の照明スイッチとか)で、 パチ、パチ、... と、5回くらい点灯、消灯を繰り返す。

最後は点灯したまま数秒以上放置すると、勝手に点滅し、ペアリングモード。

うまくいかないこともあるので、根性でがんばる。

Zigbee2MQTT

WEB画面上部にある、 Permit join(All) ボタンを押すと、ペアリングモード。
だいたい、5分くらいはそのまま維持される。

ドキュメントなどには、Sonoff Zigbee 3.0 USB と対象の電球などを数十センチの距離にしたほうがいいとあるが、面倒だったので3mくらいの距離だったけど、問題なく成功。

Friendly name の変更

ペアリングした直後、Friendly nameは16進のhashみたいな値になっている。

これを自分で管理しやすい remote_3 のような名前に変えておく。

あとで、別のMQTT Subscriberで受信するときに、topic 名がこの Friendly Name になる。

Node-RED の FLOW 設定例

リモコン remote_3 の操作をdebug 出力する

ex. zigbee2mqtt/remote_3

debug の payload 例

{"action":"off","battery":82,"linkquality":255,"update":{"installed_version":16777303,"latest_version":16777303,"state":"idle"},"voltage":1300}"
{"action":"on","battery":82,"linkquality":255,"update":{"installed_version":16777303,"latest_version":16777303,"state":"idle"},"voltage":1300}"

Switch として利用する場合、途中にJson Parse をはさんで、使う。

firmware update

Zigbee2MQTT のWEB UI上部に OTM というメニューがある。

なんと、firmware update してくれる。ありがたい!

とはいえ、古いリモコンだと、1時間くらいかかるので、時間あるときにしたほうがいい。

シェアする