Przetestuj OTA w kraju skandynawskim

Poniższe instrukcje wykorzystują przykładową aplikację do oświetlenia z pakietu Matter SDK oraz płytę deweloperską Nordic nRF52840.

Konfiguracja środowiska

Te instrukcje bazują na opartej na Dockerze instalacji łańcucha narzędzi nRF Connect. Jeśli nie chcesz używać Dockera, instrukcje natywnego instalowania nRF Connect na komputerze hosta znajdziesz w witrynie skandynawskiej.

Sprawdź pakiet Matter SDK

user@host> mkdir otaprep
user@host> cd otaprep
user@host> git clone https://github.com/project-chip/connectedhomeip.git
user@host> cd connectedhomeip/
user@host> git fetch origin v1.0-branch
user@host> git checkout FETCH_HEAD

Wybierz odpowiedni obraz Dockera, którego chcesz użyć. Użyj jednego z obrazów utworzonych na potrzeby ciągłej integracji pakietu SDK Matter.

user@host> cat .github/workflows/examples-nrfconnect.yaml | grep chip-build
            image: connectedhomeip/chip-build-nrf-platform:0.5.99

Podłącz tablicę Nordic do komputera. Sprawdź wyliczenie USB interfejsu szeregowego:

W systemie macOS:

user@host> ls /dev/tty.usbmodem*
/dev/tty.usbmodem0123456789000

W systemie Linux:

user@host> ls /dev/tty*AC*
/dev/ttyACM0

lub

user@host> ls /dev/tty*USB*
/dev/ttyUSB0

Uruchom kontener, korzystając z informacji zgromadzonych w poprzednim poleceniu. Przekaż flagi umożliwiające podłączenie folderu pakietu SDK hosta Matter i interfejsu szeregowego USB w kontenerze.

user@host> docker run --name container_name -it --user $(id -u):$(id -g) --mount source=$(pwd),target=/workspace,type=bind connectedhomeip/chip-build-nrf-platform:0.5.99 /bin/bash

Zatrzymywanie i uruchamianie kontenera Dockera Matter

Po każdym uruchomieniu polecenia docker run tworzysz nowy kontener z określonym obrazem. Gdy to zrobisz, stare dane zapisane w poprzedniej instancji kontenera zostaną utracone. Czasem tak się dzieje, bo pozwala to zacząć od nowej instalacji. Jednak w tym przypadku najprawdopodobniej zechcesz zapisywać konfigurację środowiska pracy i środowiska między sesjami.

user@host> docker stop container_name

Jeśli chcesz ponownie uruchomić kontener, uruchom kontener i otwórz okno terminala:

user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash

Możesz otworzyć dodatkowe sesje terminala w kontenerze, używając:

user@host> docker exec -it container_name /bin/bash

Możesz też rozpocząć sesję główną za pomocą:

user@host> docker exec -u 0 -it container_name /bin/bash

Inicjowanie pakietu SDK

W kontenerze zainicjuj pakiet SDK Matter oraz zmienne środowiskowe dla łańcucha narzędzi Nordic nRF52. Inicjowanie pakietu SDK Matter zajmuje zwykle kilka minut.

$ cd /workspace
$ git submodule update --init --recursive
$ source ./scripts/bootstrap.sh
$ source ./scripts/activate.sh
$ export ZEPHYR_BASE=/opt/NordicSemiconductor/nrfconnect/zephyr
$ export GNUARMEMB_TOOLCHAIN_PATH="$PW_ARM_CIPD_INSTALL_DIR"
$ scripts/run_in_build_env.sh "python3 scripts/setup/nrfconnect/update_ncs.py --update --shallow"
$ source /opt/NordicSemiconductor/nrfconnect/zephyr/zephyr-env.sh

Tworzenie i Flash

Skonfiguruj VID i PID urządzenia:

$ cd examples/lighting-app/nrfconnect
$ west build -b nrf52840dk_nrf52840 -t menuconfig

W interaktywnym menu:

  1. Modules --->

  2. connectedhomeip --->

  3. [*] Connected Home over IP protocol stack --->

  4. Wpisz wartości Device vendor ID (VID) i Device product ID (PID) w formacie całkowitym base10.

  5. Sprawdź, czy wybrana jest flaga [*] Enable OTA requestor.

  6. Naciśnij S, aby zapisać konfigurację, naciśnij Enter, aby potwierdzić, a następnie Q, aby wyjść z menuconfig.

Konfigurowanie certyfikatów testowych

Wykonaj czynności opisane w artykule Tworzenie certyfikatów testowych urządzeń Matter, aby utworzyć certyfikaty CD, DAC i PAI.

Skompiluj urządzenie

$ west build -b nrf52840dk_nrf52840

Flash urządzenia

Należy to zrobić na komputerze hosta, a nie w kontenerze Dockera.

Jeśli nie masz jeszcze narzędzi wiersza poleceń nRFConnect, pobierz je i zainstaluj.

user@host> nrfjprog --program build/zephyr/merged.hex --chiperase -f NRF52

Otwórz połączenie terminala z urządzeniem na hoście lub w kontenerze. Użyj ulubionego narzędzia terminala, takiego jak minicom czy GNU screen.

user@host> minicom -c on -D /dev/ttyACM0 115200

user@host> screen /dev/ttyACM0 115200

Utwórz i prześlij obraz OTA

Po zaktualizowaniu urządzenia jeszcze raz zmień ustawienia kompilacji, aby utworzyć obraz OTA ze zwiększoną wersją oprogramowania urządzenia.

Uruchom Zephyr menuconfig:

$ west build -b nrf52840dk_nrf52840 -t menuconfig

