Zigbee2MQTT on RPi

部屋の間取りを変えたので、照明も入れ替え。
RPiから自動で点灯・消灯したり、スマホのNodeRED UIから操作したい。
というころで、安定&安価なZigbee対応のIKEA製品(TRADFRI)を、Zigbee2MQTTで管理する。
MQTT について、過去記事
対象商品
色調整ができるのと、できないの両方。
リモコン1
リモコン2
電球1
電球2
Zigbee
Aliexpress で、2700円くらい。
これをRPi3 に差して、使う。
仕組み
Claude に書いてもらったモジュール図。
Zigbee2MQTTは、MQTTの一種で、ハードウェアをサポートするため、UIも独自にカスタマイズされている。
以下は、device一覧画面
これらは、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時間くらいかかるので、時間あるときにしたほうがいい。