Smart HomeをDIYする

Apple HomeKit は対応製品が少なくて高価なのでHomebridgeでがんばります

Ledvanceの格安Zigbee電球をHomeKitで使う

いつも読ませていただいているブログでおすすめだった格安Zigbee電球を買って、Apple HomeKitに接続しました。Amazonで300円台で売っているLedvance SMART+の「調光調色」電球377円と「RGB」電球313円です。もしかしたら今は価格が変わっているかもしれませんが、破格の値段です。お買い得情報ありがとうございました。

     

発光色が任意に変えられるのがRGB電球の方で、「調光調色」電球は明るさと色温度が変えられる普通の電球です。RGB電球の方が普通電球よりも安いのも謎。ブログ情報ではZigbee2MQTTで使えたとのことでしたので、安心して買いました。

HomeKitのZigbee環境

というのも、HomebridgeでZigbee2MQTTを使っていたからです。使っているHomebridgeサーバは以下の構成です。

同じ構成でRaspberry Pi 4上でも問題なく動作してました。Raspberry Pi 4が起動しなくなり(熱が原因かな?)、NUC上のUbuntuに移行してます。

ペアリングを試みる

まずは電球をペアリングモードにします。最初に電源を入れると大体ペアリングモードになります。電球が点滅して色温度が変化します。一方で、すでにペアリングしてしまった電球は、当然ですが、電源を入れるだけではペアリングモードに入りません。Zigbee2MQTTのサイト情報によると、Ledvance社の製品は、5秒off、5秒onを5回繰り返すとペアリングモードに移行するらしいです。そこで、スマホでストップウォッチ画面を出して、5秒ごとにoff/onを繰り返してみました。すると、45秒後くらいから電球の点滅が始まり、ペアリングモードに入りました。Zigbee2MQTTを動かしているサーバのそばでペアリングモードに入れば、自動的にペアリングします。その様子を確認するために、mosquitto_subコマンドでペアリング状況をモニターしておきます。Zigbee2MQTTのconfiguration.yamlでは、MQTTトピックをzigbee2mqttと設定してあったので、これをサブスクライブすれば良いです。

mosquitto_sub -h localhost -t zigbee2mqtt/# -v

すると、今回購入したそれぞれの電球で、

zigbee2mqtt/bridge/logging {"level":"warning","message":"Received message from unsupported device with Zigbee model 'CLA60 TW Value' and manufacturer name 'LEDVANCE'"}
または
zigbee2mqtt/bridge/logging {"level":"warning","message":"Received message from unsupported device with Zigbee model 'CLA60 RGBW JP' and manufacturer name 'LEDVANCE'"}>

というメッセージが出ていました。どうやらどちらの電球もサポートされていないようです。未サポートですが、ペアリングはできたので、/opt/zigbee2mqtt/data/configuration.yamlには、デバイスのID番号が登録されてしまってました。番号ではわかりにくいので、とりあえずそれぞれの電球にLedvance WとLedvance RGBというfriendly_nameをつけるよう、configuration.yamlを書き換えておきました。

Zigbee2MQTTを更新する

Zigbee2MQTTのサイトで調べたら、サポートされているデバイスの情報は、/opt/zigbee2mqtt/node_modules/zigbee-herdsman-converters/devices の中のファイルの書かれているそうです。この中に、ledvance.jsというファイルがありましたが、確かにCLA60を含んだモデルはありませんでした。ところがgithubを見に行ったら、どちらのモデルも記述がありました。最新バージョンならばサポートされているようです。

実は、先立って以下の手順で、Zigbee2MQTTを最新版にしてありました。でもこれではまだ鮮度が不足だったようです。

www.zigbee2mqtt.io

追記:最近、別のマシンで試したところ、上記のアップデートで今回の電球のどちらもサポートされるようになってました。なので、すでに通常のアップデートで対応できるようです。以下の手順が本当に必要かどうかを、ledvance.jsで確認してください。)

そこでnode_modulesを手作業でアップデートすることにしました。以下のようにnode_modulesのあるディレクトリに移動して、updateしました。そのあと、npm outdatedするとパッケージの状態を知らせてくれます。

$ cd /opt/zigbee2mqtt/
$ npm update
$ npm outdated

この結果、どのパッケージもCurrentとWantedが同じで、必要なアップデートが完了したようでした。ただ、それでもLedvanceの電球は含まれませんでした。

npm outdatedの結果を見ると、Latestというバージョン番号もありました。zigbee-herdsman-convertersは(他のパッケージも同じですが)Currentよりも新しいバージョンがあるとのことでした。でもupdateではインストールされないようです。調べたところ、無理やり最新版にするためには、バージョン番号を指定してインストールする方法があるらしいです。そこで、最新版を指定してnpm installしました。zigbee-herdsman-convertersの他に、zigbee-herdsmanというパッケージもありましたので、念の為こちらもアップデートしました。

$ npm install zigbee-herdsman-converters@14.0.585
$ npm install zigbee-herdsman@0.14.46

この後は、以下のようにしてzigbee2mqttを再起動しました。

$ systemctl restart zigbee2mqtt.service

ペアリングをやり直す

再起動だけでは電球は認識されませんでした。ペアリングからやり直す必要があるようです。でも45秒off/onを繰り返すよりも簡単な方法が見つかりました。

Zigbee2MQTTは、デバイスが見つかると前述のconfiguration.yamlに書き込む他に、内部でのデータベースでデバイスを管理しているようです。なので、configuration.yamlからデバイスを削除しただけでは、デバイスは消えません。MQTT経由でコマンドを出すと、ようやくデバイス削除ができます。mosquittoを使う場合のコマンドは以下です。数字部分のIDは、configuration.yamlに書き込まれていますし、上記のmosquitto_subのログにも流れています。

mosquitto_pub -h localhost -t zigbee2mqtt/bridge/request/device/remove -m "0x9999999999999999"

この結果、電球の点滅がすぐに開始して、ペアリングが開始しました。

ホーム.appから使う

ペアリング後は、自動的にホーム.appに登録され、iPhoneMacから操作可能になります。以下はMac版ホーム.appのスクリーンショットです。

電球アイコンの部分をクリックするとon/offできます。それ以外のタイル部分をクリックすると、明るさと色を設定する画面が開きます。中央のスライダーで明るさを変更できます。下の6個の丸の一つをクリックするとプリセットされた色になります。

6個のプリセットボタンを選択すると、そこに「編集」の文字が現れます。もう一度クリックすると、「カラー」設定と、

色の「温度」設定が可能になります。

RGB電球では、「カラー」設定が表示されますが、RGB機能がない「調光調色」電球では、「温度」設定のみが表示されます。全体にシンプルでわかりやすいインタフェースかと思いました。

まとめ

Amazonで売られている格安Zigbee電球がHomeKitで動作することを確認しました。破格なので、まだ買えるようならおすすめです。Zigbeeはあまり流行ってないので売れなかったのかもしれません。PSEマーク技適マークも付いていて安心です。

RGBモデルは、価格がさらに安いです。重量は「調光調色」モデルが66g「RGB」モデルが138gと、RGBの方がかなり重いです。内部も詰まっていてお得感があります。冒頭の写真のように、変な色で光らせることもできるので、1個あれば楽しめます。ただ、色が変えられる照明の使い所が無いので、個人的には「調光調色」モデルの方が実用的かと思いました。