Partilhar via


Tutorial: Enviar dados via gateway transparente

Aplica-se a: ícone sim IoT Edge 1.1

Importante

A data de fim do suporte do IoT Edge 1.1 foi 13 de dezembro de 2022. Consulte o Ciclo de Vida de Produtos da Microsoft para obter informações sobre como é suportado este produto, serviço, tecnologia ou API. Para obter mais informações sobre como atualizar para a versão mais recente do IoT Edge, consulte Atualizar o IoT Edge.

Neste artigo, mais uma vez usamos a VM de desenvolvimento como um dispositivo simulado. No entanto, em vez de enviar dados diretamente para o Hub IoT, o dispositivo envia dados para o dispositivo IoT Edge configurado como um gateway transparente.

Monitoramos a operação do dispositivo IoT Edge enquanto o dispositivo simulado está enviando dados. Quando o dispositivo terminar de funcionar, examinamos os dados em nossa conta de armazenamento para validar que tudo funcionou conforme o esperado.

Esta etapa geralmente é executada por um desenvolvedor de nuvem ou dispositivo.

Nesta seção do tutorial, você aprenderá a:

  • Crie e execute um dispositivo a jusante.
  • Verifique se os dados gerados estão sendo armazenados em seu armazenamento de Blob do Azure.
  • Valide se o modelo de aprendizado de máquina classificou os dados do dispositivo.

Pré-requisitos

Este artigo faz parte de uma série de tutoriais sobre como usar o Azure Machine Learning no IoT Edge. Cada artigo da série baseia-se no trabalho do artigo anterior. Se você chegou a este artigo diretamente, visite o primeiro artigo da série.

Rever o chicote do dispositivo

Reutilize o projeto DeviceHarness para simular o dispositivo a jusante. A conexão com o gateway transparente requer duas coisas adicionais:

  • Registre o certificado para fazer com que o dispositivo IoT downstream confie na autoridade de certificação que está sendo usada pelo tempo de execução do IoT Edge. No nosso caso, o dispositivo a jusante é a VM de desenvolvimento.
  • Adicione o FQDN (nome de domínio totalmente qualificado) do gateway de borda à cadeia de conexão do dispositivo.

Observe o código para ver como esses dois itens são implementados.

  1. Na máquina de desenvolvimento, abra o Visual Studio Code.

  2. Use File>Open Folder... para abrir C:\source\IoTEdgeAndMlSample\DeviceHarness.

  3. Observe o método InstallCertificate() no Program.cs.

  4. Observe que, se o código encontrar o caminho do certificado, ele chamará o método CertificateManager.InstallCACert para instalar o certificado na máquina.

  5. Agora veja o método GetIotHubDevice na classe TurbofanDevice.

  6. Quando o usuário especifica o FQDN do gateway usando a opção "-g", esse valor é passado para esse método como a gatewayFqdn variável, que é anexada à cadeia de conexão do dispositivo.

    connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
    

