Matter zum Anfassen - Die Matter-Lampe (Teil 2)

Tim Conrad
Tim Conrad – Senior Security Consultant

In Teil 1 dieser Blogserie haben wir einen theoretischen Überblick gegeben, indem wir Alices Weg vom Auspacken eines neuen Matter-Schalters bis zur Inbetriebnahme des Geräts innerhalb der Fabric sowie dessen Verbindung mit einer Matter-Lampe verfolgt haben.

In den folgenden Teilen werden wir nachstellen wie Alice ihr System aufgesetzt hat. In diesem Teil beginnen wir mit einer Matter-Lampe. Wir werden anhand dieses Beispiels demonstrieren wie ein Matter-Gerät funktioniert. Dafür werden wir einen ESP32 mit einer einfachen LED und einem Widerstand verwenden, um unsere eigene Matter-Lampe als Proof of Concept zu erstellen.

Note:
Dieser Blogbeitrag richtet sich an Entwickler und andere Personen mit technischem Hintergrund und Interesse an einem auf Sicherheit ausgerichteten Überblick über Matter.
Attention:
Bitte beachten Sie, dass der Matter-Code Open Source ist, so dass sich viele Beispiele und Tools im Laufe des Prozesses ändern können. Wir werden alles auf Ubuntu 20.04 machen. Für andere Systeme werden wir den Link zum Originaldokument im Matter-Repository zur Verfügung stellen.

Hardware-Setup und Komponenten

ESP32 und LED-Schaltpläne:

LED und ESP32 Schaltpläne

Um unsere Lampe zu bauen, benötigen wir die folgenden Komponenten:

  • ESP32-WROOM DevKitC
  • 330 Ohm Widerstand
  • LED
  • Drähte
  • Breadboard
  • Micro-USB-Kabel
  • Computer mit BLE und WiFi

Für unsere Matter-Lampe sollten die Kosten für die Hardware unter 10€ liegen. Platzieren Sie den ESP32 auf dem Breadboard und verbinden Sie die LED und den Widerstand mit den Drähten wie auf dem Bild gezeigt. In unserem Fall wird der GPIO 2 (beschriftet mit “G2” oder “2”) verwendet. Nachdem wir unsere Grundschaltung aufgebaut haben, verbinden wir den ESP32 über das USB-Kabel mit unserem Computer.

(Matter) Chip GitHub Repository

Das Matter-GitHub-Repository ist hier zu finden: https://github.com/project-chip/connectedhomeip Zuerst werden wir das Repository wie hier beschrieben bootstrappen und dann einen Blick auf die Verzeichnisstruktur werfen, wie in BUILDING.md beschrieben.

Git

Bei der Betrachtung unserer Repository-Struktur gibt es einige Bereiche, die für uns von besonderem Interesse sind:

  • docs/guides - hier sind plattformspezifische Anleitungen und Benutzerhandbücher, die bei der Einrichtung bestimmter Tools helfen, z. B. das chip-tool, das CLI-Tool zur Interaktion mit Matter-Geräten.
  • examples/ - hier sind alle Beispielprojekte für verschiedene Plattformen nach Anwendungen sortiert, z. B. enthält die all-cluster-app alle verfügbaren Funktionen von Matter in einer Anwendung und ist die beste Anwendung, um die ersten Schritte damit zu wagen.

Für unser Setup müssen wir zwei Anwendungen erstellen, erstens das chip-tool und zweitens die all-cluster-app for the ESP32.

Bau des Chip-Tools

Aus dem Root-Verzeichnis des Repositorys können Sie das Chip-Tool direkt mit dem folgenden Befehl erstellen.

scripts/examples/ gn_build_example.sh 
examples/chip-tool out/chip-tool
Code-Änderungen:
Während die Arbeit mit dem master-Branch des Matter-Repositorys Ihnen Zugang zu den neuesten Funktionen verschafft, kann es aufgrund der schnellen Code-Änderungen von Zeit zu Zeit zu Problemen kommen. In den meisten Fällen löst ein erneuter Pull und ein Wiederholen des Bootstrapen das Problem. Falls das Bootstrapen fehlschlägt, löschen Sie den Ordner .environment/ und starten Sie erneut.

Nachdem Sie das Chip-Tool erfolgreich erstellt haben, können Sie es mit dem folgenden Befehl starten.

out/chip-tool/chip-tool

Die Ergebnis sieht in etwa so aus.

Cluster

