コモノポリタン

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

【Home AssistantでDIY Smart Home】zigbee2mqttまわりのアップデート

【Home Assistant(Hass.io)】
zigbee2mqttまわりのアップデート

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

 久しぶりにドア窓センサーを追加しようと思ったら認識されない。これはzigbee2mqttを再起動じゃ、とsudo systemctl stopほにゃららsystemctl startほにゃららしたのですが、zigbee2mqttの再起動時のログをよく見ると「nodeのバージョンが期待しているのと違う!」とか仰っております。うちのはv11.15.0でしたが、v11はダメな様子。
 あげてやろうじゃないですか。と、思って意外とハマった話…

この記事の前提条件
Home Assistant 2021.7.3
HassOS 6.10
Server Raspberry Pi 4(2GB)

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

1. Node.jsのアップデート

 最初メッセージに「nodeのバージョンが違う!」と言われたので、コーディネーターやらルーターやらのバージョンの話かと思ってzigbeeバイスFirmwareサイトを探しに行ってしまいました。それはそれで何やらバージョンが上がっているのですが、バージョン番号などを見ると違う話のよう。
(こっちのアップデートも後でやりましょう)
 メッセージ(消してしまいましたが)をよく見るとどうやらnode.jsの事らしい。でnode.jsのバージョンは?ということで、コンソールから確認すると、

$ node -v
v11.15.0

と答えるところを見て、思い出した!Raspberry Pi ZeroはARMv6ベースなので、node.jsの公式サポートから外れてたのでした。zigbee2mqtt導入時は苦労してコンパイルして入れたんでしたね。
 今回はもちっと楽な方法で入れてみましょう。公式にはコンパイル済みの提供はないのですが、じつは公式サイトに「非公式のビルド版」なるものがありました。そこの最新(v16.6.0)を入れてみましょう。(安定版のv14.17.4を入れたければ、バージョンのところを書き換えれば大丈夫)*1
 まずはzigbee2mqttを止めます。

$ sudo systemctl stop zigbee2mqtt

 非公式版の置き場https://unofficial-builds.nodejs.org/download/releaseからarmv61のファイルを探します。最新版はv16.6.0の様子。

$ cd /tmp/
$ wget https://unofficial-builds.nodejs.org/download/release/v16.6.0/node-v16.6.0-linux-armv6l.tar.gz
$ tar xvfz node-v16.6.0-linux-armv6l.tar.gz
$ cd node-v16.6.0-linux-armv6l/
$ rm CHANGELOG.md LICENSE README.md
$ sudo cp -R * /usr/local/

 node.jsが入れ替わったか確認します。

$ node -v
v16.6.0

 よしよし、それではzigbee2mqttを再起動します。

$ sudo systemctl start zigbee2mqtt
$ sudo jornalctl -u zigbee2mqtt.service -f
(ログが流れるので、ざっと見る)

 問題なさそうですね。よかった。

2. zigbee2mqttのアップグレード

 良い機会なので時々アップブレードされているzigbee2mqttも上げておきましょうか。

$ sudo systemctl stop zigbee2mqtt
$ cd /opt/zigbee2mqtt/

$ git checkout HEAD -- npm-shrinkwrap.json
$ git pull

$ cp -R data/ data-backup/
$ npm ci
$ cp -R data-backup/* data
$ rm -rf data-backup/
$ sudo systemctl start zigbee2mqtt

 なお途中のgit pullのところでAlready up to date.とでたら今が最新版ってことだと思うので、そこで終了します。

3. zigbeeノードのアップデート

 下記サイトにあるzigbeeノード(CC2351を使用)の最新ファームウェアを確認します。 github.com  ルーターは、CC2531_router_2020_09_29.zipが最新版のようなので導入時のままで良かったのですが、コーディネーターは前回のCC2531_DEFAULT_20190608.zipからバージョンが上がりCC2531_SOURCE_ROUTING_20201128.zipが最新版でしたので置き換えましょう。ついでにdefaultではなくsouce_routingを入れてみました。手順は以前の記事の通り。

source routingについて:
I'm using a CC2530 or CC2531, which firmware should I use?に回答ありますように、15個以上のデバイスを繋げるならsource routingがお勧めのとのこと。ただしコーディネーターに5個しかデバイスルーター含む)を繋げられないので、十分な数のルーターを準備する必要ありとのこと。

※再登録要:
根元のコーディネーターのルーティングの扱いが変わったせいか再度登録しないと駄目でした。部屋のあちこちを再接続しに回りました。しばらくはコーディネーターのファームは触らないようにしようかな。

※副作用あり:
zigbee2mqtt mapがうまく表示されない。mapを作るのにルーティングテーブルを見ている様なのですが、source routingになってそのやり方が変わったことが原因でしょう。source_routingに対応したmapアプリを探さないと。

5. おわりに

 とりあえず無事に諸々のアップデートも終わり、zigbeeバイスの追加もできるようになりました(本当の原因は不明…)。数えたところ、現時点でデバイスが30個越え…個々の電池交換が今から心配です。

maky-ba.hatenablog.com

*1:いずれにせよnode.jsの脆弱性とか報告されているので時々置き換える必要ありますね。