Hands-on Matter - Der Matter-Lichtschalter (Teil 3)

Tim Conrad

Tim Conrad – Senior Security Consultant

In Teil 1 und Teil 2 haben wir einen Blick auf die grundlegenden Konzepte geworfen und sind durch die all-cluster-app für ein Beispiel-Matter-Gerät gegangen und haben mit unserer CLI ein Licht an- und ausgeschaltet. Jetzt werden wir einen Matter-Lichtschalter implementieren, der dies für uns tun wird, um unser Setup zu vervollständigen.

Hinweis:
Dieser Blogbeitrag ist für Entwickler und andere Personen mit technischem Hintergrund und Interesse an einem sicherheitsorientierten Überblick über Matter geschrieben.

Achtung:
Bitte beachten Sie, dass der Code von Matter quelloffen ist, sodass sich viele Beispiele und Werkzeuge im Laufe des Prozesses ändern können. Wir werden alles auf Ubuntu 20.04 durchführen. Für andere Systeme werden wir den Link zum Originaldokument im Matter-Repository bereitstellen.

Um den Lichtschalter einzurichten, ziehen Sie zunächst die neuesten Änderungen aus dem Matter-Repository und richten Sie das light switch example wie folgt ein:

# Only perform this if you do not have the esp idf tool setup already.
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

# Move to your matter repo
cd ~/connectedhomeip
git pull

# This will remove your environmental settings just in case you have errors during the activate.
rm -r .environment 

# Bootstrap and activate Matter repo
source ./scripts/bootstrap.sh
source ./scripts/activate.sh

# Move to example
cd examples/light-switch-app/esp32

# Set the target
idf.py set-target esp32

# Build the app
idf.py build

# Flash it to your device
idf.py -p /dev/ttyUSB0 flash monitor

Jetzt haben wir den Lichtschalter mit der Firmware geflasht, um fortzufahren, müssen wir das Gerät als einen existierenden Knoten zu unserer Fabric hinzufügen, wie wir es in Teil 2 mit dem chip-tool gemacht haben.

./chip-tool pairing ble-wifi 12344320 "IoT Testing" NotTheRealPassword 20202021 3840
Hinweis:
Sie haben vielleicht bemerkt, dass der Pin und der Diskriminator derselbe sind wie bei der all-cluster-app. Dies ist nur der Einfachheit halber so, da dies die Werte sind, die im Repository konfiguriert sind. In einem realen Szenario würden die beiden Werte unterschiedlich sein, um Konflikte bei der Inbetriebnahme zu vermeiden. Hier müssen Sie die beiden Geräte nacheinander in Betrieb nehmen, um das zu vermeiden.
Hinweis:
Wenn Sie Probleme haben, die ACL im Licht (all-cluster-app) zu schreiben, könnte das daran liegen, dass Sie irgendwann neu gebootet haben und das chip-tool seine Zertifikate verloren hat. Die Zertifikate werden in /tmp/chip* gespeichert und sind nach einem Neustart nicht mehr vorhanden. Wenn Sie fortfahren möchten, erstellen Sie eine Kopie davon, um sie an einem beliebigen Punkt wiederherzustellen.

Der Lichtschalter hat die Node-ID 12344320 (und die all-cluster-app hatte die Node-ID 12344321).

Nun müssen wir die all-cluster-app [12344321] mit einer Zugriffskontrollliste (ACL) versehen, die dem Lichtschalter _[12344320] den Zugriff auf den On-Off-Cluster (Endpunkt 1, Cluster 6) erlaubt. Schauen wir uns den folgenden Befehl genauer an:

./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects": [112233], "targets": null },{"fabricIndex": 1, "privilege": 3, "authMode": 2, "subjects": [12344320], "targets": null }]' 12344321 0

Die Kommentare erläutern die verwendete ACL etwas näher:

[{
    "fabricIndex": 1, // Symbolisiert die Fabric, zu der die ACL gehört (wichtig für Multi-Fabric-Nutzung)
    "privilege": 5, // 5 steht für das höchste Privileg (Administer)
    "authMode": 2, // CASE-Authentifizierung (1 - PASE-Authentifizierung)
    "subjects": [112233], // Bezieht sich auf die chip-tool Node-Id
    "targets": null // null bedeutet wildcard, daher sind alle Endpunkte targets
}, {
    "fabricIndex": 1,
    "privilege": 3, // 3 - "operate"
    "authMode": 2, // CASE-Authentifizierung
    "subjects": [12344320], // Node ID des Lichtschaltersh
    "targets": null // wildcard, "operate" für alle Endpunkte
}]

Die Node Id 12344321 (all-cluster.app) und der Endpunkt 0 sind reserviert für Matter-spezifische Cluster, z. B. Binding, Pairing, etc.

Die erste ACL wurde bei der Inbetriebnahme erstellt und ermöglicht unserem CLI-Tool (chip-tool) den Zugriff und die Verwaltung der beiden Geräte. Die zweite ACL gibt dem Lichtschalter den Zugriff, um den On-Off-Cluster (oder in diesem Fall alle Cluster) zu bedienen. (Dies sind zu viele Rechte und sollten im produktiven Einsatz eingeschränkt werden, aber für ein Beispiel ist es ausreichend.)

./chip-tool binding write binding '[{"fabricIndex": 1, "node":12344321, "endpoint":1, "cluster":6}]' 12344320 1

Das binding teilt dem Lichtschalter mit, wo er operate nutzen kann:

[{
    "fabricIndex": 1, // Symbolisiert die Struktur, zu der die ACL gehört
    "node": 12344321, // Noden Id der Leuchte (all-cluster-app)
    "endpoint": 1, // Endpunkt des On-Off-Clusters
    "cluster": 6 //  On-Off-Cluster
}]

Jetzt können Sie den Boot-Knopf auf dem ESP-Licht (in der Nähe des USB-Ports) drücken und Sie werden sehen, dass sich das Licht einschaltet.

Damit ist unsere Serie abgeschlossen, wir haben jetzt ein durchgängig funktionierendes Beispiel. Unsere beiden Matter-Geräte kommunizieren miteinander und wir haben alle grundlegenden Konzepte kennengelernt, um mit der Arbeit an unseren eigenen Ideen zu beginnen.

In Teil 4 werden wir einen Schritt weiter gehen und uns mit Matter Bridges beschäftigen, dies wird besonders für alle interessant sein, die bereits ein Smart Home System besitzen oder unterhalten.

Patrick Sernetz

Haben Sie Fragen oder wollen Sie ein Matter Projekt realisieren?

Patrick Sernetz – Head of Solution Architecture

Hi, ich bin Patrick. Haben Sie Fragen zu Matter? Kontaktieren Sie mich gerne per E-Mail.