Matter OTA のソフトウェア更新には、OTA Requestor と OTA Provider の2種類のノードが関与することを思い出してください。
この演習では、OTA Requestor の役割は Matter サンプルアプリケーションを実行する Nordic デバイス上で動作させ、OTA Provider の役割は Linux 用の OTA Provider ツールを使用して実行します。
目標は、Matter OTA の仕組みを用いて Matter デバイスのソフトウェア更新を実行することです。
1. この演習のベースコードを開きます。
Visual Studio Code の WELCOME パネルでOpen an existing applicationを選択し、コースの GitHub リポジトリに移動してl5/l5_e1ディレクトリを開きます。アプリケーションはAPPLICATIONSパネルに表示されるはずです。
このアプリケーションは Matter Lock サンプルのコピーであり、この演習のコードスニペットをどこに入力するかの指示が追加されています。
注:nRF Connect SDK のすべての Matter サンプルはデフォルトで OTA Requestor の役割をサポートしているため、任意の Matter サンプルを使用できます。
2. アプリケーションをビルドして DK に書き込みます。
アプリケーションをビルドして DK に書き込みます。
3. Matter Lock サンプルを少し変更します。
ソフトウェア更新が動作することを確認するには、アプリケーションに変更を加え、バイナリを再度ビルドする必要があります。
3.1 ソフトウェア更新を容易に確認できるよう、ログ行を追加します。
src/app_task.cppファイルのStartApp()メソッドに、ソフトウェア更新が成功したことを容易に確認できるよう、新しいログ行を追加します。
次のログ行を追加します
LOG_INF("================ NEW SOFTWARE IMAGE IS WORKING!!! ==============="); C++3.2 VERSIONファイルを変更し、PATCHLEVELの値を0以外の任意の値に変更します(例:4)。
変更後、ファイルは次のようになります
VERSION_MAJOR = 3
VERSION_MINOR = 2
PATCHLEVEL = 4
VERSION_TWEAK = 0
EXTRAVERSION =C++3.3 サンプルを再度ビルドしますが、DK には書き込まないでください。
3.4 デバイスのシリアルポートを開き、ログが表示されていることを確認してください。ソフトウェア更新の成功を確認するために必要になります。
CONNECTED DEVICESパネルのVCOMを使用してボードのシリアルポートを開きます。VCOM の右側にある「Connect to Serial Port」アイコンをクリックします。
デバイスからのログが表示されない場合は、nRF54L Series DK の RESET ボタンを押してください。
nRF54L Series DK は2つのシリアルポートとして認識され、番号は PC によって異なる場合があります。番号が大きい方の VCOM を選択してください。例えば VCOM0 と VCOM1 がある場合は VCOM1 を使用します。

4. CHIP Tool を使用して Matter デバイスをコミッショニングします。
CHIP Tool を使用して Matter デバイスをコミッショニングします。
4.1 Thread Border Router が引き続き動作していることを確認します。動作していない場合:
4.1.1 新しいコマンドライン端末を開き、次のコマンドを実行して OpenThread Border Router を起動します:
/dev/ttyACM0を、Thread コプロセッサで使用しているシリアルポート番号に置き換えてください。
sudo docker run -it --rm --privileged --name otbr --network otbr -p 8080:80 \
--sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" \
--volume /dev/ttyACM0:/dev/radio nrfconnect/otbr:fbde28a --radio-url spinel+hdlc+uart:///dev/radio?uart-baudrate=1000000Terminal command「コンテナ名 “/otbr” はすでにコンテナ…で使用されています」のようなエラーが出た場合は、次のコマンドを実行してください
sudo docker kill otbrsudo ip -6 route del "fd11:22::/64" dev otbr0 via "fd11:db8:1::2"sudo ip link set dev otbr0 downsudo docker network rm otbr4.1.2 Web ブラウザでhttp://localhost:8080/アドレスを開き、OpenThread Border Router のグラフィカルユーザーインターフェースにアクセスします。
4.1.3 サイドパネルからFormタブに移動し、入力したデータが次の画像と同じであることを確認します。次にFORMボタンを押して、OpenThread Border Router に Thread ネットワークの形成と Thread リーダーになることを要求します。