W interaktywnym menu:

  1. Modules -->

  2. connectedhomeip -->

  3. Connected Home over IP protocol stack -->

  4. Zmień Device Software Version na 2.

  5. Zmień Device Software Version String na prerelease-2.

  6. Naciśnij S, aby zapisać konfigurację, naciśnij Enter, aby potwierdzić, a następnie Q, aby wyjść z menuconfig.

Utwórz nowy plik pakietu OTA Matter. Dane wyjściowe znajdują się w klastrze build/zephyr/zephyr.bin.

$ /workspace/src/app/ota_image_tool.py create -v hex_VID -p hex_PID -vn version_no -vs version_string path_to_binary -da digest_algorithm path_to_ota_file

Potwierdź właściwości wygenerowanego pliku pakietu OTA Matter:

/workspace/examples/lighting-app/nrfconnect# /workspace/src/app/ota_image_tool.py show firmware-ota-update-test.bin
Magic: 1beef11e
Total Size: 951784
Header Size: 72
Header TLV:
  [0] Vendor Id: XXXXX (0xXXXX)
  [1] Product Id: 32768 (0x8000)
  [2] Version: 2 (0x2)
  [3] Version String: prerelease-2
  [4] Payload Size: 951696 (0xe8590)
  [8] Digest Type: 1 (0x1)
  [9] Digest: 75f2e8b0c8e922b8bb3841504190bcdd83533e936a284c7254d29327d605c930

Pakiet SDK Matter jest podłączony z hosta kontenera, więc obraz OTA jest też dostępny na hoście kontenera. Prześlij obraz OTA do Google Home Developer Console, postępując zgodnie z instrukcjami przesyłania OTA.

Uruchom urządzenie i obserwuj proces OTA.

Otwórz połączenie terminala z urządzeniem na hoście lub w kontenerze. Użyj ulubionego terminala, takiego jak minicom lub GNU screen:

$ minicom -c on -D /dev/ttyACM0 115200

Naciśnij przycisk resetowania urządzenia, aby wyświetlić logi z rozruchu.

W danych wyjściowych urządzenia powinny być widoczne ustawione identyfikatory VID i PID oraz adres URL kodu QR uruchomienia:

I: nRF5 802154 radio initialized
I: 4 Sectors of 4096 bytes

(...)

I: 681 [SVR]Server Listening...
I: 684 [DL]Device Configuration:
I: 687 [DL]  Serial Number: 11223344556677889900
I: 692 [DL]  Vendor Id: XXXXX (0xXXXX)
I: 695 [DL]  Product Id: XXXXX (0xXXXX)
I: 699 [DL]  Hardware Version: 0
I: 702 [DL]  Setup Pin Code (0 for UNKNOWN/ERROR): 20202021
I: 708 [DL]  Setup Discriminator (0xFFFF for UNKNOWN/ERROR): 3840 (0xF00)
I: 714 [DL]  Manufacturing Date: (not set)
I: 718 [DL]  Device Type: 65535 (0xFFFF)
I: 723 [SVR]SetupQRCode: [MT:6FCJ142C00KA0648G00]
I: 727 [SVR]Copy/paste the below URL in a browser to see the QR Code:
I: 733 [SVR]https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%000000000000000000000
I: 742 [SVR]Manual pairing code: [30900112302]
I: 747 [DL]CHIP task running
I: 752 [DL]CHIPoBLE advertising started
I: 757 [DL]NFC Tag emulation started

Upewnij się, że Hub jest online, i uruchom urządzenie za pomocą urządzenia Google Home app (GHA), używając kodu QR z linku znalezionego w dzienniku.

Po uruchomieniu urządzenia pozostaw rejestrowanie aktywności.

W dzienniku urządzenia powinien pojawić się następujący tekst:

/* Hub OTA provider identification */
I: 69642 [SWU]OTA Requestor received AnnounceOTAProvider
D: 69647 [SWU]  FabricIndex: 1
D: 69649 [SWU]  ProviderNodeID: 0x00000000XXXXXXXX
D: 69654 [SWU]  VendorID: 0x6006
D: 69657 [SWU]  AnnouncementReason: 0
D: 69660 [SWU]  Endpoint: 2
...
D: 69799 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262265 [SWU]QueryImageResponse:
D: 262268 [SWU]  status: 0
D: 262271 [SWU]  imageURI: bdx://00000000FC843D94/37f09fd6-0000-0000-0000-000000000000
D: 262278 [SWU]  softwareVersion: 2
D: 262281 [SWU]  softwareVersionString: 2
D: 262285 [SWU]  updateToken: 36
D: 262288 [SWU]  userConsentNeeded: 0
D: 262292 [SWU]Update available from version 0 to 2
...
D: 262372 [SWU]Establishing session to provider node ID 0x00000000FC843D94 on fabric index 1
...
D: 262409 [SWU]BDX::SendMessage

Po zastosowaniu obrazu urządzenie uruchomi się ponownie. Po ponownym uruchomieniu czas kompilacji obrazu powinien odpowiadać czasowi przesłanemu do Developer Console.

Sprawdzanie aktualizacji oprogramowania OTA

Wersję oprogramowania urządzenia można sprawdzić w aplikacji Google Home (GHA). Po oddaniu urządzenia do użytku wykonaj te czynności:

  1. Przytrzymaj kafelek urządzenia na ekranie głównym aplikacji GHA
  2. W prawym górnym rogu kliknij ikonę .
  3. Kliknij Informacje techniczne.
  4. Sprawdź pole Wersja oprogramowania

Ekran aplikacji Google Home z polem wersji oprogramowania