Hands-on Matter - Die Matter Bridge (Teil 4)

Tim Conrad

Tim Conrad – Senior Security Consultant

Aktuelle Smart Homes sind voll von Bridges, die die zentrale Komponente sind, um mit Ihren proprietären Geräten über mehr oder weniger offene drahtlose Protokolle (Zigbee, DuoFern, Bluetooth, Wifi, etc.) zu kommunizieren. Sollten Sie also alle Ihre alten Systeme einfach wegwerfen, um Platz für neue Matter-Geräte zu schaffen? Nein, Matter hat auch für dieses Szenario eine Lösung und wir werden einen genaueren Blick darauf werfen, was eine Matter Bridge ist und wie sie alle Ihre proprietären Bridges in kompatible Matter-Geräte umwandelt.

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, so dass 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.

Der Matter-Standard verfügt über ein spezielles Feature-Set, das es erlaubt, alte Bridges und Smart-Home-Controller so anzupassen, dass diese mit Matter kompatibel werden.

Das folgende Bild zeigt ein typisches Smart Home Setup, die Bridge in der Mitte könnte eine ZigBee Bridge sein oder eine Plattform wie Home Assistant (die bereits angekündigt hat, Matter zu unterstützen und zu der es einen Workshop hier) gibt.

The Concept

Die folgende Abbildung zeigt Ihnen einen kurzen Überblick über das Matter Bridge Konzept. Wenn Sie mehr über die Themen Nodes, Endpoints und Clusters wissen wollen, lesen Sie bitte Teil 2.

Die Matter Bridge stellt Nicht-Matter-Geräte als Endpunkte an ihrer Schnittstelle zur Verfügung. Die Matter Bridge besteht aus zwei Teilen, einem Matter-Stack und einem herstellerspezifischen Betriebssystem, das sich mit den zuvor installierten Smart Home Geräten verbindet. Oft mit einer Art App oder Schnittstelle des Anbieters, um neue Geräte einzubinden oder sie aus der Ferne zu konfigurieren.

Der folgende Ablauf wäre möglich, um die Matter Fabric mit der aktuellen Smart Home Installation zu verbinden:

1.) Um eine einfache Integration zu ermöglichen, wird der Beauftragte die Bridge wie jedes andere Matter-Gerät einbinden.

2.) Endpunkt 0 (Bridge):

a.) Die Bridge Node wird den Descriptor Cluster auf Endpoint 0 öffnen. Als Teil seiner Attribute wird er den DeviceType Root Node, Bridge haben, was anzeigt, dass dieses Gerät Bridging-Fähigkeiten hat. Die PartsList-Attribute enthalten eine Liste aller Endpunkte, die ein überbrücktes Gerät symbolisieren. Hier haben wir Endpunkt 10 für das Licht, Endpunkt 11 für die Waschmaschine und Endpunkt 12 für das Hygrometer.

b.) Die Cluster Bridged Action liefert Informationen über die logische Gruppierung, z. B. welcher Endpunkt zu welchem Raum gehört. Dies sind alles Informationen, die wahrscheinlich vom Benutzer bei der anfänglichen Einrichtung des Non-Matter Smart Home konfiguriert werden. Hier sehen wir, dass sich Endpunkt 1 im Badezimmer befindet, während sich Endpunkt 11 und 12 im Gästebadezimmer befinden. Der Cluster hat weitere Funktionen, wie z.B. benannte Aktionen, Befehle zum Auslösen von Aktionen oder zum Empfangen von Rückmeldungen über Aktionen.

3.) Endpunkt 1-9:

a.) Diese Endpunkte sind in diesem Szenario nicht von Interesse, da sie die brückenspezifische Matter-Funktionalität implementieren werden.

b.) Die überbrückten Geräte befinden sich auf dem ersten freien Endpunkt und werden von dort aus hochgezählt. (Max. 65536 Endpunkte pro Gerät)

c.) Die Endpunkte 1-9 werden willkürlich gewählt, da die Anzahl der Endpunkte von der Bridge-Implementierung abhängt.

