Övning – Distribuera en Azure-funktion till IoT Edge

Slutförd

Filtrera telemetrin som skickas av enheten.

Kom ihåg att du vill minimera mängden data som skickas från varje lager. Om du vill minska mängden telemetri som skickas till ditt IoT Central-program vill du filtrera data på IoT Edge-enheten.

Här använder du Azure Functions som körs på IoT Edge-enheten för att implementera ett filter. Filtret säkerställer att enheten endast skickar telemetri när omgivningstemperaturen är över 21°C.

Kommentar

Den här övningen är valfri. Om du vill slutföra den här övningen måste du skapa en Azure-prenumeration innan du börjar. Om du inte har något Azure-konto eller om du inte vill skapa ett för tillfället kan du läsa igenom anvisningarna så att du förstår den information som visas.

Konfigurera ett containerregister

Din IoT Edge-enhet måste ladda ned och installera den anpassade Azure Functions-modulen som implementerar filtret. IoT Edge-moduler paketeras som Docker-kompatibla avbildningar som du kan lagra i en containerlagringsplats. Du bestämmer dig för att använda Azure Container Registry (ACR) för att lagra den nya modulen. Du använder också ACR för att skapa containern från ett källprojekt.

Kör följande kommandon för att lägga till ett containerregister i resursgruppen i Azure:

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"

Anteckna registernamnet och password värdena. Du använder dem senare i den här lektionen.

Skapa ett Azure Functions-projekt

Du använder C# för att implementera funktionen. Kör följande kommandon för att installera projektmallen och generera sedan ett skelettprojekt:

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

Kör följande kommando för att ersätta den befintliga FilterFunction.cs med en implementering som filtrerar telemetrin för datorns temperatur:

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

Skapa nu avbildningen och ladda upp den till containerregistret. Förvänta dig att det tar några minuter att köra det här kommandot:

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

Du kan lista avbildningarna i registret med följande kommando:

az acr repository list --name $REGISTRY_NAME

Uppdatera distributionsmanifestet

Om du vill använda den nya filtermodulen på din IoT Edge-enhet uppdaterar du distributionsmanifestet med den nya versionen.

Ladda ned det nya distributionsmanifestet och gränssnittsdefinitionen till den lokala datorn genom att högerklicka på följande länkar och välja Spara som:

Öppna EnvironmentalSensorManifestFilter-1-4.json i en textredigerare och uppdatera den för att använda filtermodulen från containerregistret:

  1. Ersätt de tre instanserna av <YOUR CONTAINER REGISTRY NAME> med namnet på ditt containerregister. Namnet ser ut som edgecentral27912.
  2. Ersätt <YOUR CONTAINER REGISTRY PASSWORD> med lösenordet som du antecknade tidigare i den här lektionen.
  3. Spara ändringarna.

Den här versionen av distributionsmanifestet:

  • Lägger till modulen med den Azure-funktion som du skapade:

    "filterfunction": {
      "version": "1.0",
      "type": "docker",
      "status": "running",
      "restartPolicy": "always",
      "settings": {
        "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1",
        "createOptions": ""
      }
    
  • Dirigerar utdata från modulen SimulatedTemperatureSensor till filterfunction-modulen innan du skickar den filtrerade telemetrin till ditt IoT Central-program:

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

Så här laddar du upp det nya distributionsmanifestet:

  1. I ditt IoT Central-program går du till Edge-manifest och väljer miljösensormanifestet .

  2. På sidan Anpassa laddar du upp den nya EnvironmentalSensorManifestFilter-1-4.json-filen . Välj Nästa.

  3. Sidan Granska och slutför visar den nya filterfunktionsmodulen . Välj Spara.

  4. Gå till Miljösensor edge-enheten – lagra 001-enhetensidan Enheter och välj Moduler.

  5. På sidan Moduler väljer du Hantera manifest > Tilldela kantmanifest. Välj miljösensormanifestet.

  6. Listan över moduler innehåller nu modulen filterfunction som körs:

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

Uppdatera enhetsmallen så att den nya modulen används

IoT Edge-enheten skickar nu telemetrin via filterfunktionsgränssnittet i stället för telemetrigränssnittet . Därför måste du uppdatera enhetsmallen och vyerna:

  1. Gå till Miljösensor edge-enhetensidan Enhetsmallar.

  2. Välj Moduler och välj sedan Importera moduler från manifestet.

  3. I dialogrutan Importera moduler väljer du Miljösensor och sedan Importera.

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

Den nya modulen skickar nu telemetrin till IoT Central. Lägg sedan till ett gränssnitt i den nya filtermodulen som anger telemetrin och uppdaterar diagrammet:

  1. Välj ModulfilterFunktion och sedan + Lägg till ärvt gränssnitt. Du kan behöva välja ... för att se det här alternativet.
  2. Välj panelen Importera gränssnitt . Välj den TelemetryInterfaceFilter.json fil som du laddade ned tidigare.

Du kan ta bort det ursprungliga telemetrigränssnittet eftersom SimulatedTemperatureModule inte längre skickar telemetri direkt till IoT Central. Utdata från den här modulen dirigeras till FilterFunction-modulen av IoT Edge-körningen:

  1. Välj telemetrigränssnittet i modulen SimulatedTemperatureSensor.
  2. Välj Ta bort och bekräfta sedan åtgärden.

Ändra telemetrivyn Visa IoT Edge-enhet så att telemetrin som skickas av FilterFunction-modulen visas:

  1. I enhetsmallen väljer du telemetrivyn Visa IoT Edge-enhet och väljer sedan alternativet Redigera på diagrampanelen.
  2. Lägg till värden för omgivande/temperatur, luftfuktighet, maskin/temperatur och trycktelemetri .
  3. Välj Uppdatera och spara sedanändringarna.
  4. Välj Publicera för att publicera den nya versionen av enhetsmallen.

Kontrollera ditt arbete

Så här visar du den filtrerade telemetrin från din IoT Edge-enhet:

  1. Gå till store-001-enheten på sidan Enheter.

  2. Välj telemetrivyn Visa IoT Edge-enhet.

  3. Du kan se den filtrerade telemetrin i diagrammet. Det finns inga värden som visas med en genomsnittlig omgivningstemperatur på mindre än 21,0 grader.

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

Om enheten verkar sluta skicka telemetri beror det sannolikt på att modulen SimulatedTemperatureSensor stoppas när 500 meddelanden har skickats. Om du startar om den virtuella datorn återställs antalet och telemetrin börjar flöda igen:

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)