Unsere Ergebnis wird die folgende Fehlermeldung enthalten [1649943820.702390][30597:30597] CHIP:TOO: Missing cluster name, die wir jetzt ignorieren werden. Nachdem wir die Firmware für den ESP32 erstellt und geflasht haben, werden wir auf das Thema Cluster zurückkommen und dieses Konzept ausführlicher diskutieren.

Erstellen der all-cluster-app

Als erstes müssen Sie Espressifs ESP-IDF installieren, um die Beispiele zu bauen und zu flashen (alle Anweisungen finden Sie auch im Beispiel, wenn etwas nicht wie beschrieben funktioniert, schauen Sie hier).

mkdir ${HOME}/tools
cd ${HOME}/tools
git clone https://github.com/espressif/esp-idf.git
cd esp-idf
git checkout v4.4
git submodule update --init
./install.sh
. ./export.sh

Gehen Sie nun zurück zum Matter-Repository und aktivieren Sie die Umgebung.

cd /path/to/connectedhomeip
source scripts/activate.sh

cd examples/all-clusters-app/esp32
idf.py set-target esp32
idf.py build

Nachdem die Firmware erfolgreich erstellt wurde, können Sie nun den ESP32 flashen und die Ergebnisse überwachen. Hier ist /dev/ttyUSB0 der ESP32, dies kann auf Ihrem System anders sein oder wenn Sie mehr als ein Entwicklungsboard angeschlossen haben.

idf.py -p /dev/ttyUSB0 flash monitor
Löschen Sie den Flash des ESP3:

Der ESP32 behält Änderungen, wie z.B. Netzwerk-Zugangsdaten, ACLs oder NOCs, auf dem Flash bei, daher müssen Sie das Flash löschen, bevor Sie mit einem leeren Gerät beginnen.

idf.py -p /dev/ttyUSB0 erase-flash
Im Folgenden wird das Blinken des ESP und das Monitoring des Geräts gezeigt.

Jetzt haben Sie das Chip-Tool und den ESP erfolgreich mit allem ausgestattet, was Sie für Ihr erstes Matter-Gerät brauchen. Jetzt brauchen wir noch ein bisschen mehr Theorie darüber, wie das Interaktionsmodell funktioniert. Danach werden wir unser neues Gerät in unser eigenes WiFi-Netzwerk einbinden. Wenn Sie kein WiFi haben, das Sie benutzen können, können Sie mit Ubuntu einen eigenen Wifi-Zugangspunkt erstellen, wie hier beschrieben.

Endpoints, Clusters, Commands und Attributes

Das Interaktionsmodell ist recht einfach zu verstehen. Wir werden es anhand unseres Lampen-Beispiels weiter erläutern. Zur Veranschaulichung betrachten wir das Licht als dimmbar, ohne Farbwechsel oder andere ausgefallene Funktionen. Die typischen Funktionen einer herkömmlichen dimmbaren Lampe sind also:

  • Einschalten des Lichts
  • Ausschalten des Lichts
  • Einstellen der Helligkeit auf eine bestimmte Stufe

In Matter gruppieren wir diese Funktionen in Clustern und legen diese Endpoints und den Nodes/das Gerät offen. Die folgende Abbildung gibt einen vereinfachten Überblick über das Interaktionsmodell.

Nodes, Endpoints und Cluster

Lassen Sie uns diese Abbildung Schritt für Schritt besprechen:

  • Node - Das physische Gerät im Netzwerk, dargestellt durch eine Node ID in unserer Fabric.
  • Endpoint - Beziehen sich auf eine Geräteeigenschaft. z.B. würde ein Beleuchtungsgerät mit zwei Lampen zwei identische Endpoints haben, um jede Lampe separat zu steuern. Endpoint 0 ist für Matter-spezifische Funktionen reserviert, wie z. B. die Kopplung des Geräts mit dem Netzwerk.
  • Cluster - Eine Reihe von Funktionen, die über einen bestimmten Endpunkt gesteuert werden. So wird z. B. die Funktion zum Ein- und Ausschalten des Geräts als OnOff-Cluster bezeichnet.
    • Server - Eine Lampe würde einen Cluster-Server implementieren, der auf Befehle zum Ein- und Ausschalten des Lichts wartet.
    • Clients - Ein Lichtschalter würde einen Cluster-Client implementieren, der der Lampe Ein/Aus-Befehle sendet.
  • Commands - Löst eine bestimmte Aktion auf dem Cluster aus. Z.B. Licht einschalten.
  • Attribute - Speichert Informationen über einen bestimmten Cluster-Zustand. Ist z. B. das Licht ein- oder ausgeschaltet?