4.) Endpunkt 10 (Licht):

a.) Hat den gleichen Descriptor Cluster wie die Bridge und stellt seine DeviceTypes als Light, Bridged Device dar, um dem Benutzer direkt anzuzeigen, welche Art von Geräten übergeben wird.

b.) Der Bridged Device Basic Cluster wird verwendet, um anderen Matter-Geräten Informationen über die Funktionalität oder die verwendete Technologie zu geben (Herstellername, Modell oder vom Benutzer zugewiesener Name). In diesem Fall zeigt das NodeLable-Attribut die Leuchte als “Mirror Light” an, einen vom Benutzer vergebenen Namen.

c.) Der verbleibende Cluster implementiert die Funktionen des Geräts wie OnOff-Cluster zum Ein- und Ausschalten des Geräts.

5.) Endpunkt 11 (Wäschereimaschine):

a.) Der Deskriptor Cluster zeigt das Gerät als Laundry Machine, Bridged Device.

b.) Bridged Device Basic Cluster zeigt das Gerät mit einem Label an: “Hersteller X Maschine”.

c.) Der verbleibende Cluster implementiert die Funktionen des Geräts wie OnOff-Cluster zum Ein- und Ausschalten des Geräts.

6.) Endpunkt 12 (Hygrometer):

a.) Der Descriptor Cluster zeigt das Gerät als Hygrometer, Bridged Device.

b.) Der Cluster “Bridged Device Basic” zeigt die Bezeichnung: “Eingangs-Hygrometer”.

c.) Das Besondere an diesem Gerät ist, dass es batteriebetrieben ist und solche Geräte zwei weitere Cluster implementieren müssen, um den Benutzer über die aktuelle Energiesituation zu informieren:

i.) Der Cluster “Power Source Configuration” informiert darüber, an welchem Endpunkt die Energiequelle zu finden ist.

ii.) Power Source Cluster informiert über den Energiestand, wie die Art der Stromquelle (z.B. austauschbare Batterie), etc.).

d.) Der verbleibende Cluster implementiert die Funktionen des Geräts wie den OnOff-Cluster zum Ein- und Ausschalten des Geräts.

7.) Nachdem der Matter-Beauftragte alle exponierten Geräte kennengelernt hat, sollten sie einfach zu identifizieren und in die aktuelle Matter-Fabric zu integrieren sein.

Zusammenfassend sollte die Bridge es dem Benutzer einfach machen, bestehende Geräte innerhalb des Matter-Ökosystems zu nutzen.

Hands-on: ESP32 Matter Bridge

Jetzt verlassen wir unser Konzeptbeispiel und gehen über zu unserem praktischen Beispiel. Wir werden die ESP32-Hardware und ein Bridge-Beispiel aus dem Matter-Repository verwenden. Um das Beispiel einzurichten, folgen Sie diesen Schritten:

# 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 enviromental 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/bridge-app/esp32

idf.py set-target esp32

idf.py build

idf.py -p /dev/ttyUSB0 flash monitor

Jetzt haben wir die Matter Bridge mit der Firmware geflasht. Um fortzufahren, müssen wir das Gerät als existierenden Knoten zu unserer Fabric hinzufügen, wie wir es in Teil 2 mit dem Chip-Tool gemacht haben.

./chip-tool pairing ble-wifi 12344323 "IoT Testing" NotTheRealPassword 20202021 3840

Nun ist die Bridge mit unserem Chip-Tool verbunden und wir können die verschiedenen Cluster untersuchen, über die wir bereits gesprochen haben.

Aus der README wissen wir, dass die folgenden (virtuellen) Geräte verfügbar sind:

  • Licht1 am Endpunkt 3
  • Licht2 am Endpunkt 7
  • Licht3 am Endpunkt 5
  • Licht4 am Endpunkt 6

Werfen wir einen Blick auf den Bridge (Node: 12344323) Descriptor Cluster am Endpunkt 0:

./chip-tool descriptor read device-list 12344323 0 

Die gekürzte Ausgabe des chip-tool:

[...]
[1657290058.991092][57239:57244] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_0000 DataVersion: 3416323786
[1657290058.991108][57239:57244] CHIP:TOO:   device list: 2 entries
[1657290058.991114][57239:57244] CHIP:TOO:     [1]: {
[1657290058.991117][57239:57244] CHIP:TOO:       Type: 22
[1657290058.991121][57239:57244] CHIP:TOO:       Revision: 1
[1657290058.991125][57239:57244] CHIP:TOO:      }
[1657290058.991129][57239:57244] CHIP:TOO:     [2]: {
[1657290058.991132][57239:57244] CHIP:TOO:       Type: 14
[1657290058.991134][57239:57244] CHIP:TOO:       Revision: 1
[1657290058.991137][57239:57244] CHIP:TOO:      }
[...]

Wenn wir einen Blick auf die matter-device.xml werfen, können wir sehen, dass:

  • Typ 22 (0x0016) ist ein “Matter Root Node”
  • Typ 14 (0x000e) ist eine “Matter Bridge”.

Werfen wir einen Blick auf die konfigurierten Endpunkte in parts-list:

./chip-tool descriptor read parts-list 12344323 0

Die gekürzte Ausgabe des chip-tool:

[...]
[1657700077.871107][84013:84021] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_001D Attribute 0x0000_0003 DataVersion: 3229110934
[1657700077.871128][84013:84021] CHIP:TOO:   parts list: 5 entries
[1657700077.871134][84013:84021] CHIP:TOO:     [1]: 1
[1657700077.871138][84013:84021] CHIP:TOO:     [2]: 3
[1657700077.871142][84013:84021] CHIP:TOO:     [3]: 6
[1657700077.871146][84013:84021] CHIP:TOO:     [4]: 5
[1657700077.871150][84013:84021] CHIP:TOO:     [5]: 7
[...]

Wir wissen, dass wir die Endpunkte 1,3,6,5,7 abfragen müssen.

Hinweis zur Endpunktreihenfolge:

Sie haben vielleicht bemerkt, dass die Endpunkte der Lichter in einer seltsamen Reihenfolge angeordnet sind. Der Grund dafür ist, dass im Quellcode dynamisch Lichter gelöscht und hinzugefügt werden, um einen realistischeren Zustand auf der Brücke zu imitieren, bei dem alte Geräte entfernt und neue hinzugefügt werden.

Bitte sehen Sie sich den Quellcode in der main.cpp Zeile 337 wie folgt an.

Lasst uns den Endpunkt 1 für die Geräteliste abfragen:

./chip-tool descriptor read device-list 12344323 1

Die gekürzte Ausgabe des chip-tool:

[1657700147.909334][86373:86378] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_001D Attribute 0x0000_0000 DataVersion: 176756417
[1657700147.909354][86373:86378] CHIP:TOO:   device list: 1 entries
[1657700147.909370][86373:86378] CHIP:TOO:     [1]: {
[1657700147.909377][86373:86378] CHIP:TOO:       Type: 14
[1657700147.909381][86373:86378] CHIP:TOO:       Revision: 1
[1657700147.909385][86373:86378] CHIP:TOO:      }

Typ 14 (0x000e) ist eine “Matter Bridge”. Endpunkt 1 enthält die Anwendungscluster für die Matter Bridge selbst. Dies könnte von OnOff Cluster bis hin zu verschiedenen anderen für die Bridge implementierten Funktionen reichen.

Überprüfen wir die anderen Endpunkte, die die bridged Geräte sind:

./chip-tool descriptor read device-list 12344323 3
[...]
[1657700367.445234][91280:91289] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_001D Attribute 0x0000_0000 DataVersion: 553770957
[1657700367.445252][91280:91289] CHIP:TOO:   device list: 1 entries
[1657700367.445267][91280:91289] CHIP:TOO:     [1]: {
[1657700367.445276][91280:91289] CHIP:TOO:       Type: 257
[1657700367.445282][91280:91289] CHIP:TOO:       Revision: 1
[1657700367.445287][91280:91289] CHIP:TOO:      }
[...]

