昔、Amazon Dashボタンでお風呂時間をログしていた。
しかし、DashボタンはAmazonに殺されてしまい、今ではもうただの不燃ごみ。
では…と、AWS IoT ボタンに乗り換えたが、これもまたサービス終了。
しばらく放置していたが、なんとなくまたログを取りたいなと思って考えてみた。
…考えてみたといってもChatGPTに相談しただけなんだけども。
Dashボタンの頃と同じことをするなら、Zigbeeボタンを使えばいいらしい。
Zigbeeでの通信は、USBドングルを使えば良く、Zigbeeボタンは Aqara のボタンを揃えろ。とのこと。
ソフトウェア的には zigbee2mqtt というブリッジソフトウェアがあるので、これを使えば構築できる。
なるほど。
Sonoff Dongle-P USBドングルとAqaraのボタンで5000円強。
届いたとき、Aqaraのボタンの電池の金具が変形していて明らかにおかしくなっていたので、手で直した。
(CR2032電池の上に来るべき金具が、下に行ってしまっていた。そのせいで蓋がやたら硬かった)
最初は、Raspberry Pi Zero W が余っているのでこれでやろうと思ったが、セットアップしてみると遅い…
さすがにこれは厳しい。何より、armhf は docker も node.js もサポート外という感じなのが辛い。
これでは構築してもいまいちなので、普通にx86のサーバー上で構築した。
zigbeeの機器は、それぞれがメッシュネットワークを構築して、パケットの中継みたいなことをするらしいので
理屈上は距離が届くのではないかという期待を込めている。
(お風呂場の前にRPiでも置きたくないし…湿度すごいので)
ハマりどころとしては、なかなかペアリングがうまく行かなかった。
エラーメッセージを貼ってみると、ChatGPT曰く
① ペアリング手順(重要)
手順
- Zigbee2MQTTで Permit join ON
- ボタンのリセット穴(ピン)を長押し 5秒以上
- LEDが点滅したらすぐ離す
- その後 2〜3回 短押し(これ重要)
👉 この「短押し追撃」で安定して join します
だそうで。 怪しいなと思いながら試したら、本当にjoinした。 短押し追撃をしないとjoinが失敗する。
ChatGPTすげーな・・・
Joinが成功すると、MQTTにイベントが流れ出すのであとはそれをListenして好きに処理すればいいだけ。
多分 n8n とかを通して楽する感じになるかなと。
(相談してみたら、 node-red のがいいよと言われて結局従った)