Home Assistant: ZigBee Coordinatorを技適対応「nRF52840 MDBT50Q 開発用USBドングル」で作る手順

Home Assistant: ZigBee Coordinatorを技適対応「nRF52840 MDBT50Q 開発用USBドングル」で作る手順
Page content

よくある技適の問題

先日書いた記事 (Home Assistant: スマートホームの高みを目指し、自宅サーバ・IT環境を再構築中 [2025-05-11]) からの流れで、このところ何週間か、Home Assistantに接続して「ZigBee Coordinator」として使用できる、かつ技適に適合しているデバイスを探していた。

ZigBeeとは近距離無線通信規格のひとつで、たとえばIKEAのスマート電球やAqaraのセンサー類の通信に使われている。ちなみにMatterという新しめの規格もあるが、今回は扱わない。

念願のデバイスに関しては、スイッチサイエンスで販売されている次の「nRF52840 MDBT50Q 開発用USBドングル」が、要件を満たしそうだとなんとなく確信が持てたので、ZigBee Coordinatorに変身させる具体的な方法はよく分からないままであったが、とにかく購入した。

種別商品名購入価格 (税込)購入店購入日
USBドングルnRF52840 MDBT50Q 開発用USBドングル(ブートローダ書き込み済)1,980円スイッチサイエンス2025-06-06

本記事には、いろいろと試行錯誤した結果として、このUSBドングルをHome Assistantに接続してZigBee Coordinatorとして使えるようにする手順を記す。USBドングルの裏面には工事設計認証番号「018-180280」が記載されており、技適 (技術基準適合証明) 情報は次の通りだ。

写真: USBドングルの表と裏

ZigBee Coordinator化する手順

上記USBドングルをZigBee Coordinator化する作業の大まかな流れは、「USBドングルにZbossというプロトコルに対応するファームウェアを書き込み、ZbossプロトコルでHome AssistantのZigbee2MQTTに接続する」というものになる。具体的には次の通り。

Step-1. USBドングルにZboss対応ファームウェアを書き込む

  1. https://github.com/kardia-as/nrf-zboss-ncp/tree/main/nRF52840_donglev2.6.0_ncp_zboss_max_mem_nrf52840_dongle.hex (1,041,412bytes) をダウンロードする
  2. https://github.com/microsoft/uf2/tree/master/utilsuf2conv.pyuf2families.jsonを使って、次のようなコマンドで、1の.hexファイルをflash.ut2ファイル (757,760bytes) に変換する
    $ ls -l
    合計 1048
    -rw-rw-r-- 1 mah mah   12819  6月 21 23:23 uf2conv.py
    -rw-rw-r-- 1 mah mah    8937  6月 21 23:26 uf2families.json
    -rw-rw-r-- 1 mah mah 1041412  6月 21 23:23 v2.6.0_ncp_zboss_max_mem_nrf52840_dongle.hex
    
    $ python3 uf2conv.py ./v2.6.0_ncp_zboss_max_mem_nrf52840_dongle.hex -c -f 0xada52840
    Converted to uf2, output size: 757760, start address: 0x1000
    Wrote 757760 bytes to flash.uf2
    
    $ ls -l ./flash.uf2 
    -rw-rw-r-- 1 mah mah 757760  6月 21 23:28 ./flash.uf2
  3. USBドングルの丸いボタンを押しながら、USBドングルをPCに挿入し (このボタン操作にはブートローダを起動させる意味がある)、PCから見えるようになるUSBストレージ領域にflash.ut2ファイルを書き込む
  4. USBドングルの青いLEDが点滅し始めて、しばらくすると消灯する
  5. USBドングルをPCから取り外す

Step-2. USBドングルをHome Assistantと接続する

  1. Home Assistant (HA) を動かしているサーバにUSBドングルを (丸いボタンは押さない状態で) 挿入する
    • HAが仮想ゲストであれば、「2fe3:0001」 (上記3でのファームウェア書き換え後のUSBドングルのDevice ID) がHA仮想ゲストに認識されるように、仮想ホストのUSB Pass-Throughを設定する
  2. HAのZigbee2MQTTに次の設定を行う (port行のID部分は環境によって変わるものかもしれないので各自で要調査。HAのTerminalでls -al /dev/serial/by-id/すればIDが判る)
    serial:
    	port: /dev/serial/by-id/usb-ZEPHYR_Zigbee_NCP_860E07EF48375EB6-if00
    	adapter: zboss
    • 設定内容を Zigbee2MQTT > Settings > Serial で見た場合:
    • 設定内容を Settings > Add-ons > Zigbee2MQTT > Configuration で見た場合:
  3. 必要なrestartを行う (Zigbee2MQTTのrestartなどで良いのかもしれないし、常に最も確実なのはHA自体の再起動だと思う)
  4. HAの Settings > System > Logs > (右上) Zigbee2MQTT でログを確認してZigBeeの様子がどうなっているか、動作していそうかを把握する

⚠ 問題点 [2025-06-21]

  • 仮想ゲストとしてのHAの再起動を行ったあと、仮想ホストに挿しているUSBドングルがHAで認識されていない状態になる
    • このとき、仮想ホストのlsusbでもUSBドングルが見えない状態になっている。機器に触れられる環境であればUSBドングルを物理的に挿し直すと、認識を復活させることができる (仮想ホストの再起動ではダメだった。再認識させるためには、USBドングルの信号線をOFF→ONしなきゃいけないのか?)
    • USBハブのpower per-portのON/OFFが行える mvp/uhubctl: uhubctl - USB hub per-port power control というようなツールを、USBハブと併用することでなんとかできないか、模索する予定 (USBハブのPer-port power switching対応ってなんだ?)

おわりに

技適対応のデバイスでZigBee Coordinatorを作るという目標を、自分がなにも分かっていない状態からとりあえず達成できたのは嬉しい。上記の問題点が解決できていないので、及第点のレベルではあるが。ちなみに今回、目標達成の突破口となったキーワードは「Zboss」であった。このキーワードの発見によって、「nRF52840 Dongle」と「Zigbee2MQTT」を関係付けることができたから。Zbossを知るまでの情報探しは大変であった。今後は、自宅HA環境にZigBeeに対応するセンサー類も連携させるようにして、なにか面白い仕掛けでも作ってみるか……と妄想している。

Aqara 振動センサー アカラ Aqaraハブが必須 防犯センサー Alexa 感知センサー セキュリティ HomeKit Siriなどに対応 玄関 窓 郵便箱 取付簡単 防犯グッズ 防犯対策 スマホ対応 アラート通知 スマートホーム

Aqara 振動センサー アカラ Aqaraハブが必須 防犯センサー Alexa 感知センサー セキュリティ HomeKit Siriなどに対応 玄関 窓 郵便箱 取付簡単 防犯グッズ 防犯対策 スマホ対応 アラート通知 スマートホーム

Aqara

また、発見の時系列的には前後するが、「nRF52840 MDBT50Q 開発用USBドングル (ブートローダ書き込み済)」のファームウェア書き換え方法については、X (Twitter) でいただいた下記リプライが強力なヒントとなった (ありがとうございます!!)。これは、独り作業をとりあえずつぶやいておくことの醍醐味だ。

参考リンク

ハードウェア

ソフトウェア