Verbinden von Geräten über ein transparentes IoT Edge-Gateway
Ein IoT Edge-Gerät kann als Gateway fungieren, das eine Verbindung zwischen anderen Geräten in einem lokalen Netzwerk und Ihrer IoT Central-Anwendung bereitstellt. Sie verwenden ein Gateway, wenn das Gerät nicht direkt auf Ihre IoT Central-Anwendung zugreifen kann.
IoT Edge unterstützt die Gatewaymuster transparent und Übersetzung. In diesem Artikel wird zusammengefasst, wie das transparente Gatewaymuster implementiert wird. Bei diesem Muster übergibt das Gateway Nachrichten vom untergeordneten Gerät an den IoT Hub-Endpunkt in Ihrer IoT Central-Anwendung. Das Gateway bearbeitet die Nachrichten nicht, während sie weitergeleitet werden. In IoT Central wird jedes Downstreamgerät als dem Gatewaygerät untergeordnet angezeigt:
Wichtig
Dieser Artikel enthält Schritte zum Verbinden eines Geräts mithilfe einer Shared Access Signature, was auch als symmetrische Schlüsselauthentifizierung bezeichnet wird. Diese Authentifizierungsmethode eignet sich für Tests und Auswertungen, aber die Authentifizierung eines Geräts mit X.509-Zertifikaten ist ein sichererer Ansatz. Weitere Informationen finden Sie unter Bewährte Methoden für die Sicherheit von IoT-Lösungen > Verbindungssicherheit.
Aus Gründen der Einfachheit werden in diesem Artikel virtuelle Computer zum Hosten der Downstream- und Gatewaygeräte verwendet. In einem realen Szenario werden das untergeordnete Gerät und das Gateway auf physischen Geräten in Ihrem lokalen Netzwerk ausgeführt.
In diesem Artikel wird gezeigt, wie Sie das Szenario mithilfe der IoT Edge-Runtime 1.4 implementieren können.
Voraussetzungen
Um die Schritte dieses Artikels abzuschließen, benötigen Sie Folgendes:
Ein aktives Azure-Abonnement. Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Eine IoT Central-Anwendung, die mit der Vorlage Benutzerdefinierte Anwendung erstellt wurde. Weitere Informationen finden Sie unter Erstellen einer IoT Central-Anwendung.
Laden Sie die folgenden Dateien auf Ihren Computer herunter, um die Schritte in diesem Artikel ausführen zu können:
- Thermostat-Gerätemodell (thermostat-1.json): Diese Datei ist das Gerätemodell für die untergeordneten Geräte.
- Transparentes Gatewaymanifest (EdgeTransparentGatewayManifest.json): Diese Datei ist das IoT Edge-Bereitstellungsmanifest für das Gatewaymanifest.
Importieren des Bereitstellungsmanifests
Jedes IoT Edge-Gerät benötigt ein Bereitstellungsmanifest zum Konfigurieren der IoT Edge-Runtime. So importieren Sie ein Bereitstellungsmanifest für das transparente IoT Edge-Gateway:
Navigieren Sie zu Edge-Manifeste.
Wählen Sie + Neu aus, geben Sie einen Namen für das Bereitstellungsmanifest ein, z. B. Transparentes Gateway, und laden Sie die zuvor heruntergeladene Datei EdgeTransparentGatewayManifest.json hoch.
Wählen Sie Erstellen aus, um das Bereitstellungsmanifest in Ihrer Anwendung zu speichern.
Hinzufügen von Gerätevorlagen
Sowohl für das untergeordnete Gerät als auch das Gatewaygerät können Gerätevorlagen in IoT Central verwendet werden. Mit IoT Central können Sie die Beziehung zwischen den untergeordneten Geräten und dem Gateway modellieren, damit Sie diese nach dem Herstellen der Verbindung anzeigen und verwalten können. Eine Gerätevorlage ist nicht erforderlich, um ein untergeordnetes Gerät an ein Gateway anzufügen.
Erstellen Sie eine Standardgerätevorlage, die die Funktionen Ihres Geräts modelliert, um eine Gerätevorlage für ein untergeordnetes Gerät erstellen zu können. Für das Beispiel in diesem Artikel wird das Thermostat-Gerätemodell verwendet, das Sie heruntergeladen haben.
So erstellen Sie eine Gerätevorlage für ein untergeordnetes Gerät:
Erstellen Sie eine Gerätevorlage, und wählen Sie IoT-Gerät als Vorlagentyp aus.
Geben Sie auf der Seite Anpassen des Assistenten einen Namen wie Thermostat für die Gerätevorlage ein.
Klicken Sie nach dem Erstellen der Gerätevorlage auf Modell importieren. Wählen Sie ein Modell wie die zuvor heruntergeladene Datei thermostat-1.json aus.
Wählen Sie Ansichten aus, und klicken Sie dann auf Standardansichten generieren, um einige Standardansichten für den Thermostat zu generieren.
Veröffentlichen der Gerätevorlage
So erstellen Sie eine Gerätevorlage für ein transparentes IoT Edge-Gatewaygerät:
Erstellen Sie eine Gerätevorlage, und wählen Sie Azure IoT Edge als Vorlagentyp aus.
Geben Sie auf der Seite Anpassen des Assistenten einen Namen wie Edge Gateway für die Gerätevorlage ein.
Aktivieren Sie auf der Seite Anpassen des Assistenten das Kontrollkästchen Dies ist ein Gatewaygerät.
Wählen Sie auf der Seite Überprüfen die Option Erstellen aus.
Wählen Sie auf der Seite Modell erstellen die Option Benutzerdefiniertes Modell aus.
Fügen Sie unter Beziehungen einen Eintrag zur Vorlage für das untergeordnete Gerät hinzu.
Im folgenden Screenshot wird die Seite Beziehungen für ein IoT Edge-Gatewaygerät mit untergeordneten Geräten angezeigt, die die Thermostat-Gerätevorlage verwenden:
Auf dem obigen Screenshot sind für die IoT Edge-Gatewaygerätvorlage keine Module definiert. Für ein transparentes Gateway sind keine Module erforderlich, da die IoT Edge-Runtime Nachrichten von den untergeordneten Geräten direkt an IoT Central weiterleitet. Wenn das Gateway selbst Telemetriedaten senden, Eigenschaften synchronisieren oder Befehle verarbeiten muss, können Sie diese Funktionen in der Stammkomponente oder in einem Modul definieren.
Fügen Sie die erforderlichen Cloudeigenschaften und Ansichten hinzu, bevor Sie das Gateway und die Vorlagen für untergeordnete Geräte veröffentlichen.
Hinzufügen der Geräte
Wenn Sie die Geräte zu Ihrer IoT Central-Anwendung hinzufügen, können Sie die Beziehung zwischen den untergeordneten Geräten und dem transparenten Gateway definieren.
So fügen Sie die Geräte hinzu:
Navigieren Sie in Ihrer IoT Central-Anwendung zur Seite „Geräte“.
Fügen Sie eine Instanz des IoT Edge-Geräts für das transparente Gateway hinzu. Wenn Sie das Gerät hinzufügen, müssen Sie das Bereitstellungsmanifest Transparentes Gateway auswählen. In diesem Artikel lautet die Geräte-ID für das Gateway
edgegateway
.Fügen Sie eine oder mehrere Instanzen des untergeordneten Geräts hinzu. In diesem Artikel handelt es sich bei den untergeordneten Geräten um Thermostate mit den IDs
thermostat1
undthermostat2
.Wählen Sie in der Geräteliste jedes einzelne untergeordnete Gerät aus, und klicken Sie auf An Gateway anfügen.
Der folgende Screenshot veranschaulicht, dass Sie die Liste der Geräte, die an ein Gateway angefügt sind, auf der Seite Downstream Devices (Untergeordnete Geräte) anzeigen können:
Bei einem transparenten Gateway stellen die untergeordneten Geräte eine Verbindung mit dem Gateway selbst und nicht mit einem benutzerdefinierten Modul her, das vom Gateway gehostet wird.
Bevor Sie die Geräte bereitstellen, benötigen Sie Folgendes:
- ID-Bereich der IoT Central-Anwendung
- Werte für die Geräte-ID für das Gateway und die untergeordneten Geräte
- Werte für den Primärschlüssel für das Gateway und die untergeordneten Geräte
Navigieren Sie zu jedem Gerät in der Geräteliste, und klicken Sie auf Verbinden, um diese Werte zu ermitteln. Notieren Sie sich diese Werte, bevor Sie fortfahren.
Tipp
Sie können die Geräte verbinden und Beziehungen einrichten, ohne zuvor Gerätevorlagen für die Geräte zu erstellen. Sie können ein nicht zugewiesenes untergeordnetes Gerät an ein nicht zugewiesenes Gatewaygerät anfügen.
Bereitstellen des Gateways und der Geräte
Die folgenden Schritte veranschaulichen das Bereitstellen des Gateways und der nachgeschalteten Geräte auf virtuellen Azure-Computern, damit Sie dieses Szenario testen können.
Tipp
Informationen zum Bereitstellen der IoT Edge-Runtime auf einem physischen Gerät finden Sie in der IoT Edge-Dokumentation unter Erstellen eines IoT Edge-Geräts.
Klicken Sie auf die folgende Schaltfläche, um zwei virtuelle Linux-Computer bereitzustellen und somit das Szenario mit dem transparenten Gateway testen zu können. Auf einem virtuellen Computer ist die IoT Edge-Runtime 1.4 installiert. Sie ist das transparente IoT Edge-Gateway. Der andere virtuelle Computer ist ein untergeordnetes Gerät, auf dem Sie Code ausführen, um simulierte Telemetriedaten des Thermostats zu senden:
Stellen Sie sicher, dass nach dem Bereitstellen und Ausführen der beiden virtuellen Computer das IoT Edge-Gatewaygerät auf der edgegateway
-VM ausgeführt wird:
Navigieren Sie in Ihrer IoT Central-Anwendung zur Seite Geräte. Wenn das IoT Edge-Gatewaygerät eine Verbindung mit IoT Central hergestellt hat, lautet der Status Bereitgestellt.
Öffnen Sie das IoT Edge-Gatewaygerät, und überprüfen Sie den Status des Moduls auf der Seite Module. Wenn die IoT Edge-Runtime erfolgreich gestartet wurde, lautet der Status der beiden Module $edgeAgent und $edgeHub dann Wird ausgeführt:
Tipp
Sie müssen möglichweise mehrere Minuten warten, bis der virtuelle Computer gestartet und das Gerät in Ihrer IoT Central-Anwendung bereitgestellt wurde.
Konfigurieren des Gateways
Damit Ihr IoT Edge-Gerät als transparentes Gateway fungieren kann, benötigt es einige Zertifikate, um den untergeordneten Geräten seine Identität nachzuweisen. In diesem Artikel werden Demozertifikate verwendet. Verwenden Sie in einer Produktionsumgebung Zertifikate von Ihrer Zertifizierungsstelle.
So können Sie die Demozertifikate generieren und auf dem Gatewaygerät installieren:
Verwenden Sie Secure Shell (SSH), um eine Verbindung mit Ihrem virtuellen Computer für das Gatewaygerät herzustellen und sich bei diesem anzumelden.
Führen Sie die folgenden Befehle aus, um das IoT Edge-Repository zu klonen und die Demozertifikate zu generieren:
# Clone the repo cd ~ git clone https://github.com/Azure/iotedge.git # Generate the demo certificates mkdir certs cd certs cp ~/iotedge/tools/CACertificates/*.cnf . cp ~/iotedge/tools/CACertificates/certGen.sh . ./certGen.sh create_root_and_intermediate ./certGen.sh create_edge_device_ca_certificate "mycacert"
Nachdem Sie die obigen Befehle ausgeführt haben, können Sie in den nächsten Schritten die folgenden Dateien verwenden:
- ~/certs/certs/azure-iot-test-only.root.ca.cert.pem – Dies ist das Zertifikat der Stammzertifizierungsstelle, das zum Erstellen aller anderen Demozertifikate für das Testen eines IoT Edge-Szenarios verwendet wird.
- ~/certs/certs/iot-edge-device-mycacert-full-chain.cert.pem: ein Zertifizierungsstellenzertifikat des Geräts, auf das in der IoT Edge-Konfigurationsdatei verwiesen wird. In einem Gatewayszenario bestätigt das IoT Edge-Gerät den untergeordneten Geräten seine Identität mit diesem Zertifikat der Zertifizierungsstelle.
- ~/certs/private/iot-edge-device-mycacert.key.pem – Dies ist der private Schlüssel, der dem Zertifikat der Gerätezertifizierungsstelle zugeordnet ist.
Weitere Informationen zu diesen Demozertifikaten finden Sie unter Erstellen von Demozertifikaten zum Testen der Features von IoT Edge-Geräten.
Öffnen Sie die Datei config.toml in einem Text-Editor. Beispiel:
sudo nano /etc/aziot/config.toml
Suchen Sie in der Konfigurationsdatei nach den folgenden Einstellungen. Fügen Sie die Zertifikatseinstellungen wie folgt hinzu:
trust_bundle_cert = "file:///home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem" [edge_ca] cert = "file:///home/AzureUser/certs/certs/iot-edge-device-ca-mycacert-full-chain.cert.pem" pk = "file:///home/AzureUser/certs/private/iot-edge-device-ca-mycacert.key.pem"
Im vorstehenden Beispiel wird davon ausgegangen, dass Sie als AzureUser angemeldet sind und ein Zertifikat der Gerätezertifizierungsstelle namens „mycacert“ erstellt haben.
Speichern Sie die Änderungen, und starten Sie die IoT Edge-Runtime neu:
sudo iotedge config apply
Wenn die IoT Edge-Runtime nach Ihren Änderungen erfolgreich gestartet wird, wird der Status der Module $edgeAgent und $edgeHub für Ihr Gatewaygerät in IoT Central auf der Seite Module in Wird ausgeführt geändert.
Wenn die Runtime nicht gestartet wird, überprüfen Sie die in der IoT Edge-Konfigurationsdatei vorgenommenen Änderungen, und lesen Sie den Artikel Behandeln von Problemen bei Ihrem IoT Edge-Gerät.
Ihr transparentes Gateway ist nun konfiguriert und kann Telemetriedaten von untergeordneten Geräten weiterleiten.
Bereitstellen eines untergeordneten Geräts
IoT Central nutzt den Device Provisioning Service-Dienst (DPS), um Geräte in IoT Central bereitstellen zu können. Derzeit kann IoT Edge DPS nicht verwenden, um ein untergeordnetes Gerät in Ihrer IoT Central-Anwendung bereitzustellen. In den folgenden Schritten wird veranschaulicht, wie Sie das thermostat1
-Gerät manuell bereitstellen können. In Ihrer Umgebung muss Python installiert sein, und Sie müssen mit dem Internet verbunden sein, um diese Schritte ausführen zu können. Prüfen Sie das Azure IoT Python SDK auf die aktuellen Python-Versionsanforderungen. In Azure Cloud Shell ist Python vorinstalliert:
Führen Sie den folgenden Befehl aus, um das
azure.iot.device
-Modul zu installieren:pip install azure.iot.device
Führen Sie den folgenden Befehl aus, um das Python-Skript für die Gerätebereitstellung herunterzuladen:
wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/provision_device.py
Führen Sie die folgenden Befehle aus, um das untergeordnete
thermostat1
-Gerät in Ihrer IoT Central-Anwendung bereitzustellen. Ersetzen Sie dabei{your application id scope}
(den ID-Bereich Ihrer Anwendung) und{your device primary key}
(den Primärschlüssel Ihres Geräts). Sie haben sich diese Werte notiert, als Sie die Geräte zu Ihrer IoT Central-Anwendung hinzugefügt haben:export IOTHUB_DEVICE_DPS_DEVICE_ID=thermostat1 export IOTHUB_DEVICE_DPS_ID_SCOPE={your application id scope} export IOTHUB_DEVICE_DPS_DEVICE_KEY={your device primary key} python provision_device.py
Überprüfen Sie in Ihrer IoT Central-Anwendung, ob der Gerätestatus für das thermostat1
-Gerät jetzt Bereitgestellt lautet.
Konfigurieren eines nachgeschalteten Geräts
Im vorherigen Abschnitt haben Sie den virtuellen Computer edgegateway
mit den Demozertifikaten konfiguriert, damit dieser als Gateway ausgeführt werden kann. Der virtuelle Computer leafdevice
ermöglicht Ihnen nun das Installieren eines Thermostatsimulators, der das Gateway zum Herstellen einer Verbindung mit IoT Central verwendet.
Der virtuelle Computer leafdevice
benötigt eine Kopie des Zertifikats der Stammzertifizierungsstelle, das Sie auf der VM edgegateway
erstellt haben. Kopieren Sie die Datei /home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem von der VM edgegateway
in Ihr Basisverzeichnis auf der VM leafdevice
. Sie können den Befehl scp ausführen, um Dateien zwischen virtuellen Linux-Computern zu kopieren. Beispielsweise auf dem leafdevice
-Computer:
scp AzureUser@edgegateway:/home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem .
Informationen zum Überprüfen der Verbindung des untergeordneten Geräts mit dem Gateway finden Sie unter Testen der Gatewayverbindung.
So führen Sie den Thermostatsimulator auf der leafdevice
-VM aus:
Verwenden Sie SSH, um eine Verbindung mit Ihrem virtuellen
leafdevice
-Computer herzustellen und sich darauf anzumelden.Laden Sie das Python-Beispiel in Ihr Basisverzeichnis herunter:
cd ~ wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/simple_thermostat.py
Installieren Sie das Python-Modul für das Azure IoT-Gerät:
sudo apt update sudo apt install python3-pip pip3 install azure.iot.device
Legen Sie die Umgebungsvariablen zum Konfigurieren des Beispiels fest. Ersetzen Sie
{your device shared key}
durch den primären Schlüssel vonthermostat1
, den Sie sich zuvor notiert haben. Für diese Variablen wird angenommen, dass der Name der Gateway-VMedgegateway
lautet undthermostat1
die ID des Thermostatgeräts ist:export IOTHUB_DEVICE_SECURITY_TYPE=connectionString export IOTHUB_DEVICE_CONNECTION_STRING="HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key}" export IOTEDGE_ROOT_CA_CERT_PATH=~/azure-iot-test-only.root.ca.cert.pem
Beachten Sie, dass die Verbindungszeichenfolge den Namen des Gatewaygeräts und nicht den Name eines IoT-Hubs verwendet.
Verwenden Sie zum Ausführen des Codes den folgenden Befehl:
python3 simple_thermostat.py
Die Ausgabe dieses Befehls sieht wie folgt aus:
Connecting using Connection String HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key} Listening for command requests and property updates Press Q to quit Sending telemetry for temperature Sent message Sent message Sent message ...
Tipp
Falls ein Fehler angezeigt wird, wenn das nachgeschaltete Gerät eine Verbindung herzustellen versucht. Versuchen Sie, die Schritte zur Gerätebereitstellung erneut auszuführen.
Navigieren Sie zur Seite Übersicht für das Gerät thermostat1, um die Telemetriedaten in IoT Central anzuzeigen:
Auf der Seite Info können Sie vom untergeordneten Gerät gesendete Eigenschaftswerte anzeigen und auf der Seite Befehl Befehle für das untergeordnete Gerät aufrufen.