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 do Azure IoT Central, você deseja filtrar os dados no dispositivo IoT Edge.

Aqui, você usa 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 deve 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ê usa o Azure Container Registry (ACR) para armazenar seu novo módulo e 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 do registro e password os valores para uso posterior 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.cs existente por uma implementação que filtre 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 <YOUR CONTAINER REGISTRY NAME> pelo nome do seu registro de 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 do Azure 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. Em seu aplicativo do Azure IoT Central, vá para 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. Vá para o dispositivo Environmental Sensor Edge Device - store-001 na página Dispositivos e selecione Módulos.

  5. Na parte superior da página, selecione Gerenciar manifesto > Atribuir manifesto de borda. Selecione o manifesto do Sensor Ambiental e, em seguida, selecione Atribuir manifesto.

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

Captura de tela que mostra o módulo FilterFunction em execução no dispositivo IoT Edge.

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. Na página Modelos de dispositivo, selecione Dispositivo de borda do sensor ambiental.

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

    Captura de tela que mostra como importar módulos do manifesto.

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

Captura de tela que mostra o módulo FilterFunction adicionado ao modelo de dispositivo.

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

  1. Selecione Module FilterFunction e, em seguida , + Add inherited interface. Talvez seja necessário selecionar as reticências (...) 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 Azure 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 Telemetria no 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.
  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. Na página Dispositivos, selecione o dispositivo store-001.

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

    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.

    Captura de ecrã que mostra o gráfico de telemetria sem valores médios de temperatura ambiente inferiores a 21.

Se o dispositivo parecer parar de enviar telemetria, é provável que o módulo SimulatedTemperatureSensor pare depois de enviar 500 mensagens. Se você reiniciar a máquina virtual, 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)