Mit diesem Hintergrundwissen können wir nun das Chip-Tool verwenden, um unser ESP32 Matter-Gerät in Betrieb zu nehmen.

Inbetriebnahme des ESP32

Um die Inbetriebnahme zu starten, benötigen wir die folgenden Dinge:

  • WiFi Network Credentials (wir verwenden die SSID “IoT Testing” und das Passwort “NotTheRealPassword”)
  • Gerätediskriminator (in diesem Beispiel ist es “3840”)
  • Gerätepasswort (in diesem Beispiel ist es “20202021”)
Discriminator:
Ein Discriminator hilft bei der weiteren Identifizierung potenzieller Geräte während des Einrichtungsprozesses und trägt dazu bei, die Geschwindigkeit und Stabilität der Einrichtung für den Benutzer zu verbessern. Der Discriminator sollte für jedes einzelne Gerät unterschiedlich sein.

Als erstes wollen wir unseren Laptop mit dem Chip-Tool (der Commissioner) mit unserem ESP32 (der Commissionee) koppeln und die WiFi-Anmeldedaten bereitstellen, der folgende Befehl wird dies für uns tun. Die Node ID (hier “12344321”) kann frei gewählt werden.

# ./chip-tool pairing ble-wifi node-id ssid password setup-pin-code discriminator 
./chip-tool pairing ble-wifi 12344321 "IoT Testing" NotTheRealPassword 20202021 3840

Dies führt das komplette Commissioning durch, die in Teil 1 beschrieben wurde. Im GIF unten sehen Sie sowohl das Monitoring des Geräts (unten) als auch das Commissioning mit dem Chip-Tool (oben).

Kopplung des Matter-Geräts

Werfen wir einen Blick auf die Logs des chip-tool für das Commissioning und vergleichen wir die Ausgabe mit dem, was wir in Teil 1 gelernt haben.

Der Ort, an dem die Fabric-Anmeldedaten gespeichert sind. Sie müssen diese Dateien sichern, wenn Sie den Zugang zu Ihren Materie-Geräten behalten wollen, da sie nach einem Neustart entfernt werden, wenn der Ordner /tmp geleert wird.

Protokoll Ausgabe

Die Protokollausgabe mit Kommentaren (englisch) zur Erläuterung der einzelnen Abschnitte und einer Zusammenfassung am Ende der Auflistung.

Protokoll Ausgabe

Zusammengefasst leistet das Chip-Tool folgendes:

1.) Erkennen des Geräts über BLE mit Hilfe des Discriminators

2.) Sichere Kommunikation aufbauen (PASE)

3.) Übermittlung grundlegender Informationen

4.) Device-Attestation durchführen

5.) Konfigurieren der Operational Credentials des Geräts

6.) Aktivieren des WiFi-Zugangs auf dem Gerät

7.) Test der Verbindung zum Gerät (CASE)

8.) Schließen und bereinigen aller Sitzungsdaten.

Jetzt können Sie das Licht ganz einfach ein- und ausschalten, indem Sie den folgenden Befehl senden.

# ./chip-tool onoff toggle destination-id endpoint-id
./chip-tool onoff toggle 12344321 1

Das folgende GIF zeigt, wie man das Licht umschaltet.

Kopplung des Matter-Geräts

Ein kurzer Blick auf die Chip-Tool-Ausgabe, um zu erklären, was passiert.

Chip Tool Ausgabe Zusammengefasst leistet das Chip-Tool folgendes:

1.) Einrichten der Anmeldeinformationen für Fabric 1

2.) Finden des Nodes 12344321 (0xbc5c01) und Aufbau einer Sitzung mit CASE

3.) Senden Sie den Toggle-Befehl (0x2) an den OnOff-Cluster (0x6) und Endpoint 1. (OnOff-Cluster-Definitionen hier)

4.) Empfang einer Antwort vom Node, wenn der Befehl erfolgreich war.

Jetzt können wir ein helles Licht sehen und unser erstes selbst gebautes Matter-Gerät steuern. Wir haben viele der Konzepte verwendet, die in Teil 1 erklärt wurden, und in Teil 3 (Link folgt) dieser Serie werden wir uns ansehen, wie man einen Lichtschalter an die Lampe bindet, um ein vollständigeres Setup zu haben und das Chip-Tool zur Steuerung des Lichts loszuwerden.

Weitere Lektüre:


Wenn Sie daran interessiert sind, mit uns an Ihrem Matter-Produkt zu arbeiten oder unsere Hilfe wünschen, kontaktieren Sie uns bitte über unser Kontaktformular oder senden Sie uns eine E-Mail über matter@grandcentrix.net.