Tutorial: Verwenden eines simulierten Geräts zum Testen der Konnektivität mit Ihrem IoT Hub

In diesem Tutorial verwenden Sie die Tools des Azure IoT Hub-Portals und die Azure CLI-Befehle, um die Gerätekonnektivität zu testen. In diesem Tutorial wird auch ein einfacher Gerätesimulator verwendet, den Sie auf Ihrem Desktopcomputer ausführen.

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

In diesem Tutorial lernen Sie Folgendes:

  • Überprüfen Ihrer Geräteauthentifizierung
  • Überprüfen der Gerät-zu-Cloud-Konnektivität
  • Überprüfen der Cloud-zu-Gerät-Konnektivität
  • Überprüfen der Synchronisierung von Gerätezwillingen

Voraussetzungen

  • In diesem Tutorial wird die Azure CLI zum Erstellen von Cloudressourcen verwendet. Es gibt zwei Möglichkeiten zum Ausführen von CLI-Befehlen:

    Hinweis

    In diesem Artikel wird die neueste Version der Azure IoT-Erweiterung namens azure-iot verwendet. Die Legacy-Version heißt azure-cli-iot-ext. Es sollte jedoch jeweils nur eine Version installiert sein. Sie können den Befehl az extension list verwenden, um die derzeit installierten Erweiterungen zu überprüfen.

    Verwenden Sie az extension remove --name azure-cli-iot-ext, um die Legacy-Version der Erweiterung zu entfernen.

    Verwenden Sie az extension add --name azure-iot, um die neue Version der Erweiterung hinzuzufügen.

    Verwenden Sie az extension list, um die installierten Erweiterungen anzuzeigen.

  • In der Beispielanwendung, die Sie in diesem Tutorial ausführen, wird Node.js verwendet. Sie benötigen mindestens Node.js v10.x.x auf Ihrem Entwicklungscomputer.

    • Sie können Node.js für mehrere Plattformen von nodejs.org herunterladen.

    • Mit dem folgenden Befehl können Sie die aktuelle Node.js-Version auf Ihrem Entwicklungscomputer überprüfen:

      node --version
      
  • Klonen Sie das Node.js-Beispielprojekt aus den Azure IoT-Beispielen für Node.js, oder laden Sie es herunter.

  • Stellen Sie sicher, dass der Port 8883 in Ihrer Firewall geöffnet ist. Für das Beispielgerät in diesem Tutorial wird das MQTT-Protokoll verwendet, das über Port 8883 kommuniziert. In einigen Netzwerkumgebungen von Unternehmen oder Bildungseinrichtungen ist dieser Port unter Umständen blockiert. Weitere Informationen und Problemumgehungen finden Sie unter Herstellen einer Verbindung mit IoT Hub (MQTT).

Erstellen eines IoT-Hubs

In diesem Abschnitt verwenden Sie die Azure CLI zum Erstellen eines IoT-Hubs und einer Ressourcengruppe. Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Ein IoT-Hub fungiert als zentraler Nachrichtenhub für die bidirektionale Kommunikation zwischen Ihrer IoT-Anwendung und den Geräten.

Wenn Sie bereits über einen IoT-Hub in Ihrem Azure-Abonnement verfügen, können Sie diesen Abschnitt überspringen.

So erstellen Sie einen IoT-Hub und eine Ressourcengruppe:

  1. Starten der CLI-App. Kopieren Sie zum Ausführen der CLI-Befehle im restlichen Teil dieses Artikels die Befehlssyntax, fügen Sie diese in Ihre CLI-App ein, bearbeiten Sie die Variablenwerte und drücken Sie Enter.

    • Wählen Sie bei Verwendung von Cloud Shell die Schaltfläche Ausprobieren in den CLI-Befehlen aus, um Cloud Shell in einem geteilten Browserfenster zu starten. Alternativ können Sie Cloud Shell auch in einem separaten Browsertab öffnen.
    • Gehen Sie wie folgt vor, wenn Sie die Azure CLI lokal verwenden: Starten Sie Ihre CLI-Konsolen-App, und melden Sie sich bei der Azure CLI an.
  2. Führen Sie az extension add aus, um die Erweiterung azure-iot zu installieren bzw. auf die aktuelle Version zu aktualisieren.

    az extension add --upgrade --name azure-iot
    
  3. Führen Sie in Ihrer CLI-App den Befehl az group create aus, um eine Ressourcengruppe zu erstellen. Mit dem folgenden Befehl wird eine Ressourcengruppe mit dem Namen MyResourceGroup am Standort eastus erstellt.

    Hinweis

    Optional können Sie einen anderen Standort festlegen. Führen Sie zum Anzeigen der verfügbaren Standorte az account list-locations aus. In dieser Schnellstartanleitung wird eastus verwendet, wie im Beispielbefehl gezeigt.

    az group create --name MyResourceGroup --location eastus
    
  4. Führen Sie den Befehl az iot hub create aus, um einen IoT-Hub zu erstellen. Es kann einige Minuten dauern, bis ein IoT-Hub erstellt wurde.

    YourIotHubName: Ersetzen Sie diesen Platzhalter und die umgebenden geschweiften Klammern im folgenden Befehl durch den Namen, den Sie für Ihren IoT-Hub ausgewählt haben. Der Name eines IoT-Hubs muss in Azure global eindeutig sein. Verwenden Sie im weiteren Verlauf dieser Schnellstartanleitung den Namen des IoT-Hubs für alle Vorkommen dieses Platzhalters.

    az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
    

