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 o volume de dados enviados de cada loja. Para reduzir a quantidade de telemetria enviada ao aplicativo do Azure IoT Central, é bom filtrar os dados no dispositivo do 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ó envie telemetria quando a temperatura ambiente estiver acima de 21 °C.

Observação

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

Configurar um registro de contêiner

Seu dispositivo do 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êineres. Use o ACR (Registro de Contêiner do Azure) para armazenar seu novo módulo e criar o contêiner de um projeto de origem.

Execute os seguintes comandos para adicionar um registro de contêiner ao 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 os valores de password para uso posteriormente nesta unidade.

Criar um projeto do Azure Functions

Você está usando C# para implementar a função. Execute os seguintes comandos para instalar o modelo de projeto e gere 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 filtra a telemetria de temperatura do computador:

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

Agora, crie a imagem e carregue-a no seu registro de contêiner. Esse comando levará alguns minutos para ser executado:

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

Você pode listar as imagens do 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 no dispositivo do 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 no computador local. Para isso, clique com o botão direito do mouse nos links a seguir e escolha Salvar como:

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

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

Essa 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": ""
      }
    
  • Encaminha a saída do módulo SimulatedTemperatureSensor para o módulo filterfunction antes de enviar a telemetria filtrada para o 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. No aplicativo do Azure IoT Central, vá até Manifestos do Edge e selecione o manifesto Sensor Ambiental.

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

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

  4. Vá até o dispositivo do Dispositivo de Borda de Sensor Ambiental – store-001 na página Dispositivos e selecione Módulos.

  5. Perto da parte superior da página, Gerenciar manifesto > Atribuir manifesto de borda. Selecione o Manifesto do sensor ambiental e 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 do IoT Edge.

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

Agora, o dispositivo IoT Edge 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 clique em 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 clique em 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 Módulo FilterFunction e + Adicionar interface herdada. Talvez seja necessário selecionar as reticências (...) para ver essa 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 SimulatedTemperatureModule não envia mais telemetria diretamente para o Azure IoT Central. O formulário de saída desse módulo é roteado para o módulo FilterFunction pelo runtime do IoT Edge.

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

Modifique a exibição Exibir telemetria do dispositivo do IoT Edge para exibir a telemetria enviada pelo módulo FilterFunction.

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

Verificar seu trabalho

Para exibir a telemetria filtrada do dispositivo do IoT Edge:

  1. Na página Dispositivos, selecione o dispositivo store-001.

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

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

    Captura de tela que mostra o gráfico de telemetria sem valores médios de temperatura ambiente menores que 21.

Se parecer que o dispositivo parou de enviar telemetria, pode ser porque o módulo SimulatedTemperatureSensor parou de enviar telemetria depois de enviar 500 mensagens. Se você reiniciar a máquina virtual, a contagem será redefinida, e você verá 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)