4.1.4 新しいコマンドライン端末を開き、Docker 内で動作している Thread ノードのステータスを確認します:
sudo docker exec -it otbr sh -c "sudo ot-ctl state"Terminal command出力は次のようになるはずです:
leader
DoneTerminal4.2 CHIP Tool が引き続き動作していることを確認します。動作していない場合:
4.2.1 新しいコマンドライン端末を開き、次のコマンドで前の演習で取得したダウンロード済みバイナリファイルを実行します:
PC の場合:
./chip-tool_x64 interactive start
Raspberry Pi の場合:
./chip-tool_arm64 interactive start
4.3 デバイスをネットワークにコミッショニングします。
4.3.1 Bluetooth LE 経由の Matter アドバタイズが動作していることを確認します。
デバイスのシリアルポートに次のログが表示されるはずです:
I: 730208 [DL]CHIPoBLE advertising started
I: 730212 [DL]NFC Tag emulation startedTerminalMatter Template サンプルでは Bluetooth LE 経由の Matter アドバタイズは自動的に開始されますが、1時間でタイムアウトします。アドバタイズがタイムアウトした場合は、Matter デバイスの BUTTON0 を押して再度開始してください。
4.3.2 CHIP Tool アプリケーションを実行している端末ウィンドウに戻ります。
次のコマンドを実行してコミッショニングを開始し、<thread dataset>引数に、レッスン2 演習1で取得してコンピュータに保存した Thread dataset を指定します。<your_selected_node_id>は、他の演習で使用していないランダムなノード ID(例:7)に置き換えてください。この同じ番号は、CHIP Tool 経由でデバイスにコマンドを送信する際にも使用します。
pairing ble-thread <your_selected_node_id> hex:<thread dataset> 20202021 3840Terminal commandその結果、Matter デバイスと CHIP Tool アプリケーションのログには、コミッショニングのフローを示す詳細なメッセージが多数出力され始めます。これらは、ペアリングに問題がある場合に特に有用で、トラブルシューティングに役立ちます。
4.1 CHIP Tool が引き続き動作していることを確認します。動作していない場合:
4.1.1 新しいコマンドライン端末を開き、次のコマンドで前の演習で取得したダウンロード済みバイナリファイルを実行します:
PC の場合:
./chip-tool_x64 interactive start
Raspberry Pi の場合:
./chip-tool_arm64 interactive start
4.2 デバイスをネットワークにコミッショニングします。
4.2.1 Matter デバイスの BUTTON0 を押して、Bluetooth LE 経由の Matter アドバタイズを開始します。
デバイスのシリアルポートに次のログが表示されるはずです:
I: 730208 [DL]CHIPoBLE advertising started
I: 730212 [DL]NFC Tag emulation startedTerminal4.2.2 CHIP Tool アプリケーションを実行している端末ウィンドウに戻ります。
次のコマンドを実行し、<wifi_ssid>および<wifi_password>引数に Wi-Fi ネットワーク情報を入力します。
<your_selected_node_id>は、他の演習で使用していないランダムなノード ID(例:7)に置き換えてください。この同じ番号は、CHIP Tool 経由でデバイスにコマンドを送信する際にも使用します。
pairing ble-wifi <your_selected_node_id> <wifi_ssid> <wifi_password> 20202021 3840Terminal commandその結果、Matter デバイスと CHIP Tool アプリケーションのログには、コミッショニングのフローを示す詳細なメッセージが多数出力され始めます。これらは、ペアリングに問題がある場合に特に有用で、トラブルシューティングに役立ちます。
5. OTA Provider のセットアップ
5.1 Matter nRF Connect releases の GitHub ページにアクセスして、OTA Provider の実行ファイルをダウンロードします。使用している nRF Connect SDK バージョンに対応するリリース成果物を見つけてください:
Linux PC でセットアップしている場合は、chip-ota-provider-app_x64ファイルをダウンロードします。
Raspberry Pi でセットアップしている場合は、chip-ota-provider-app_arm64ファイルをダウンロードします。
5.2 ダウンロードしたバイナリを実行します。<path_to_matter.ota>は、Matter デバイスに提供したい Matter OTA イメージへのパスに置き換えてください。
このケースでは<path_to_sample>/build/matter.otaになります。
なお、Matter OTA イメージはデフォルトでサンプルのビルドディレクトリに生成されます:
PC の場合:
./chip-ota-provider-app_x64 -f <path_to_matter.ota>
Raspberry Pi の場合:
./chip-ota-provider-app_arm64 -f <path_to_matter.ota>
6. CHIP Tool を使用して OTA Provider デバイスをコミッショニングします
Matter ファブリックの観点では、OTA Provider デバイスは Nordic DK と大きくは変わらず、Matter コミッショナーによって同様にコミッショニングされる必要があります。
Matter Lock にはノード ID 1 が割り当てられているため、OTA Provider にはノード ID 2 が割り当てられます。
6.1 CHIP Tool アプリケーションを実行している端末ウィンドウを使用して、コミッショニングプロセスを開始します。
次のコマンドを実行して OTA Provider をコミッショニングし、ノード ID 2 を割り当てます:
pairing onnetwork 2 20202021Terminal command7. OTA Provider と OTA Requestor 間の接続を設定し、ソフトウェア更新を実行します。
すべてのコマンドは CHIP Tool の端末ウィンドウで実行してください。
7.1 次のコマンドを実行して、Matter デバイスにデフォルトの OTA Provider を設定します。
最後の2つの引数は、それぞれ Requestor Node ID と Requestor Endpoint ID です。
otasoftwareupdaterequestor write default-otaproviders '[{"fabricIndex": 1, "providerNodeID": 2, "endpoint": 0}]' 1 0Terminal command7.2 ファブリック内のすべてのノードにOperate権限を付与するアクセス制御リスト(ACL)を OTA Provider に設定します。
これは、ノードが OTA Provider に対してクラスターコマンドを送信できるようにするために必要です:
accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects": [112233], "targets": null}, {"fabricIndex": 1, "privilege": 3, "authMode": 2, "subjects": null, "targets": null}]' 2 0Terminal command7.3 Matter Door Lock サンプルを実行している nRF DKに対して、Announce OTA Provider コマンドを送信します。
数値の引数は順に、Provider Node ID、Provider Vendor ID、Announcement Reason、Provider Endpoint ID、Requestor Node ID、Requestor Endpoint ID です。
otasoftwareupdaterequestor announce-otaprovider 2 0 0 0 1 0Terminal commandデバイスが OTA Provider ノードを認識すると、自動的に OTA Provider に新しいファームウェアイメージを問い合わせます。ファームウェアイメージのダウンロードが完了すると、更新を適用するためにデバイスは自動的に再起動します。
7.4 Nordic DK のログを確認し、ソフトウェアイメージが更新されたかどうかを確認します。ログには次のメッセージが含まれるはずです:
I: 168 [SVR]Server Listening...
I: 171 [DL]Device Configuration:
I: 174 [DL] Serial Number: 11223344556677889900
I: 178 [DL] Vendor Id: 65521 (0xFFF1)
I: 182 [DL] Product Id: 32774 (0x8006)
I: 185 [DL] Product Name: Matter Door Lock
I: 189 [DL] Hardware Version: 0
I: 192 [DL] Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
I: 197 [DL] Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
I: 204 [DL] Manufacturing Date: 2022-01-01
I: 208 [DL] Device Type: 65535 (0xFFFF)
I: 211 [SVR]SetupQRCode: [MT:8IXS142C00KA0648G00]
I: 216 [SVR]Copy/paste the below URL in a browser to see the QR Code:
I: 222 [SVR]https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3A8IXS142C00KA0648G00
I: 230 [SVR]Manual pairing code: [34970112332]
I: ================ NEW SOFTWARE IMAGE IS WORKING!!! ===============
E: 241 [DL]Long dispatch time: 187 ms, for event type 2Terminalログから、Matter OTA を使用したソフトウェア更新が成功したことが確認できます。