Construir e executar dispositivo downstream

  1. Com o projeto DeviceHarness ainda aberto no Visual Studio Code, crie o projeto. No menu Terminal, selecione Executar tarefa de compilação e selecione Compilar.

  2. Encontre o nome de domínio totalmente qualificado (FQDN) para seu gateway de borda navegando até seu dispositivo IoT Edge (VM Linux) no portal do Azure e copiando o valor para nome DNS da página de visão geral.

  3. Inicie seu dispositivo IoT (VM Linux) se ele ainda não estiver em execução.

  4. Abra o terminal do Visual Studio Code. No menu Terminal, selecione Novo Terminal e execute o seguinte comando, substituindo <edge_device_fqdn> pelo nome DNS copiado do dispositivo IoT Edge (VM Linux):

    dotnet run -- --gateway-host-name "<edge_device_fqdn>" --certificate C:\edgecertificates\certs\azure-iot-test-only.root.ca.cert.pem --max-devices 1
    
  5. O aplicativo tenta instalar o certificado em sua máquina de desenvolvimento. Quando isso acontecer, aceite o aviso de segurança.

  6. Quando solicitado para a cadeia de conexão do Hub IoT, clique nas reticências (...) no painel de dispositivos do Hub IoT do Azure e selecione Copiar Cadeia de Conexão do Hub IoT. Cole o valor no terminal.

  7. Você verá saídas como:

    Found existing device: Client_001
    Using device connection string: HostName=<your hub>.azure-devices.net;DeviceId=Client_001;SharedAccessKey=xxxxxxx; GatewayHostName=iotedge-xxxxxx.<region>.cloudapp.azure.com
    Device: 1 Message count: 50
    Device: 1 Message count: 100
    Device: 1 Message count: 150
    Device: 1 Message count: 200
    Device: 1 Message count: 250
    

    Observe a adição do "GatewayHostName" à cadeia de conexão do dispositivo, que faz com que o dispositivo se comunique por meio do Hub IoT por meio do gateway transparente do IoT Edge.

Verificar saída

Saída de dispositivo IoT Edge

A saída do módulo avroFileWriter pode ser prontamente observada observando o dispositivo IoT Edge.

  1. SSH em sua máquina virtual IoT Edge.

  2. Procure arquivos gravados no disco.

    find /data/avrofiles -type f
    
  3. A saída do comando será semelhante ao exemplo a seguir:

    /data/avrofiles/2019/4/18/22/10.avro
    

    Você pode ter mais de um único arquivo, dependendo do tempo de execução.

  4. Preste atenção aos carimbos de data/hora. O módulo avroFileWriter carrega os arquivos para a nuvem quando o tempo da última modificação é superior a 10 minutos no passado (veja MODIFIED_FILE_TIMEOUT em uploader.py no módulo avroFileWriter).

  5. Decorridos os 10 minutos, o módulo deverá carregar os ficheiros. Se o carregamento for bem-sucedido, ele excluirá os arquivos do disco.

Armazenamento do Azure

Podemos observar os resultados do envio de dados do nosso dispositivo a jusante observando as contas de armazenamento para as quais esperamos que os dados sejam encaminhados.

  1. Na máquina de desenvolvimento, abra o Visual Studio Code.

  2. No painel "AZURE STORAGE" na janela de exploração, navegue na árvore para encontrar sua conta de armazenamento.

  3. Expanda o nó Contêineres de Blob.

  4. A partir do trabalho que fizemos na parte anterior do tutorial, esperamos que o contêiner ruldata contenha mensagens com RUL. Expanda o nó ruldata .

  5. Você verá um ou mais arquivos de blob nomeados como: <IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>.

  6. Clique com o botão direito do mouse em um dos arquivos e escolha Baixar Blob para salvar o arquivo em sua máquina de desenvolvimento.

  7. Em seguida, expanda o nó uploadturbofanfiles . No artigo anterior, definimos esse local como o destino para arquivos carregados pelo módulo avroFileWriter.

  8. Clique com o botão direito do mouse nos arquivos e escolha Baixar Blob para salvá-lo em sua máquina de desenvolvimento.

Ler o conteúdo do arquivo Avro

