Ćwiczenie — wdrażanie funkcji platformy Azure w usłudze IoT Edge

Ukończone

Filtruj dane telemetryczne wysyłane przez urządzenie.

Pamiętaj, że chcesz zminimalizować ilość danych wysyłanych z każdego magazynu. Aby zmniejszyć ilość danych telemetrycznych wysyłanych do aplikacji usługi IoT Central, chcesz filtrować dane na urządzeniu usługi IoT Edge.

W tym miejscu użyjesz usługi Azure Functions uruchomionej na urządzeniu usługi IoT Edge, aby zaimplementować filtr. Filtr zapewnia, że urządzenie wysyła dane telemetryczne tylko wtedy, gdy temperatura otoczenia jest wyższa niż 21°C.

Uwaga

To ćwiczenie jest opcjonalne. Jeśli chcesz wykonać to ćwiczenie, przed rozpoczęciem musisz utworzyć subskrypcję platformy Azure. Jeśli nie masz konta platformy Azure lub nie chcesz go tworzyć w tej chwili, możesz zapoznać się z instrukcjami, aby zrozumieć prezentowane informacje.

Konfigurowanie rejestru kontenerów

Urządzenie usługi IoT Edge będzie musiało pobrać i zainstalować niestandardowy moduł usługi Azure Functions, który implementuje filtr. Moduły usługi IoT Edge są pakowane jako obrazy zgodne z platformą Docker, które można przechowywać w repozytorium kontenerów. Postanawiasz użyć usługi Azure Container Registry (ACR) do przechowywania nowego modułu. Użyjesz również usługi ACR do skompilowania kontenera z projektu źródłowego.

Uruchom następujące polecenia, aby dodać rejestr kontenerów do grupy zasobów na platformie 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"

Zanotuj nazwę i password wartości rejestru, użyj ich w dalszej części tej lekcji.

Tworzenie projektu usługi Azure Functions

Używasz języka C# do implementowania funkcji. Uruchom następujące polecenia, aby zainstalować szablon projektu, a następnie wygenerować szkieletowy projekt:

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

Uruchom następujące polecenie, aby zastąpić istniejącą FilterFunction.cs implementacją, która filtruje dane telemetryczne temperatury maszyny:

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

Teraz skompiluj obraz i przekaż go do rejestru kontenerów. Wykonanie tego polecenia może potrwać kilka minut:

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

Obrazy w rejestrze można wyświetlić za pomocą następującego polecenia:

az acr repository list --name $REGISTRY_NAME

Aktualizowanie manifestu wdrożenia

Aby użyć nowego modułu filtru na urządzeniu usługi IoT Edge, zaktualizuj manifest wdrożenia przy użyciu nowej wersji.

Pobierz nowy manifest wdrożenia i definicję interfejsu na maszynę lokalną, klikając prawym przyciskiem myszy następujące linki i wybierając polecenie Zapisz jako:

Otwórz EnvironmentalSensorManifestFilter-1-4.json w edytorze tekstów i zaktualizuj go, aby użyć modułu filtru z rejestru kontenerów:

  1. Zastąp trzy wystąpienia rejestru kontenerów <YOUR CONTAINER REGISTRY NAME> nazwą rejestru kontenerów. Nazwa wygląda następująco: edgecentral27912.
  2. Zastąp <YOUR CONTAINER REGISTRY PASSWORD> element hasłem zanotowanymi wcześniej w tej lekcji.
  3. Zapisz zmiany.

