Exercício - Implantar uma função do Azure no IoT Edge

Concluído

Filtre a telemetria enviada pelo dispositivo.

Lembre-se de que você deseja minimizar a quantidade de dados enviados de cada loja. Para reduzir a quantidade de telemetria enviada para seu aplicativo IoT Central, você deseja filtrar os dados no dispositivo IoT Edge.

Aqui, você usará o Azure Functions em execução no dispositivo IoT Edge para implementar um filtro. O filtro garante que o dispositivo só envia telemetria quando a temperatura ambiente está acima de 21°C.

Nota

Este exercício é opcional. Se quiser concluir este exercício, terá de criar uma subscrição do Azure antes de começar. Se você não tiver uma conta do Azure ou não quiser criar uma no momento, leia as instruções para entender as informações que estão sendo apresentadas.

Configurar um registro de contêiner

Seu dispositivo IoT Edge precisará baixar e instalar o módulo personalizado do Azure Functions que implementa o filtro. Os módulos do IoT Edge são empacotados como imagens compatíveis com o Docker que você pode armazenar em um repositório de contêiner. Você decide usar o Azure Container Registry (ACR) para armazenar seu novo módulo. Você também usará o ACR para criar o contêiner a partir de um projeto de origem.

Execute os seguintes comandos para adicionar um registro de contêiner ao seu grupo de recursos no 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"

Anote o nome e password os valores do registro, você os usa mais tarde nesta unidade.

Criar um projeto das Funções do Azure

Você está usando C# para implementar a função. Execute os seguintes comandos para instalar o modelo de projeto e, em seguida, gerar um projeto esqueleto:

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

Execute o seguinte comando para substituir o FilterFunction existente .cs por uma implementação que filtra a telemetria de temperatura da máquina:

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

Agora construa a imagem e carregue-a para o seu registro de contêiner. Espere que este comando demore alguns minutos para ser executado:

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

Você pode listar as imagens em seu registro com o seguinte comando:

az acr repository list --name $REGISTRY_NAME

Atualizar o manifesto de implantação

Para usar o novo módulo de filtro em seu dispositivo IoT Edge, atualize o manifesto de implantação com a nova versão.

Baixe o novo manifesto de implantação e a definição de interface para sua máquina local clicando com o botão direito do mouse nos links a seguir e escolhendo Salvar como:

Abra o EnvironmentalSensorManifestFilter-1-4.json em um editor de texto e atualize-o para usar o módulo de filtro do seu registro de contêiner:

  1. Substitua as três instâncias de pelo nome do seu registro de <YOUR CONTAINER REGISTRY NAME> contêiner. O nome parece edgecentral27912.
  2. Substitua <YOUR CONTAINER REGISTRY PASSWORD> pela senha que você anotou anteriormente nesta unidade.
  3. Guarde as alterações.

Esta versão do manifesto de implantação:

  • Adiciona o módulo com a função do Azure que você criou:

    "filterfunction": {
      "version": "1.0",
      "type": "docker",
      "status": "running",
      "restartPolicy": "always",
      "settings": {
        "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1",
        "createOptions": ""
      }
    
  • Roteia a saída do módulo SimulatedTemperatureSensor para o módulo filterfunction antes de enviar a telemetria filtrada para seu aplicativo IoT Central:

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

Para carregar o novo manifesto de implantação:

  1. No aplicativo IoT Central, navegue até Manifestos de borda e selecione o manifesto do Sensor ambiental .

  2. Na página Personalizar, carregue o novo arquivo EnvironmentalSensorManifestFilter-1-4.json. Selecione Seguinte.

  3. A página Rever e concluir mostra o novo módulo filterfunction . Selecione Guardar.

  4. Navegue até o dispositivo Environmental Sensor Edge Device - store-001 na página Dispositivos e selecione Módulos.

  5. Na página Módulos, selecione Gerenciar manifesto Atribuir manifesto >de borda. Selecione o manifesto do Sensor ambiental .

  6. A lista de módulos agora inclui o módulo filterfunction em execução:

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

Atualizar o modelo de dispositivo para usar o novo módulo

O dispositivo IoT Edge agora está enviando a telemetria por meio da interface filterfunction em vez da interface Telemetria. Portanto, você precisa atualizar o modelo de dispositivo e as exibições:

  1. Navegue até o Dispositivo de borda do sensor ambiental na página Modelos de dispositivo.

  2. Selecione Módulos e, em seguida, selecione Importar módulos do manifesto.

  3. Na caixa de diálogo Importar módulos, selecione Sensor ambiental e, em seguida, selecione Importar.

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

O novo módulo agora envia a telemetria para o IoT Central. Em seguida, adicione uma interface ao novo módulo de filtro que especifique a telemetria e atualize o gráfico:

  1. Selecione Module FilterFunction e, em seguida , + Add inherited interface. Pode ser necessário selecionar ... para ver esta opção.
  2. Escolha o bloco Importar interface . Selecione o arquivo TelemetryInterfaceFilter.json que você baixou anteriormente.

Você pode remover a interface de Telemetria original porque o SimulatedTemperatureModule não envia mais telemetria diretamente para o IoT Central. A saída deste módulo é roteada para o módulo FilterFunction pelo tempo de execução do IoT Edge:

  1. Selecione a interface Telemetriano módulo SimulatedTemperatureSensor .
  2. Selecione Excluir e confirme a operação.

Modifique a exibição de telemetria do dispositivo View IoT Edge para exibir a telemetria enviada pelo módulo FilterFunction:

  1. No modelo de dispositivo, selecione a exibição de telemetria do dispositivo View IoT Edge e selecione a opção Editar no bloco do gráfico.
  2. Adicione os valores de telemetria ambiente/temperatura, humidade, máquina/temperatura e pressão.
  3. Selecione Atualizar e, em seguida, Guardar para guardar as alterações.
  4. Selecione Publicar para publicar a nova versão do modelo de dispositivo.

Verifique o seu trabalho

Para visualizar a telemetria filtrada do seu dispositivo IoT Edge:

  1. Navegue até o dispositivo store-001 na página Dispositivos .

  2. Selecione a exibição de telemetria do dispositivo View IoT Edge.

  3. Você pode ver a telemetria filtrada no gráfico. Não são apresentados valores com uma temperatura ambiente média inferior a 21,0 graus.

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

Se o dispositivo parece parar de enviar telemetria, é provável que seja porque o módulo SimulatedTemperatureSensor para depois de enviar 500 mensagens. Se você reiniciar a VM, a contagem será redefinida e a telemetria começará a fluir novamente:

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)