Überprüfen der Geräteauthentifizierung

Ein Gerät muss für Ihren Hub authentifiziert werden, bevor es Daten mit dem Hub austauschen kann. Sie können das Tool IoT-Geräte im Abschnitt Geräteverwaltung des Portals verwenden, um Ihre Geräte zu verwalten und die genutzten Authentifizierungsschlüssel zu überprüfen. In diesem Abschnitt des Tutorials fügen Sie ein neues Testgerät hinzu, rufen den dazugehörigen Schlüssel ab und stellen sicher, dass das Testgerät eine Verbindung mit dem Hub herstellen kann. Später setzen Sie den Authentifizierungsschlüssel zurück, um zu verfolgen, was passiert, wenn für ein Gerät ein veralteter Schlüssel verwendet wird.

Registrieren eines Geräts

Ein Gerät muss bei Ihrer IoT Hub-Instanz registriert sein, um eine Verbindung herstellen zu können. In diesem Abschnitt wird die Azure-Befehlszeilenschnittstelle (CLI) verwendet, um eine Geräteidentität zu erstellen.

Wenn Sie bereits ein Gerät in Ihrem IoT-Hub registriert haben, können Sie diesen Abschnitt überspringen.

So erstellen Sie eine Geräteidentität:

  1. Führen Sie in der CLI-Shell den Befehl az iot hub device-identity create aus. Dieser Befehl erstellt die Geräteidentität.

    your_iot_hub_name. Ersetzen Sie diesen Platzhalter unten durch den Namen, den Sie für Ihren IoT-Hub ausgewählt haben.

    myDevice. Sie können diesen Namen für die Geräte-ID in diesem Artikel verwenden oder einen anderen Gerätenamen angeben.

    az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
    
  2. Führen Sie den Befehl az iot hub device-identity connection-string show aus.

    az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
    

    Die Ausgabe der Verbindungszeichenfolge hat folgendes Format:

    HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
    
  3. Speichern Sie die Verbindungszeichenfolge an einem sicheren Ort.

Hinweis

Lassen Sie Ihre CLI-App geöffnet. Sie werden ihn später benötigen.

Simulieren eines Testgeräts

Führen Sie zum Simulieren des Sendens von Telemetriedaten an Ihren IoT-Hub die Node.js-Anwendung für die Gerätesimulation aus, die Sie zuvor heruntergeladen haben.

  1. Navigieren Sie in einem Terminalfenster auf Ihrem Entwicklungscomputer zum Stammordner des heruntergeladenen Node.js-Beispielprojekts. Navigieren Sie anschließend zum Ordner iot-hub\Tutorials\ConnectivityTests.

  2. Führen Sie im Terminalfenster die folgenden Befehle aus, um die erforderlichen Bibliotheken zu installieren und die Anwendung zur Simulation eines Geräts auszuführen. Verwenden Sie die Geräteverbindungszeichenfolge, die Sie beim Registrieren des Geräts notiert haben.

    npm install
    node SimulatedDevice-1.js "{your_device_connection_string}"
    

    Sobald das Terminalfenster die Verbindung mit Ihrem Hub herstellt, zeigt es eine Erfolgsmeldung an:

    Screenshot that shows the simulated device connecting.

Sie haben sich jetzt erfolgreich über ein Gerät authentifiziert, indem Sie einen von Ihrem IoT Hub generierten Geräteschlüssel genutzt haben.

Zurücksetzen von Schlüsseln

In diesem Abschnitt setzen Sie den Geräteschlüssel zurück und sehen dann den Fehler, wenn für das simulierte Gerät versucht wird, eine Verbindung herzustellen.

  1. Führen Sie den Befehl az iot hub device-identity update zum Zurücksetzen des primären Geräteschlüssels für Ihr Gerät aus:

    # Generate a new Base64 encoded key using the current date
    read key < <(date +%s | sha256sum | base64 | head -c 32)
    
    # Reset the primary device key for test device
    az iot hub device-identity update --device-id {your_device_id} --set authentication.symmetricKey.primaryKey=$key --hub-name {your_iot_hub_name}
    
  2. Führen Sie im Terminalfenster auf Ihrem Entwicklungscomputer erneut die Anwendung für die Gerätesimulation aus:

    npm install
    node SimulatedDevice-1.js "{your_device_connection_string}"
    

    Hierbei sehen Sie jetzt einen Authentifizierungsfehler, wenn die Anwendung versucht, eine Verbindung herzustellen:

    Screenshot that shows the connection failing after the key reset.

Generieren eines SAS (Shared Access Signature)-Tokens

Wenn Ihr Gerät eines der IoT Hub-Geräte-SDKs nutzt, generiert der SDK-Bibliothekscode das SAS-Token, das zum Authentifizieren mit dem Hub verwendet wird. Ein SAS-Token wird aus dem Namen Ihres Hub, dem Namen Ihres Geräts und dem Geräteschlüssel generiert.

Bei einigen Szenarien, z.B. in einem Cloudprotokollgateway oder als Teil eines benutzerdefinierten Authentifizierungsschemas, müssen Sie das SAS-Token ggf. selbst generieren. Zum Behandeln von Problemen mit Ihrem SAS-Generierungscode ist es nützlich, ein als funktionierend bekanntes SAS-Token zur Verwendung beim Testen zu generieren.

Hinweis

Das Beispiel „SimulatedDevice-2.js“ enthält Beispiele zum Generieren eines SAS-Tokens jeweils mit und ohne SDK.

  1. Führen Sie den Befehl az iot hub generate-sas-token aus, um mithilfe der CLI ein als fehlerfrei bekanntes SAS-Token zu generieren:

    az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
    
  2. Kopieren Sie den gesamten Text des generierten SAS-Tokens. Ein SAS-Token sieht wie das folgende Beispiel aus: SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111

  3. Navigieren Sie in einem Terminalfenster auf Ihrem Entwicklungscomputer zum Stammordner des Node.js-Beispielprojekts, das Sie heruntergeladen haben. Navigieren Sie anschließend zum Ordner iot-hub\Tutorials\ConnectivityTests.

  4. Führen Sie im Terminalfenster die folgenden Befehle aus, um die erforderlichen Bibliotheken zu installieren und die Anwendung zur Simulation eines Geräts auszuführen:

    npm install
    node SimulatedDevice-2.js "{Your SAS token}"
    

    Sobald das Terminalfenster die Verbindung mit Ihrem Hub mithilfe des SAS-Tokens herstellt, zeigt es eine Erfolgsmeldung an:

    Screenshot that shows a successful connection using a SAS token.

Sie haben sich jetzt von einem Gerät aus erfolgreich authentifiziert, indem Sie ein mit einem CLI-Befehl generiertes SAS-Testtoken verwendet haben. Die Datei SimulatedDevice-2.js enthält Beispielcode, mit dem veranschaulicht wird, wie Sie im Code ein SAS-Token generieren.

Protokolle

Für ein Gerät kann eines der folgenden Protokolle verwendet werden, um eine Verbindung mit Ihrem IoT Hub herzustellen:

Protocol Ausgehender Port
MQTT 8883
MQTT über WebSockets 443
AMQP 5671
AMQP über WebSockets 443
HTTPS 443

Wenn der ausgehende Port durch eine Firewall blockiert ist, kann das Gerät keine Verbindung herstellen:

Screenshot that shows a connection error when the outbound port is blocked.

Überprüfen der Gerät-zu-Cloud-Konnektivität

Nachdem ein Gerät eine Verbindung hergestellt hat, kann es mit dem Senden von Telemetriedaten an Ihren IoT-Hub beginnen. In diesem Abschnitt wird veranschaulicht, wie Sie überprüfen können, ob die vom Gerät gesendeten Telemetriedaten Ihren Hub erreichen.

Senden von Gerät-zu-Cloud (D2C)-Nachrichten

  1. Da Sie die Verbindungszeichenfolge für Ihr Gerät im vorhergehenden Abschnitt zurückgesetzt haben, verwenden Sie den Befehl az iot hub device-identity connection-string show zum Abrufen der aktualisierten Verbindungszeichenfolge:

    az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
    
  2. Navigieren Sie zum Ausführen eines simulierten Geräts, mit dem Nachrichten gesendet werden, im heruntergeladenen Code zum Ordner iot-hub\Tutorials\ConnectivityTests.

  3. Führen Sie im Terminalfenster die folgenden Befehle aus, um die erforderlichen Bibliotheken zu installieren und die Anwendung zur Simulation eines Geräts auszuführen:

    npm install
    node SimulatedDevice-3.js "{your_device_connection_string}"
    

    Im Terminalfenster werden Informationen angezeigt, während Telemetriedaten an Ihren Hub gesendet werden:

    Screenshot that shows the simulated device sending messages.

Überwachen von eingehenden Nachrichten

