Dieser Blogbeitrag richtet sich an Entwickler und andere Personen mit technischem Hintergrund und Interesse an einem auf Sicherheit ausgerichteten Überblick über Matter.
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:
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.
sudo apt-get install git gcc g++ python pkg-config libssl-dev libdbus-1-dev \ libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev \ python3-pip unzip libgirepository1.0-dev libcairo2-dev git clone --recurse-submodules git@github.com:project-chip/connectedhomeip.git cd connectedhomeip/ source scripts/bootstrap.sh source scripts/activate.sh
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
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.
[1649943820.702390][30597:30597] CHIP:TOO: Missing cluster name Usage: out/chip-tool/chip-tool cluster_name command_name [param1 param2 ...] +-------------------------------------------------------------------------------------+ | Clusters: | +-------------------------------------------------------------------------------------+ | * accesscontrol | | * accountlogin | | * administratorcommissioning | | * alarms | | * any | | * appliancecontrol | | * applianceeventsandalert | | * applianceidentification | | * appliancestatistics | | * applicationbasic | | * applicationlauncher | | * audiooutput | | * ballastconfiguration | | * barriercontrol | | * basic | | * binaryinputbasic | | * binding | | * booleanstate | | * bridgedactions | | * bridgeddevicebasic | | * bromateconcentrationmeasurement | | * bromodichloromethaneconcentrationmeasurement | | * bromoformconcentrationmeasurement | | * carbondioxideconcentrationmeasurement | | * carbonmonoxideconcentrationmeasurement | | * channel | | * chloraminesconcentrationmeasurement | | * chlorineconcentrationmeasurement | | * chlorodibromomethaneconcentrationmeasurement | | * chloroformconcentrationmeasurement | | * colorcontrol | | * contentlauncher | | * copperconcentrationmeasurement | | * dehumidificationcontrol | | * descriptor | | * devicetemperatureconfiguration | | * diagnosticlogs | | * discover | | * dissolvedoxygenconcentrationmeasurement | | * doorlock | | * electricalmeasurement | | * ethernetnetworkdiagnostics | | * ethyleneconcentrationmeasurement | | * ethyleneoxideconcentrationmeasurement | | * fancontrol | | * fecalcoliformandecoliconcentrationmeasurement | | * fixedlabel | | * flowmeasurement | | * fluorideconcentrationmeasurement | | * generalcommissioning | | * generaldiagnostics | | * groupkeymanagement | | * groupsettings | | * groups | | * haloaceticacidsconcentrationmeasurement | | * hydrogenconcentrationmeasurement | | * hydrogensulphideconcentrationmeasurement | | * iasace | | * iaswd | | * iaszone | | * identify | | * illuminancemeasurement | | * keypadinput | | * leadconcentrationmeasurement | | * levelcontrol | | * localizationconfiguration | | * lowpower | | * manganeseconcentrationmeasurement | | * mediainput | | * mediaplayback | | * messaging | | * meteridentification | | * modeselect | | * networkcommissioning | | * nitricoxideconcentrationmeasurement | | * nitrogendioxideconcentrationmeasurement | | * occupancysensing | | * onoff | | * onoffswitchconfiguration | | * operationalcredentials | | * otasoftwareupdateprovider | | * otasoftwareupdaterequestor | | * oxygenconcentrationmeasurement | | * ozoneconcentrationmeasurement | | * pairing | | * payload | | * pollcontrol | | * powerconfiguration | | * powerprofile | | * powersource | | * powersourceconfiguration | | * pressuremeasurement | | * proxyconfiguration | | * proxydiscovery | | * proxyvalid | | * pulsewidthmodulation | | * pumpconfigurationandcontrol | | * relativehumiditymeasurement | | * scenes | | * shadeconfiguration | | * sodiumconcentrationmeasurement | | * softwarediagnostics | | * subscriptions | | * sulfateconcentrationmeasurement | | * sulfurdioxideconcentrationmeasurement | | * switch | | * targetnavigator | | * temperaturemeasurement | | * testcluster | | * tests | | * thermostat | | * thermostatuserinterfaceconfiguration | | * threadnetworkdiagnostics | | * time | | * timeformatlocalization | | * timesynchronization | | * totalcoliformbacteriaconcentrationmeasurement | | * totaltrihalomethanesconcentrationmeasurement | | * turbidityconcentrationmeasurement | | * unitlocalization | | * userlabel | | * wakeonlan | | * wifinetworkdiagnostics | | * windowcovering | | * interactive | +-------------------------------------------------------------------------------------+ [1649943820.702695][30597:30597] CHIP:TOO: Run command failure: ../../examples/chip-tool/commands/common/Commands.cpp:71: Error 0x0000002F
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
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
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.
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”)
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).
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.
[...] [1658309310.347076][132461:132461] CHIP:DL: ChipLinuxStorage::Init: Using KVS config file: /tmp/chip_kvs [1658309310.347179][132461:132461] CHIP:DL: ChipLinuxStorage::Init: Using KVS config file: /tmp/chip_factory.ini [1658309310.347204][132461:132461] CHIP:DL: ChipLinuxStorage::Init: Using KVS config file: /tmp/chip_config.ini [1658309310.347218][132461:132461] CHIP:DL: ChipLinuxStorage::Init: Using KVS config file: /tmp/chip_counters.ini [...]
Die Protokollausgabe mit Kommentaren (englisch) zur Erläuterung der einzelnen Abschnitte und einer Zusammenfassung am Ende der Auflistung.
[...] # Finding the BLE device and matching with the discriminator [1658309311.070510][132461:132464] CHIP:BLE: New device scanned: C8:C9:A3:C5:65:BA [1658309311.070546][132461:132464] CHIP:BLE: Device discriminator match. Attempting to connect. [...] [1658309312.208721][132461:132464] CHIP:DL: ConnectDevice complete [...] # Start of PASE and successfull session establishment to communicate securly via BLE [1658309313.022392][132461:132467] CHIP:SC: Sent spake2p msg1 [...] [1658309315.540046][132461:132467] CHIP:SC: Received spake2p msg2 [...] [1658309315.540344][132461:132467] CHIP:SC: Sent spake2p msg3 [...] [1658309315.672418][132461:132467] CHIP:SC: SecureSession[0x7fdfa0001a30]: Moving from state 'kEstablishing' --> 'kActive' [1658309315.672421][132461:132467] CHIP:IN: SecureSession[0x7fdfa0001a30]: Activated - Type:1 LSID:45062 [1658309315.672425][132461:132467] CHIP:IN: New secure session activated for device <FFFFFFFB00000000, 0>, LSID:45062 PSID:44671! [1658309315.672431][132461:132467] CHIP:CTL: Remote device completed SPAKE2+ handshake [1658309315.672434][132461:132467] CHIP:TOO: Pairing Success [1658309315.672437][132461:132467] CHIP:TOO: PASE establishment successful [1658309315.672440][132461:132467] CHIP:CTL: Commissioning stage next step: 'SecurePairing' -> 'ReadCommissioningInfo' [...] # ReadCommissioningInfo -> ArmFailSafe -> ConfigRegulatory: # Basic configuration for the commissioning [1658309315.856534][132461:132467] CHIP:CTL: Successfully finished commissioning step 'ReadCommissioningInfo' [1658309315.856550][132461:132467] CHIP:CTL: Commissioning stage next step: 'ReadCommissioningInfo' -> 'ArmFailSafe' [...] [1658309316.035322][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0001 [1658309316.035345][132461:132467] CHIP:CTL: Received ArmFailSafe response errorCode=0 [1658309316.035362][132461:132467] CHIP:CTL: Successfully finished commissioning step 'ArmFailSafe' [1658309316.035372][132461:132467] CHIP:CTL: Commissioning stage next step: 'ArmFailSafe' -> 'ConfigRegulatory' [...] [1658309316.213618][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0003 [1658309316.213637][132461:132467] CHIP:CTL: Received SetRegulatoryConfig response errorCode=0 [1658309316.213647][132461:132467] CHIP:CTL: Successfully finished commissioning step 'ConfigRegulatory' [1658309316.213652][132461:132467] CHIP:CTL: Commissioning stage next step: 'ConfigRegulatory' -> 'SendPAICertificateRequest' [...] # SendPAICertificateRequest -> SendDACCertificateRequest -> SendAttestationRequest -> AttestationVerification: # Perform the Device Attestation process to validate the authenticity of the device. [1658309316.405915][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0003 [1658309316.405925][132461:132467] CHIP:CTL: Received certificate chain from the device [1658309316.405934][132461:132467] CHIP:CTL: Successfully finished commissioning step 'SendPAICertificateRequest' [1658309316.405941][132461:132467] CHIP:CTL: Commissioning stage next step: 'SendPAICertificateRequest' -> 'SendDACCertificateRequest' [...] [1658309316.582616][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0003 [1658309316.582638][132461:132467] CHIP:CTL: Received certificate chain from the device [1658309316.582659][132461:132467] CHIP:CTL: Successfully finished commissioning step 'SendDACCertificateRequest' [1658309316.582675][132461:132467] CHIP:CTL: Commissioning stage next step: 'SendDACCertificateRequest' -> 'SendAttestationRequest' [...] [1658309317.296396][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0001 [1658309317.296407][132461:132467] CHIP:CTL: Received Attestation Information from the device [1658309317.296416][132461:132467] CHIP:CTL: Successfully finished commissioning step 'SendAttestationRequest' [1658309317.296434][132461:132467] CHIP:CTL: Commissioning stage next step: 'SendAttestationRequest' -> 'AttestationVerification' [...] [1658309317.296446][132461:132467] CHIP:CTL: Verifying attestation [1658309317.298651][132461:132467] CHIP:CTL: Successfully validated 'Attestation Information' command received from the device. [1658309317.298687][132461:132467] CHIP:CTL: Successfully finished commissioning step 'AttestationVerification' [1658309317.298693][132461:132467] CHIP:CTL: Commissioning stage next step: 'AttestationVerification' -> 'SendOpCertSigningRequest' [...] # SendOpCertSigningRequest -> ValidateCSR -> GenerateNOCChain -> SendTrustedRootCert -> SendNOC: # Configure cetifcicates to allow access to the device based on the added credentials 1658309318.959302][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0005 [1658309318.959313][132461:132467] CHIP:CTL: Received certificate signing request from the device [1658309318.959321][132461:132467] CHIP:CTL: Successfully finished commissioning step 'SendOpCertSigningRequest' [1658309318.959326][132461:132467] CHIP:CTL: Commissioning stage next step: 'SendOpCertSigningRequest' -> 'ValidateCSR' [...] [1658309318.959622][132461:132467] CHIP:CTL: Successfully finished commissioning step 'ValidateCSR' [1658309318.959629][132461:132467] CHIP:CTL: Commissioning stage next step: 'ValidateCSR' -> 'GenerateNOCChain' [1658309318.959633][132461:132467] CHIP:CTL: Performing next commissioning step 'GenerateNOCChain' [1658309318.959638][132461:132467] CHIP:CTL: Getting certificate chain for the device from the issuer [1658309318.959706][132461:132467] CHIP:CTL: Verifying Certificate Signing Request [1658309318.959917][132461:132467] CHIP:CTL: Generating NOC [1658309318.959996][132461:132467] CHIP:CTL: Providing certificate chain to the commissioner [1658309318.960003][132461:132467] CHIP:CTL: Received callback from the CA for NOC Chain generation. Status ../../examples/chip-tool/third_party/connectedhomeip/src/controller/ExampleOperationalCredentialsIssuer.cpp:261: Success [1658309318.960009][132461:132467] CHIP:CTL: Successfully finished commissioning step 'GenerateNOCChain' [1658309318.960057][132461:132467] CHIP:CTL: Performing next commissioning step 'SendTrustedRootCert' [1658309318.960062][132461:132467] CHIP:CTL: Sending root certificate to the device [...] [1658309319.183569][132461:132467] CHIP:DMG: Received Command Response Status for Endpoint=0 Cluster=0x0000_003E Command=0x0000_000B Status=0x0 [1658309319.183577][132461:132467] CHIP:CTL: Device confirmed that it has received the root certificate [1658309319.183584][132461:132467] CHIP:CTL: Successfully finished commissioning step 'SendTrustedRootCert' [1658309319.183589][132461:132467] CHIP:CTL: Commissioning stage next step: 'SendTrustedRootCert' -> 'SendNOC' [...] [1658309321.568391][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003E Command=0x0000_0008 [1658309321.568399][132461:132467] CHIP:CTL: Device returned status 0 on receiving the NOC [1658309321.568402][132461:132467] CHIP:CTL: Operational credentials provisioned on device 0x7fdfa0000b60 [1658309321.568406][132461:132467] CHIP:TOO: Secure Pairing Success [1658309321.568409][132461:132467] CHIP:TOO: CASE establishment successful [1658309321.568415][132461:132467] CHIP:CTL: Successfully finished commissioning step 'SendNOC' [1658309321.568418][132461:132467] CHIP:CTL: Commissioning stage next step: 'SendNOC' -> 'WiFiNetworkSetup' [...] # WiFiNetworkSetup -> WiFiNetworkEnable: # Setup the network access for the wifi [1658309321.703555][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0005 [1658309321.703577][132461:132467] CHIP:CTL: Received NetworkConfig response, networkingStatus=0 [1658309321.703584][132461:132467] CHIP:CTL: Successfully finished commissioning step 'WiFiNetworkSetup' [1658309321.703587][132461:132467] CHIP:CTL: Commissioning stage next step: 'WiFiNetworkSetup' -> 'WiFiNetworkEnable' [...] [1658309322.873512][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0031 Command=0x0000_0007 [1658309322.873524][132461:132467] CHIP:CTL: Received ConnectNetwork response, networkingStatus=0 [1658309322.873533][132461:132467] CHIP:CTL: Successfully finished commissioning step 'WiFiNetworkEnable' [1658309322.873538][132461:132467] CHIP:CTL: Commissioning stage next step: 'WiFiNetworkEnable' -> 'FindOperational' [...] # FindOperational: # Test access and configuration of the setup by connecting to the device via wifi instead of BLE (using CASE) [1658309322.873544][132461:132467] CHIP:CTL: Performing next commissioning step 'FindOperational' [...] # CASE is used to secure the access [1658309324.113041][132461:132467] CHIP:SC: Sent Sigma1 msg [1658309325.728491][132461:132467] CHIP:SC: Received Sigma2 msg [1658309325.729381][132461:132467] CHIP:SC: Sending Sigma3 [1658309325.729581][132461:132467] CHIP:SC: Sent Sigma3 msg [...] [1658309324.112694][132461:132467] CHIP:IN: SecureSession[0x7fdfa0012d60]: Allocated Type:2 LSID:45063 [1658309324.112703][132461:132467] CHIP:SC: Initiating session on local FabricIndex 1 from 0x000000000001B669 -> 0x0000000000BC5C01 [...] [1658309328.881997][132461:132467] CHIP:CTL: Successfully finished commissioning step 'FindOperational' [1658309328.882001][132461:132467] CHIP:CTL: Commissioning stage next step: 'FindOperational' -> 'SendComplete' [1658309328.882005][132461:132467] CHIP:CTL: Performing next commissioning step 'SendComplete' [...] # SendComplete -> Cleanup: # Close sessions and shutdown BLE, all future access will no be via wifi. [1658309329.130822][132461:132467] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_0030 Command=0x0000_0005 [1658309329.130830][132461:132467] CHIP:CTL: Received CommissioningComplete response, errorCode=0 [1658309329.130837][132461:132467] CHIP:CTL: Successfully finished commissioning step 'SendComplete' [1658309329.130841][132461:132467] CHIP:CTL: Commissioning stage next step: 'SendComplete' -> 'Cleanup' [...] [1658309329.131667][132461:132461] CHIP:DL: Inet Layer shutdown [1658309329.131671][132461:132461] CHIP:DL: BLE shutdown [1658309329.131938][132461:132461] CHIP:DL: System Layer shutdown [1658309329.131953][132461:132461] CHIP:IN: SecureSession[0x7fdfa0001a30]: Released - Type:1 LSID:45062 # End of pairing
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.
Ein kurzer Blick auf die Chip-Tool-Ausgabe, um zu erklären, was passiert.
[...] # Setup credentials for Fabric 1 [1658316828.616743][241737:241737] CHIP:CTL: System State Initialized... [1658316828.616757][241737:241737] CHIP:CTL: Stopping commissioning discovery over DNS-SD [1658316828.616764][241737:241737] CHIP:CTL: Setting attestation nonce to random value [1658316828.616774][241737:241737] CHIP:CTL: Setting CSR nonce to random value [...] [1658316828.616819][241737:241737] CHIP:CTL: Stopping commissioning discovery over DNS-SD [1658316828.616822][241737:241737] CHIP:CTL: Setting attestation nonce to random value [1658316828.616827][241737:241737] CHIP:CTL: Setting CSR nonce to random value [1658316828.617696][241737:241737] CHIP:CTL: Generating NOC [1658316828.618026][241737:241737] CHIP:FP: Validating NOC chain [1658316828.618437][241737:241737] CHIP:FP: NOC chain validation successful [1658316828.618481][241737:241737] CHIP:FP: Updated fabric at index: 0x1, Node ID: 0x000000000001B669 [...] [1658316828.620696][241737:241737] CHIP:CTL: Joined the fabric at index 1. Compressed fabric ID is: 0x0000000000000000 [...] # Identify the node and establish a session (CASE) (0xbc5c01 = 12344321) [1658316828.657279][241737:241742] CHIP:TOO: Sending command to node 0xbc5c01 [1658316828.657288][241737:241742] CHIP:CSM: FindOrEstablishSession: PeerId = 5981134D36BF4317:0000000000BC5C01 [1658316828.657292][241737:241742] CHIP:CSM: FindOrEstablishSession: No existing OperationalDeviceProxy instance found [...] [1658316828.857614][241737:241742] CHIP:CTL: Updating device address to UDP:[fe80::cac9:a3ff:fec5:65b8%wlp0s20f3]:5540 while in state 2 [1658316828.857631][241737:241742] CHIP:CTL: OperationalDeviceProxy[5981134D36BF4317:0000000000BC5C01]: State change 2 --> 3 [1658316828.857730][241737:241742] CHIP:IN: SecureSession[0x7f40e00018a0]: Allocated Type:2 LSID:22504 [1658316828.857756][241737:241742] CHIP:SC: Initiating session on local FabricIndex 1 from 0x000000000001B669 -> 0x0000000000BC5C01 [...] # CASE [1658316828.858806][241737:241742] CHIP:SC: Sent Sigma1 msg [...] [1658316829.938517][241737:241742] CHIP:SC: Received Sigma2 msg [...] [1658316829.939354][241737:241742] CHIP:SC: Sending Sigma3 [...] [1658316829.939545][241737:241742] CHIP:SC: Sent Sigma3 msg [...] [1658316832.001580][241737:241742] CHIP:IN: New secure session activated for device <0000000000BC5C01, 1>, LSID:22504 PSID:44672! [...] # Send the command toggle (0x2) to onoff cluster (0x6) to endpoint 1 # See also: https://github.com/project-chip/connectedhomeip/blob/master/src/app/zap-templates/zcl/data-model/chip/onoff-cluster.xml [1658316832.001604][241737:241742] CHIP:TOO: Sending cluster (0x00000006) command (0x00000002) on endpoint 1 [...] # Receiving the response from the device (all successful) [1658316832.204861][241737:241742] CHIP:DMG: InvokeResponseMessage = [1658316832.204865][241737:241742] CHIP:DMG: { [1658316832.204869][241737:241742] CHIP:DMG: suppressResponse = false, [1658316832.204873][241737:241742] CHIP:DMG: InvokeResponseIBs = [1658316832.204880][241737:241742] CHIP:DMG: [ [1658316832.204884][241737:241742] CHIP:DMG: InvokeResponseIB = [1658316832.204890][241737:241742] CHIP:DMG: { [1658316832.204895][241737:241742] CHIP:DMG: CommandStatusIB = [1658316832.204899][241737:241742] CHIP:DMG: { [1658316832.204903][241737:241742] CHIP:DMG: CommandPathIB = [1658316832.204908][241737:241742] CHIP:DMG: { [1658316832.204913][241737:241742] CHIP:DMG: EndpointId = 0x1, [1658316832.204918][241737:241742] CHIP:DMG: ClusterId = 0x6, [1658316832.204922][241737:241742] CHIP:DMG: CommandId = 0x2, [1658316832.204926][241737:241742] CHIP:DMG: }, [1658316832.204933][241737:241742] CHIP:DMG: [1658316832.204937][241737:241742] CHIP:DMG: StatusIB = [1658316832.204942][241737:241742] CHIP:DMG: { [1658316832.204947][241737:241742] CHIP:DMG: status = 0x00 (SUCCESS), [1658316832.204951][241737:241742] CHIP:DMG: }, [1658316832.204956][241737:241742] CHIP:DMG: [1658316832.204960][241737:241742] CHIP:DMG: }, [1658316832.204966][241737:241742] CHIP:DMG: [1658316832.204970][241737:241742] CHIP:DMG: }, [1658316832.204975][241737:241742] CHIP:DMG: [1658316832.204979][241737:241742] CHIP:DMG: ], [1658316832.204985][241737:241742] CHIP:DMG: [1658316832.204989][241737:241742] CHIP:DMG: InteractionModelRevision = 1 [1658316832.204992][241737:241742] CHIP:DMG: }, [1658316832.205009][241737:241742] CHIP:DMG: Received Command Response Status for Endpoint=1 Cluster=0x0000_0006 Command=0x0000_0002 Status=0x0
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 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.