Ta wersja manifestu wdrożenia:

  • Dodaje moduł z utworzoną funkcją platformy Azure:

    "filterfunction": {
      "version": "1.0",
      "type": "docker",
      "status": "running",
      "restartPolicy": "always",
      "settings": {
        "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1",
        "createOptions": ""
      }
    
  • Kieruje dane wyjściowe z modułu SimulatedTemperatureSensor do modułu filterfunction przed wysłaniem filtrowanej telemetrii do aplikacji usługi IoT Central:

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

Aby przekazać nowy manifest wdrożenia:

  1. W aplikacji usługi IoT Central przejdź do manifestów usługi Edge i wybierz manifest czujnikaśrodowiska.

  2. Na stronie Dostosowywanie przekaż nowy plik EnvironmentalSensorManifestFilter-1-4.json. Wybierz Dalej.

  3. Na stronie Przeglądanie i kończenie zostanie wyświetlony nowy moduł filterfunction . Wybierz pozycję Zapisz.

  4. Przejdź do urządzenia Environmental Sensor Edge — store-001 na stronie Urządzenia i wybierz pozycję Moduły.

  5. Na stronie Moduły wybierz pozycję Zarządzaj manifestem Przypisz manifest >krawędzi. Wybierz manifest czujnika środowiska.

  6. Lista modułów zawiera teraz uruchomiony moduł filterfunction :

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

Aktualizowanie szablonu urządzenia w celu użycia nowego modułu

Urządzenie usługi IoT Edge wysyła teraz dane telemetryczne za pośrednictwem interfejsu filterfunction zamiast interfejsu Telemetria . W związku z tym należy zaktualizować szablon urządzenia i widoki:

  1. Przejdź do urządzenia Environmental Sensor Edge na stronie Szablony urządzeń.

  2. Wybierz pozycję Moduły, a następnie wybierz pozycję Importuj moduły z manifestu.

  3. W oknie dialogowym Importowanie modułów wybierz pozycję Czujnik środowiska, a następnie wybierz pozycję Importuj.

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

Nowy moduł wysyła teraz dane telemetryczne do usługi IoT Central. Następnie dodaj interfejs do nowego modułu filtru, który określa dane telemetryczne i zaktualizuj wykres:

  1. Wybierz pozycję Filtr modułuFunction, a następnie pozycję + Dodaj dziedziczony interfejs. Może być konieczne wybranie pozycji ... aby wyświetlić tę opcję.
  2. Wybierz kafelek Importuj interfejs . Wybierz pobrany wcześniej plik TelemetryInterfaceFilter.json.

Oryginalny interfejs telemetrii można usunąć, ponieważ moduł SimulatedTemperatureModule nie wysyła już danych telemetrycznych bezpośrednio do usługi IoT Central. Dane wyjściowe z tego modułu są kierowane do modułu FilterFunction przez środowisko uruchomieniowe usługi IoT Edge:

  1. Wybierz interfejs Telemetrii w module SimulatedTemperatureSensor.
  2. Wybierz pozycję Usuń , a następnie potwierdź operację.

Zmodyfikuj widok telemetrii urządzenia usługi IoT Edge, aby wyświetlić dane telemetryczne wysyłane przez moduł FilterFunction :

  1. W szablonie urządzenia wybierz widok Telemetrii urządzenia usługi IoT Edge, a następnie wybierz opcję Edytuj na kafelku wykresu.
  2. Dodaj wartości telemetryczne otoczenia/temperatury, wilgotności, maszyny/temperatury i ciśnienia.
  3. Wybierz pozycję Aktualizuj , a następnie pozycję Zapisz , aby zapisać zmiany.
  4. Wybierz pozycję Publikuj, aby opublikować nową wersję szablonu urządzenia.

Sprawdź swoją pracę

Aby wyświetlić odfiltrowane dane telemetryczne z urządzenia usługi IoT Edge:

  1. Przejdź do urządzenia store-001 na stronie Urządzenia .

  2. Wybierz widok telemetrii urządzenia usługi IoT Edge.

  3. Na wykresie można zobaczyć przefiltrowane dane telemetryczne. Nie ma żadnych wartości pokazywanych ze średnią temperaturą otoczenia mniejszą niż 21,0 stopni.

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

Jeśli urządzenie wydaje się przestać wysyłać dane telemetryczne, prawdopodobnie będzie to spowodowane tym, że moduł SimulatedTemperatureSensor zatrzymuje się po wysłaniu 500 komunikatów. Jeśli uruchomisz ponownie maszynę wirtualną, liczba zostanie zresetowana i zobaczysz, że telemetria zacznie przepływać ponownie:

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)