Typ 257 (0x0101) ist ein “Matter Dimmable Light”.

Die Endpunkte 5, 6 und 7 geben die gleichen Typen zurück:

./chip-tool descriptor read device-list 12344323 5
[...]
[1657700785.126684][99635:99640] CHIP:TOO: Endpoint: 5 Cluster: 0x0000_001D Attribute 0x0000_0000 DataVersion: 3152016014
[1657700785.126706][99635:99640] CHIP:TOO:   device list: 2 entries
[1657700785.126717][99635:99640] CHIP:TOO:     [1]: {
[1657700785.126724][99635:99640] CHIP:TOO:       Type: 256
[1657700785.126728][99635:99640] CHIP:TOO:       Revision: 1
[1657700785.126732][99635:99640] CHIP:TOO:      }
[1657700785.126738][99635:99640] CHIP:TOO:     [2]: {
[1657700785.126741][99635:99640] CHIP:TOO:       Type: 19
[1657700785.126745][99635:99640] CHIP:TOO:       Revision: 1
[1657700785.126748][99635:99640] CHIP:TOO:      }
[...]

Typ 257 (0x0100) ist ein “Matter On/Off Light” und Typ 19 (0x0013) ist ein “Matter Bridged Device”.

Überprüfen wir die anderen Cluster, um zu sehen, welche weiteren Informationen wir von der Brücke erhalten können.

Nutzen wir node-lable, um die Namen der Leuchten nachzuschlagen:

./chip-tool bridgeddevicebasic read node-label 12344323 5
[...]
[1657702930.584221][153146:153151] CHIP:TOO: Endpoint: 5 Cluster: 0x0000_0039 Attribute 0x0000_0005 DataVersion: 2347267613
[1657702930.584234][153146:153151] CHIP:TOO:   NodeLabel: Light 3
[...]

./chip-tool bridgeddevicebasic read node-label 12344323 6
[...]
[1657703305.955855][160146:160151] CHIP:TOO: Endpoint: 6 Cluster: 0x0000_0039 Attribute 0x0000_0005 DataVersion: 1372647712
[1657703305.955867][160146:160151] CHIP:TOO:   NodeLabel: Light 4
[...]

./chip-tool bridgeddevicebasic read node-label 12344323 7
[...]
[1657703331.673510][161432:161437] CHIP:TOO: Endpoint: 7 Cluster: 0x0000_0039 Attribute 0x0000_0005 DataVersion: 2733600498
[1657703331.673521][161432:161437] CHIP:TOO:   NodeLabel: Light 2
[...]

./chip-tool bridgeddevicebasic read node-label 12344323 2
[...]
[1657703349.844390][162619:162624] CHIP:TOO: Response Failure: IM Error 0x000005C3: General error: 0xc3 (UNSUPPORTED_CLUSTER)
[...]

./chip-tool bridgeddevicebasic read reachable 12344323 5  
[...]
[1657703677.946278][173494:173499] CHIP:TOO: Endpoint: 5 Cluster: 0x0000_0039 Attribute 0x0000_0011 DataVersion: 2347267613
[1657703677.946363][173494:173499] CHIP:TOO:   Reachable: TRUE
[...]

Leider sind die logischen Informationen nicht verfügbar, da der Cluster Bridged Action für das ESP32-Beispiel nicht implementiert ist.

Verwenden Sie den OnOff-Cluster auf die gleiche Weise wie in Teil 2 unserer Serie beschrieben, um die (virtuellen) Lichter ein- und auszuschalten.

# ./chip-tool onoff toggle destination-id endpoint-id
./chip-tool onoff toggle 12344323 3

Dies ist der Abschluss unserer Matter-Serie, wir arbeiteten von den Konzepten, über Hands-on mit Matter Gerät (Lichter und Schalter) zu einer Brücke zu verwenden Legacy-Gerät in unserem Matter Fabric.

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.