Sie können die Option Metriken im Portal nutzen, um sicherzustellen, dass die Telemetrienachrichten Ihren IoT Hub erreichen.

  1. Wählen Sie im Azure-Portal in der Dropdownliste Ressource Ihren IoT-Hub aus.

  2. Wählen Sie im Abschnitt Überwachung des Navigationsmenüs die Option Metriken aus.

  3. Wählen Sie Gesendete Telemetrienachrichten als Metrik aus, und legen Sie den Zeitraum auf Letzte Stunde fest. Im Diagramm wird die Aggregatanzahl von Nachrichten angezeigt, die vom simulierten Gerät gesendet werden:

    Screenshot showing left pane metrics.

Es dauert einige Minuten, bis die Metriken nach dem Starten des simulierten Geräts zur Verfügung stehen.

Überprüfen der Cloud-zu-Gerät-Konnektivität

In diesem Abschnitt wird gezeigt, wie Sie einen direkten Test-Methodenaufruf für ein Gerät durchführen können, um die Cloud-zu-Gerät-Konnektivität zu testen. Sie führen ein simuliertes Gerät auf Ihrem Entwicklungscomputer aus, um auf direkte Methodenaufrufe von Ihrem Hub zu lauschen.

  1. Verwenden Sie in einem Terminalfenster den folgenden Befehl, um die simulierte Geräteanwendung auszuführen:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. Verwenden Sie in einem separaten Fenster den Befehl az iot hub invoke-device-method zum Aufrufen einer direkten Methode auf dem Gerät:

    az iot hub invoke-device-method --device-id {your_device_id} --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {your_iot_hub_name}
    

    Das simulierte Gerät gibt eine Meldung auf der Konsole aus, wenn es einen direkten Methodenaufruf empfängt:

    Screenshot that shows the device confirming that the direct method was received.

    Wenn das simulierte Gerät den direkten Methodenaufruf ohne Fehler empfangen hat, sendet es eine Bestätigung zurück an den Hub:

    Screenshot showing that the device returns a direct method acknowledgment.

Überprüfen der Zwillingssynchronisierung

Für Geräte werden Zwillinge verwendet, um den Zustand zwischen dem Gerät und dem Hub zu synchronisieren. In diesem Abschnitt verwenden Sie CLI-Befehle zum Senden von gewünschten Eigenschaften an ein Gerät und zum Lesen der vom Gerät gesendeten gemeldeten Eigenschaften.

Das in diesem Abschnitt verwendete simulierte Gerät sendet bei jedem Start gemeldete Eigenschaften an den Hub und gibt die gewünschten Eigenschaften jeweils in der Konsole aus, wenn diese empfangen werden.

  1. Verwenden Sie in einem Terminalfenster den folgenden Befehl, um die simulierte Geräteanwendung auszuführen:

    node SimulatedDevice-3.js "{your_device_connection_string}"
    
  2. Führen Sie in einem separaten Fenster den Befehl az iot hub device-twin show zur Überprüfung aus, ob der Hub die gemeldeten Eigenschaften vom Gerät empfangen hat:

    az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
    

    In der Ausgabe des Befehls wird die devicelaststarted-Eigenschaft im Abschnitt mit den gemeldeten Eigenschaften angezeigt. Mit dieser Eigenschaft werden das Datum und die Uhrzeit des Zeitpunkts angezeigt, zu dem Sie das simulierte Gerät zum letzten Mal gestartet haben.

    Screenshot showing the reported properties of a device.

  3. Wenn Sie überprüfen möchten, ob der Hub Werte für gewünschte Eigenschaften an das Gerät senden kann, verwenden Sie den Befehl az iot hub device-twin update:

    az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id {your_device_id} --hub-name {your_iot_hub_name}
    

    Das simulierte Gerät gibt eine Meldung aus, wenn es ein Update mit gewünschten Eigenschaften vom Hub empfängt:

    Screenshot that shows the device confirming that the desired properties update was received.

Zusätzlich zum Empfangen der vorgenommenen Änderungen von gewünschten Eigenschaften führt das simulierte Gerät beim Starten eine automatische Überprüfung auf gewünschte Eigenschaften durch.

Bereinigen von Ressourcen

Falls Sie die IoT Hub-Instanz nicht mehr benötigen, löschen Sie die Ressourcengruppe über das Portal. Wählen Sie hierzu die Ressourcengruppe mit Ihrer IoT Hub-Instanz aus, und wählen Sie Löschen aus.

Nächste Schritte

In diesem Tutorial wurde beschrieben, wie Sie Folgendes überprüfen: Ihre Geräteschlüssel, die Gerät-zu-Cloud-Konnektivität, die Cloud-zu-Gerät-Konnektivität und die Synchronisierung der Gerätezwillinge. Weitere Informationen zur Überwachung Ihres IoT Hub finden Sie im Artikel mit der Anleitung für die IoT Hub-Überwachung.