In der folgenden Anleitung wird das Beispiel für eine Beleuchtungs-App aus dem Matter SDK zusammen mit einem M5Stack ESP32-Entwicklungsboard verwendet.
Build-Umgebung einrichten
Klonen Sie zuerst das Matter SDK.
In diesem Beispiel sehen wir uns den minimal unterstützten Commit für Google Home Matter Release 5 an:
mkdir otaprep
cd otaprep
git clone https://github.com/project-chip/connectedhomeip.git
cd connectedhomeip
git fetch origin v1.0-branch
git checkout FETCH_HEAD
git submodule update --init --recursive
source ./scripts/activate.sh
Als Nächstes prüfen wir die im ESP32-GitHub-Workflow verwendete Version, um zu ermitteln, welches Docker-Image am besten für unseren Build geeignet ist:
cat .github/workflows/examples-esp32.yaml | grep chip-build | head -n 1
image: connectedhomeip/chip-build-esp32:0.5.99
Wir führen einen Container aus dem Docker-Image aus und übergeben Flags, um das Matter-SDK im Container zu mounten und Zugriff auf das ESP32-Gerät zu ermöglichen.
docker run --name container_name -it --user $(id -u):$(id -g)--mount source=$(pwd),target=/workspace,type=bind --device=/dev/ttyUSB0 connectedhomeip/chip-build-esp32:0.5.99 /bin/bash
Matter-Docker-Container beenden und starten
Jedes Mal, wenn Sie einen docker run
-Befehl ausführen, wird ein neuer Container mit dem angegebenen Image erstellt. Dabei gehen Ihre alten Daten verloren, die in einer vorherigen Containerinstanz gespeichert waren. Manchmal ist das auch gewünscht, weil Sie dann mit einer Neuinstallation beginnen können. In diesem Beispiel möchten Sie Ihre Arbeit und die Umgebungskonfiguration aber wahrscheinlich zwischen den Sitzungen speichern.
user@host> docker stop container_name
Wenn Sie wieder bereit sind, die Anwendung auszuführen, starten Sie den Container und öffnen Sie ein Terminalfenster:
user@host> docker start container_name
user@host> docker exec -it container_name /bin/bash
Sie können zusätzliche Terminalsitzungen für Ihren Container mit folgendem Befehl öffnen:
user@host> docker exec -it container_name /bin/bash
Oder starten Sie eine Root-Sitzung mit:
user@host> docker exec -u 0 -it container_name /bin/bash
SDK initialisieren
Im Container initialisieren wir das Matter SDK und ESP IDF:
cd /workspace
git submodule update --init --recursive
source ./scripts/activate.sh
source /opt/espressif/esp-idf/export.sh
Erstellen und flashen
Als Nächstes müssen Sie das Image erstellen und das Entwicklerkit flashen, um das Matter-OTA-Firmware-Update zu erhalten.
Dazu müssen Sie ein Bild erstellen.
Konfigurieren Sie zuerst den Build mit dem menuconfig
-Dienstprogramm aus der ESP IDF.
cd examples/lighting-app/esp32
idf.py menuconfig
Konfigurieren Sie im interaktiven Menü die folgenden Einstellungen:
Component config --->
CHIP Device Layer --->
Device Identification Options --->
Legen Sie für
Vendor ID
die VID fest, die Connectivity Standards Alliance (Alliance) zugewiesen ist.Legen Sie
Product ID
auf die PID fest, die Sie für die Matter-Integration in der Google Home Developer Console festgelegt haben.
Aktivieren Sie das OTA-Anforderer-Flag:
Component config -->
CHIP Core -->
System options --->
Flag „OTA Requestor“
[*] Enable OTA Requestor
aktivierenDrücken Sie zweimal die ESC-Taste, um zum Menü der obersten Ebene zurückzukehren.
Aktiviere das Flag Matter zum Erstellen von OTA‑Images:
Component config -->
CHIP Device Layer --->
Matter OTA Image --->
[*] Generate OTA IMAGE
Legen Sie die Versionsnummer fest:
Application manager --->
[*] Get the project version from Kconfig
auswählenSetzen Sie
Project version (NEW)
auf1.0
.Drücken Sie S, um die Konfiguration zu speichern, zweimal die Eingabetaste und dann Q, um
menuconfig
zu beenden.
Testzertifikate einrichten
Folge der Anleitung unter Matter-Geräteprüfzertifikate erstellen, um CD-, DAC- und PAI-Zertifikate zu erstellen.
Gerät entwickeln
Führen Sie nun den Build aus und flashen Sie das Gerät:
idf.py build
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
OTA-Image erstellen und hochladen
Ändern Sie nun die Build-Einstellungen noch einmal, um ein OTA-Image zu erstellen. Verwenden Sie dasselbe Image, aber mit einer inkrementierten Versionsnummer.
Führen Sie menuconfig
aus.
idf.py menuconfig
Aktualisieren Sie im interaktiven Menü Folgendes:
Application manager --->
[*] Get the project version from Kconfig
auswählen- Setzen Sie
Project version (NEW)
auf2.0
. - Drücken Sie s, um die Konfiguration zu speichern, drücken Sie zweimal die Eingabetaste und dann q, um
menuconfig
zu beenden.
Erstellen und rufen Sie das Image ab. Im Beispiel wird sowohl der Speicherort des Bildes für OTA als auch die Ausgabe beim Parsen mit ota_image_tool.py
gezeigt.
cd build && /workspace/src/app/ota_image_tool.py show ./chip-lighting-app-ota.bin
Die Ausgabe sieht so aus:
Magic: 1beef11e
Total Size: 1243360
Header Size: 64
Header TLV:
[0] Vendor Id: XXXXX (0x000)
[1] Product Id: XXXXX (0x000)
[2] Version: 2 (0x2)
[3] Version String: v2.0
[4] Payload Size: 1243280 (0x12f890)
[8] Digest Type: 1 (0x1)
[9] Digest: e367f4d71e2ccd554b9a399c864abbf2c039382ef1def1b986fb2f59a99923a8
Da das Matter SDK von Ihrem Container-Host gemountet wird, ist das OTA-Image auf Ihrem Container-Host verfügbar.
Lade das OTA‑Image in Developer Console hoch. Folge dazu der Anleitung zum Hochladen von OTA‑Images.
Gerät in Google Home einrichten und OTA beobachten
Achten Sie darauf, dass Ihr Gerät über USB mit dem Host-Linux-Computer verbunden ist. Das folgende Beispiel zeigt die Verwendung von GNU screen
zum Lesen der Gerätelogs:
screen -L /dev/ttyUSB0 115200
Dadurch wird die Ausgabe des Geräts in Ihrem Terminal angezeigt und gleichzeitig in die standardmäßige Bildschirmprotokolldatei namens screenlog.0
geschrieben.
Sie können die Datei screenlog.0
in einem anderen Texteditor öffnen oder sie mit cat
, tail
, more
oder grep
in einer anderen Shell anzeigen.
Drücken Sie die rote Reset-Taste an der Seite des Geräts, um Protokolle vom Start an zu sehen.
In der Geräteausgabe sollten die zuvor festgelegte VID und PID sowie eine URL zum QR‑Code-Bild angezeigt werden, mit dem Sie das Gerät in Betrieb nehmen.
[0;32mI (2388) chip[DIS]: Advertise commission parameter vendorID=XXXXX productID=XXXX discriminator=3840/15 cm=1[0m
[0;32mI (1928) chip[SVR]: SetupQRCode: [MT:E59-000000000000000][0m
https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT%3AE59-000000000000000
Achte darauf, dass dein Hub in deinem Zuhause online ist.
Nimm das Gerät mit dem Google Home app (GHA) in Betrieb und verwende dazu den QR‑Code aus dem Link, der in der Logdatei angezeigt wird.
Lassen Sie das Gerät nach der Inbetriebnahme einige Minuten lang ununterbrochen laufen.
Achten Sie auf die Logausgabe in Bezug auf OTA Requestor, OTA-Image-Download und OTAImageProcessor
.
Prüfen Sie nach der Installation des Images, ob die Kompilierungszeit des Images mit der in der Console hochgeladenen Kompilierungszeit übereinstimmt und später als die beim ersten Start gemeldete Kompilierungszeit ist. Die Ausführung von grep
mit dem folgenden Muster im Modus für reguläre Ausdrücke auf screenlog.0
kann den OTA-Prozess veranschaulichen:
grep -E "(Compile time|OTA)" screenlog.0
Die Ausgabe sieht so aus:
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 06:21:59
I (135558) chip[SWU]: OTA Requestor received AnnounceOTAProvider
I (540658) chip[SWU]: OTA image downloaded to offset 0x1a0000
I (541348) OTAImageProcessor: Applying, Boot partition set offset:0x1a0000
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 07:35:31
I (76) boot: 1 otadata OTA data 01 00 0000f000 00002000
I (91) boot: 3 ota_0 OTA app 00 10 00020000 00177000
I (99) boot: 4 ota_1 OTA app 00 11 001a0000 00177000
I (645) cpu_start: Compile time: Oct 15 2022 07:35:31
Nach der ersten Ausführung können Sie die Schritte im Abschnitt OTA-Image erstellen und hochladen wiederholen, ohne ein neues Image hochzuladen.
Setzen Sie die Versionen dieses Mal wieder auf 1
.
Führen Sie menuconfig
aus und wählen Sie in den interaktiven Menüoptionen Folgendes aus:
Component config -->
CHIP Device Layer --->
Device Identification Options
Setzen Sie
Version String
aufv1.0
.Setzen Sie
Device Software Version Number
auf1
.Drücken Sie s, um die Konfiguration zu speichern, und dann q, um
menuconfig
zu beenden.
Entferne das Gerät in der GHA aus deinem Zuhause.
Erstellen Sie das Image, falls es noch nicht erstellt wurde:
idf.py build
Flashen:
idf.py -p /dev/ttyUSB0 erase_flash
idf.py -p /dev/ttyUSB0 flash
Wiederhole die Schritte unter In Google Home in Betrieb nehmen und OTA beobachten nach Bedarf.
OTA-Softwareupdate validieren
Die Softwareversion des Geräts kann über die Google Home App (GHA) geprüft werden. Nachdem ein Gerät in Betrieb genommen wurde, gehen Sie so vor:
- Drücken Sie lange auf die Gerätekachel auf dem GHA-Hauptbildschirm.
- Tippe rechts oben auf das Symbol .
- Tippen Sie auf Technische Informationen.
- Prüfen Sie das Feld Softwareversion.