Incluímos um utilitário de linha de comando simples para ler um arquivo Avro e retornar uma cadeia de caracteres JSON das mensagens no arquivo. Nesta seção, vamos instalá-lo e executá-lo.

  1. Abra um terminal no Visual Studio Code (Terminal>Novo terminal).

  2. Instale o hubavroreader:

    pip install c:\source\IoTEdgeAndMlSample\HubAvroReader
    
  3. Use hubavroreader para ler o arquivo Avro que você baixou do ruldata.

    hubavroreader <avro file with ath> | more
    
  4. Observe que o corpo da mensagem parece como esperávamos com o ID do dispositivo e o RUL previsto.

    {
        "Body": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CycleTime": 1.0,
            "PredictedRul": 170.1723693909444
        },
        "EnqueuedTimeUtc": "<time>",
        "Properties": {
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "CreationTimeUtc": "01/01/0001 00:00:00",
            "EnqueuedTimeUtc": "01/01/0001 00:00:00"
        },
        "SystemProperties": {
            "connectionAuthMethod": "{\"scope\":\"module\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "connectionDeviceGenerationId": "636857841798304970",
            "connectionDeviceId": "aaTurbofanEdgeDevice",
            "connectionModuleId": "turbofanRouter",
            "contentEncoding": "utf-8",
            "contentType": "application/json",
            "correlationId": "3d0bc256-b996-455c-8930-99d89d351987",
            "enqueuedTime": "<time>",
            "iotHubName": "mledgeiotwalkthroughhub"
        }
    }
    
  5. Execute o mesmo comando passando o arquivo Avro que você baixou de uploadturbofanfiles.

  6. Como esperado, essas mensagens contêm todos os dados do sensor e configurações operacionais da mensagem original. Esses dados podem ser usados para melhorar o modelo RUL em nosso dispositivo de borda.

    {
        "Body": {
            "CycleTime": 1.0,
            "OperationalSetting1": -0.0005000000237487257,
            "OperationalSetting2": 0.00039999998989515007,
            "OperationalSetting3": 100.0,
            "PredictedRul": 170.17236328125,
            "Sensor1": 518.6699829101562,
            "Sensor10": 1.2999999523162842,
            "Sensor11": 47.29999923706055,
            "Sensor12": 522.3099975585938,
            "Sensor13": 2388.010009765625,
            "Sensor14": 8145.31982421875,
            "Sensor15": 8.424599647521973,
            "Sensor16": 0.029999999329447746,
            "Sensor17": 391.0,
            "Sensor18": 2388.0,
            "Sensor19": 100.0,
            "Sensor2": 642.3599853515625,
            "Sensor20": 39.11000061035156,
            "Sensor21": 23.353700637817383,
            "Sensor3": 1583.22998046875,
            "Sensor4": 1396.8399658203125,
            "Sensor5": 14.619999885559082,
            "Sensor6": 21.610000610351562,
            "Sensor7": 553.969970703125,
            "Sensor8": 2387.9599609375,
            "Sensor9": 9062.169921875
        },
            "ConnectionDeviceId": "Client_001",
            "CorrelationId": "70df0c98-0958-4c8f-a422-77c2a599594f",
            "CreationTimeUtc": "0001-01-01T00:00:00+00:00",
            "EnqueuedTimeUtc": "<time>"
    }
    

Clean up resources (Limpar recursos)

Se você planeja explorar os recursos usados por este tutorial de ponta a ponta, aguarde até terminar de limpar os recursos que você criou. Caso contrário, use as seguintes etapas para excluí-los:

  1. Exclua o(s) grupo(s) de recursos criado(s) para armazenar a VM de Desenvolvimento, a VM do IoT Edge, o Hub IoT, a conta de armazenamento, o serviço de espaço de trabalho de aprendizado de máquina (e os recursos criados: registro de contêiner, Application Insights, cofre de chaves, conta de armazenamento).

  2. Exclua o projeto de aprendizado de máquina nos Blocos de Anotações do Azure.

  3. Se você clonou o repositório localmente, feche todas as janelas do PowerShell ou do VS Code referentes ao repositório local e exclua o diretório do repositório.

  4. Se você criou certificados localmente, exclua a pasta c:\edgeCertificates.

Próximos passos

Neste artigo, usamos nossa VM de desenvolvimento para simular um dispositivo downstream enviando sensores e dados operacionais para nosso dispositivo IoT Edge. Validamos que os módulos no dispositivo rotearam, classificaram, persistiram e carregaram os dados examinando a operação em tempo real do dispositivo de borda e observando os arquivos carregados na conta de armazenamento.

Para continuar aprendendo sobre os recursos do IoT Edge, tente este tutorial a seguir: