Übung: Bereitstellen einer Azure-Funktion für IoT Edge

Abgeschlossen

Filtern Sie die vom Gerät gesendeten Telemetriedaten.

Denken Sie daran, dass Sie die Menge der von jeder Filiale gesendeten Daten minimieren möchten. Um die Menge an Telemetriedaten zu reduzieren, die an Ihre IoT Central-Anwendung gesendet werden, sollten Sie die Daten auf dem IoT Edge-Gerät filtern.

Hier verwenden Sie Azure Functions, das auf dem IoT Edge-Gerät ausgeführt wird, zum Implementieren eines Filters. Der Filter stellt sicher, dass das Gerät Telemetriedaten nur dann sendet, wenn die Umgebungstemperatur über 21° C liegt.

Hinweis

Diese Übung ist optional. Wenn Sie die Schritte in dieser Übung ausführen möchten, müssen Sie zuvor ein Azure-Abonnement erstellen. Wenn Sie kein Azure-Konto besitzen oder gerade kein Konto erstellen möchten, können Sie die Anweisungen durchlesen und die dargelegten Informationen nachvollziehen.

Konfigurieren einer Containerregistrierung

Ihr IoT Edge-Gerät muss das benutzerdefinierte Azure Functions-Modul herunterladen und installieren, mit dem der Filter implementiert wird. IoT Edge-Module werden als Docker-kompatible Images verpackt, die Sie in einem Containerrepository speichern können. Sie treffen die Entscheidung, die Azure Container Registry-Instanz (ACR) zum Speichern Ihres neuen Moduls zu verwenden. Sie verwenden die ACR-Instanz auch, um den Container aus einem Quellprojekt zu erstellen.

Führen Sie die folgenden Befehle aus, um Ihrer Ressourcengruppe in Azure eine Containerregistrierung hinzuzufügen:

REGISTRY_NAME="edgecentral$RANDOM"
az acr create -n $REGISTRY_NAME -g <rgn>[sandbox resource group name]</rgn> --sku Standard --admin-enabled true
az acr credential show -n $REGISTRY_NAME
echo "Your registry name is: $REGISTRY_NAME"

Notieren Sie sich den Namen der Registrierung und die password-Werte, da Sie diese Angaben später in dieser Lerneinheit noch benötigen.

Erstellen eines Azure Functions-Projekts

Sie verwenden C#, um die Funktion zu implementieren. Führen Sie die folgenden Befehle aus, um die Projektvorlage zu installieren und dann ein Projektgerüst zu generieren:

dotnet new -i Microsoft.Azure.IoT.Edge.Function
dotnet new aziotedgefunction -n FilterFunction -r $REGISTRY_NAME.azurecr.io/filterfunction
cd FilterFunction
ls

Führen Sie den folgenden Befehl aus, um die vorhandene Datei FilterFunction.cs durch eine Implementierung zu ersetzen, mit der die Telemetriedaten zur Computertemperatur gefiltert werden:

curl -O https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/iotedge/FilterFunction.cs

Führen Sie jetzt den Buildvorgang für Ihr Image durch, und laden Sie es in Ihre Containerregistrierung hoch. Sie sollten damit rechnen, dass die Ausführung dieses Befehls einige Minuten dauern kann:

az acr build --registry $REGISTRY_NAME --image filterfunction:v1 -f Dockerfile.amd64 .

Sie können die Images in Ihrer Registrierung mit dem folgenden Befehl auflisten:

az acr repository list --name $REGISTRY_NAME

Aktualisieren des Bereitstellungsmanifests

Um das neue Filtermodul auf Ihrem IoT Edge-Gerät zu verwenden, aktualisieren Sie das Bereitstellungsmanifest mit der neuen Version.

Laden Sie das neue Bereitstellungsmanifest und die Schnittstellendefinition auf Ihren lokalen Computer herunter, indem Sie mit der rechten Maustaste auf die folgenden Links klicken und die Option Speichern unter auswählen:

Öffnen Sie die Datei EnvironmentalSensorManifestFilter-1-4.json in einem Text-Editor, und aktualisieren Sie sie so, dass das Filtermodul aus Ihrer Containerregistrierung verwendet wird:

  1. Ersetzen Sie die drei Instanzen von <YOUR CONTAINER REGISTRY NAME> durch den Namen Ihrer Containerregistrierung. Der Name hat in etwa das folgende Format: edgecentral27912.
  2. Ersetzen Sie <YOUR CONTAINER REGISTRY PASSWORD> durch das Kennwort, das Sie sich weiter oben in dieser Lerneinheit notiert haben.
  3. Speichern Sie die Änderungen.

Mit dieser Version des Bereitstellungsmanifests wird Folgendes durchgeführt:

  • Fügt das Modul mit der von Ihnen erstellten Azure-Funktion hinzu:

    "filterfunction": {
      "version": "1.0",
      "type": "docker",
      "status": "running",
      "restartPolicy": "always",
      "settings": {
        "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1",
        "createOptions": ""
      }
    
  • Leitet die Ausgabe aus dem Modul SimulatedTemperatureSensor an das Modul filterfunction weiter, bevor die gefilterten Telemetriedaten an Ihre IoT Central-Anwendung gesendet werden:

    "routes": {
        "FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream",
        "sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")"
      },
    

So laden Sie das neue Bereitstellungsmanifest hoch:

  1. Navigieren Sie in Ihrer IoT Central-Anwendung zu Edgemanifeste, und wählen Sie das Manifest Environmental Sensor (Umgebungssensor) aus.

  2. Laden Sie auf der Seite Anpassen die neue Datei EnvironmentalSensorManifestFilter-1-4.json hoch. Wählen Sie Weiter aus.

  3. Auf der Seite Überprüfen und fertigstellen wird das neue Modul filterfunction angezeigt. Wählen Sie Speichern aus.

  4. Navigieren Sie auf der Seite Geräte zum Gerät Environmental Sensor Edge Device – store-001, und wählen Sie Module aus.

  5. Wählen Sie auf der Seite Module die Option Manifest verwalten > Edgemanifest zuweisen aus. Wählen Sie das Manifest Environmental Sensor (Umgebungssensor) aus.

  6. Die Liste der Module enthält jetzt das ausgeführte Modul filterfunction:

Screenshot that shows the FilterFunction module running on the IoT Edge device.

Aktualisieren der Gerätevorlage für die Verwendung des neuen Moduls

Das IoT Edge-Gerät sendet die Telemetriedaten jetzt über die filterfunction-Schnittstelle und nicht über die Telemetrieschnittstelle. Aus diesem Grund müssen Sie die Gerätevorlage und die Ansichten aktualisieren:

  1. Navigieren Sie auf der Seite Gerätevorlagen zu Environmental Sensor Edge Device (Umgebungssensor-Edgegerät).

  2. Wählen Sie Module und dann Module aus Manifest importieren aus.

  3. Wählen Sie im Dialogfeld Module importieren die Option Environmental Sensor (Umgebungssensor) und dann Importieren aus.

Screenshot that shows the FilterFunction module added to the device template.

Das neue Modul sendet die Telemetriedaten jetzt an IoT Central. Fügen Sie dem neuen Filtermodul als Nächstes eine Schnittstelle hinzu, mit der die Telemetriedaten angegeben werden, und aktualisieren Sie das Diagramm:

  1. Wählen Sie Module FilterFunction (Modul „FilterFunction“) und dann + Add inherited interface (+ Geerbte Schnittstelle hinzufügen) aus. Unter Umständen müssen Sie ... auswählen, damit diese Option angezeigt wird.
  2. Wählen Sie die Kachel Schnittstelle importieren aus. Wählen Sie die Datei TelemetryInterfaceFilter.json aus, die Sie weiter oben heruntergeladen haben.

Sie können die ursprüngliche Schnittstelle Telemetry entfernen, da von SimulatedTemperatureModule keine Telemetriedaten mehr direkt an IoT Central gesendet werden. Die Ausgabe aus diesem Modul wird von der IoT Edge-Runtime an das Modul FilterFunction weitergeleitet:

  1. Wählen Sie die Schnittstelle Telemetry im Modul SimulatedTemperatureSensor aus.
  2. Wählen Sie die Option Löschen aus, und bestätigen Sie anschließend den Vorgang.

Ändern Sie die Sicht View IoT Edge device telemetry (IoT Edge-Gerätetelemetrie anzeigen), um die vom Modul FilterFunction gesendeten Telemetriedaten anzuzeigen:

  1. Wählen Sie in der Gerätevorlage die Ansicht View IoT Edge device telemetry (IoT Edge-Gerätetelemetrie anzeigen) und dann auf der Diagrammkachel die Option Bearbeiten aus.
  2. Fügen Sie die Telemetriewerte ambient/temperature, humidity, machine/temperature und pressure hinzu.
  3. Wählen Sie die Option Aktualisieren und dann Speichern aus, um Ihre Änderungen zu speichern.
  4. Wählen Sie die Option Veröffentlichen aus, um die neue Version der Gerätevorlage zu veröffentlichen.

Arbeit überprüfen

So zeigen Sie die gefilterten Telemetriedaten von Ihrem IoT Edge-Gerät an:

  1. Navigieren Sie auf der Seite Geräte zum Gerät store-001.

  2. Wählen Sie die Sicht View IoT Edge device telemetry (IoT Edge-Gerätetelemetrie anzeigen) aus.

  3. Sie können die gefilterten Telemetriedaten im Diagramm anzeigen. Es werden keine Durchschnittstemperaturwerte von weniger als 21,0 Grad angezeigt.

    Screenshot that shows telemetry plot with no average ambient temperature values less than 21.

Wenn das Gerät scheinbar keine Telemetriedaten mehr sendet, besteht der Grund wahrscheinlich darin, dass das Modul SimulatedTemperatureSensor nach 500 Nachrichten aufhört. Wenn Sie den virtuellen Computer neu starten, wird der Zähler zurückgesetzt, und die Telemetriedaten beginnen wieder zu fließen:

az vm restart --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name $(az vm list --resource-group <rgn>[sandbox resource group name]</rgn> --query [0].name -o tsv)