Exercício – executar os dispositivos simulados

Concluído

Neste exercício, você executará o dispositivo simulado. Quando o dispositivo é iniciado pela primeira vez, ele se conecta ao Serviço de Provisionamento de Dispositivos (DPS), que o registra automaticamente usando o registro de grupo configurado.

Depois que o dispositivo é registrado no registro de grupo do DPS, o dispositivo é registrado automaticamente no registro de dispositivo do Hub IoT. Depois que o dispositivo é registrado, ele pode começar a se comunicar com o Hub IoT do Azure com segurança usando a autenticação de certificado de dispositivo X.509 configurada.

Tarefa 1: Compilar e executar os projetos de dispositivo simulados

  1. No Visual Studio Code, abra a pasta sensor-thl-001-device se ela ainda não estiver aberta.

  2. No Visual Studio, abra o menu Terminal e selecione Novo terminal para abrir o Terminal integrado na parte inferior da janela do Visual Studio Code.

  3. No prompt de comando do Terminal, certifique-se de que o diretório de trabalho atual seja a pasta \sensor-thl-001-device.

  4. Crie e execute o projeto ContainerDevice:

    dotnet run
    

    Observação

    Quando você executa o dispositivo simulado pela primeira vez, o erro mais comum é um erro de certificado inválido. Esse erro pode causar uma exceção ProvisioningTransportException. Se você vir uma mensagem semelhante ao exemplo a seguir, certifique-se de que o certificado de Autoridade de Certificação no DPS e o certificado do dispositivo para o aplicativo de dispositivo simulado estejam configurados corretamente. Na seção Verificar seu trabalho na parte inferior desta página da Web, há comandos do Cloud Shell para mostrar informações de certificado de Autoridade de Certificação e dispositivo registradas do DPS que podem ser usadas para ajudar a diagnosticar um erro.

    localmachine:LabFiles User$ dotnet run
    Found certificate: AFF851ED016CA5AEB71E5749BCBE3415F8CF4F37 CN=sensor-thl-001; PrivateKey: True
    Using certificate AFF851ED016CA5AEB71E5749BCBE3415F8CF4F37 CN=sensor-thl-001
    RegistrationID = sensor-thl-001
    ProvisioningClient RegisterAsync . . . Unhandled exception. Microsoft.Azure.Devices.Provisioning.Client.ProvisioningTransportException: {"errorCode":401002,"trackingId":"2e298c80-0974-493c-9fd9-6253fb055ade","message":"Invalid certificate.","timestampUtc":"2019-12-13T14:55:40.2764134Z"}
      at Microsoft.Azure.Devices.Provisioning.Client.Transport.ProvisioningTransportHandlerAmqp.ValidateOutcome(Outcome outcome)
      at Microsoft.Azure.Devices.Provisioning.Client.Transport.ProvisioningTransportHandlerAmqp.RegisterDeviceAsync(AmqpClientConnection client, String correlationId, DeviceRegistration deviceRegistration)
      at Microsoft.Azure.Devices.Provisioning.Client.Transport.ProvisioningTransportHandlerAmqp.RegisterAsync(ProvisioningTransportRegisterMessage message, CancellationToken cancellationToken)
      at X509CertificateContainerDevice.ProvisioningDeviceLogic.RunAsync() in /Users/User/Documents/AZ-220/LabFiles/Program.cs:line 121
      at X509CertificateContainerDevice.Program.Main(String[] args) in /Users/User/Documents/AZ-220/LabFiles/Program.cs:line 55
    ...
    
  5. Observe que o aplicativo de dispositivo simulado envia a saída para a janela Terminal.

    Quando o aplicativo de dispositivo simulado está sendo executado corretamente, o Terminal exibe a saída do Console do aplicativo.

    Role até a parte superior das informações exibidas na janela Terminal.

    Observe que o certificado do dispositivo X.509 sensor-thl-001 foi carregado, o dispositivo foi registrado com o Serviço de Provisionamento de Dispositivos, ele foi atribuído para se conectar ao Hub IoT hub-{your-suffix} e as propriedades desejadas do dispositivo gêmeo foram carregadas.

    localmachine:LabFiles User$ dotnet run
    Found certificate: AFF851ED016CA5AEB71E5749BCBE3415F8CF4F37 CN=sensor-thl-001; PrivateKey: True
    Using certificate AFF851ED016CA5AEB71E5749BCBE3415F8CF4F37 CN=sensor-thl-001
    RegistrationID = sensor-thl-001
    ProvisioningClient RegisterAsync . . . Device Registration Status: Assigned
    ProvisioningClient AssignedHub: hub-1119.azure-devices.net; DeviceID: sensor-thl-001
    Creating X509 DeviceClient authentication.
    simulated device. Ctrl-C to exit.
    DeviceClient OpenAsync.
    Connecting SetDesiredPropertyUpdateCallbackAsync event handler...
    Loading Device Twin Properties...
    Desired Twin Property Changed:
    {"$version":1}
    Reported Twin Properties:
    {"telemetryDelay":1}
    Start reading and sending device telemetry...
    

    Para examinar o código-fonte do dispositivo simulado, abra o arquivo de código-fonte Program.cs. Procure as instruções Console.WriteLine usadas para gerar as mensagens vistas no console.

  6. Observe que as mensagens de telemetria formatadas em JSON estão sendo enviadas para o Hub IoT.

    Start reading and sending device telemetry...
    12/9/2019 5:47:00 PM > Sending message: {"temperature":24.047539159212047,"humidity":67.00504162675004,"pressure":1018.8478924248358,"latitude":40.129349260196875,"longitude":-98.42877188146265}
    12/9/2019 5:47:01 PM > Sending message: {"temperature":26.628804161040485,"humidity":68.09610794675355,"pressure":1014.6454375411363,"latitude":40.093269544242695,"longitude":-98.22227128174003}
    

    Depois que o dispositivo simulado concluir as tarefas iniciais de inicialização, provisionamento e registro, ele enviará mensagens simuladas de telemetria do sensor para o Hub IoT.

    Observe que o atraso entre cada mensagem enviada ao Hub IoT, conforme definido pela propriedade do dispositivo gêmeo telemetryDelay, está atrasando 1 segundo entre o envio de mensagens de telemetria do sensor.

  7. Deixe o dispositivo simulado em execução.

Tarefa 2: Iniciar o outro dispositivo simulado

  1. Abra uma nova instância do Visual Studio Code.

    Você pode abrir a nova instância no Visual Studio Code: abra o menu Arquivo e selecione Nova janela.

  2. Na nova janela do Visual Studio Code, no menu Arquivo, selecione Abrir pasta.

  3. Navegue até a pasta sensor-thl-002-device e selecione Selecionar pasta.

  4. No Visual Studio, abra o menu Terminal e selecione Novo terminal para abrir o Terminal integrado na parte inferior da janela do Visual Studio Code.

  5. No prompt de comando terminal, certifique-se de que o diretório de trabalho atual seja a pasta \sensor-thl-002-device.

  6. Compile e execute o projeto ContainerDevice.

    dotnet run
    

Tarefa 3: Alterar a configuração do dispositivo por meio de seu gêmeo

Quando você criou o registro de grupo no DPS, defina a configuração inicial do gêmeo para que seus dispositivos tenham uma propriedade telemetryDelay definida como 1 segundo. Com os dispositivos simulados em execução, a configuração telemetryDelay pode ser atualizada editando o estado desejado do dispositivo gêmeo no Hub IoT.

  1. Na área restrita do Azure, atualize as propriedades desejadas do dispositivo sensor-thl-001 para enviar telemetria a cada 3 segundos.

    az iot hub device-twin update --hub-name hub-$suffix --device-id sensor-thl-001 --desired "{'telemetryDelay':'3'}"
    
  2. Volte para a janela do Visual Studio Code que está executando o projeto ContainerDevice da pasta sensor-thl-001-device.

  3. Observe que o aplicativo foi notificado sobre a configuração de propriedade desejada do dispositivo gêmeo atualizada telemetryDelay.

    O aplicativo gera mensagens para o Console que mostram que as novas propriedades desejadas do dispositivo gêmeo são carregadas e que as alterações são definidas e relatadas de volta para o Hub IoT do Azure.

    Desired Twin Property Changed:
    {"telemetryDelay":3,"$version":2}
    Reported Twin Properties:
    {"telemetryDelay":3}
    
  4. Observe que as mensagens de telemetria do sensor de dispositivo simulado agora estão sendo enviadas para o Hub IoT do Azure a cada 3 segundos.

    12/9/2019 5:48:07 PM > Sending message: {"temperature":33.89822140284731,"humidity":78.34939097908763,"pressure":1024.9467544610131,"latitude":40.020042418755764,"longitude":-98.41923808825841}
    12/9/2019 5:48:10 PM > Sending message: {"temperature":27.475786026323114,"humidity":64.4175510594703,"pressure":1020.6866468579678,"latitude":40.2089999240047,"longitude":-98.26223221770334}
    12/9/2019 5:48:13 PM > Sending message: {"temperature":34.63600901637041,"humidity":60.95207713588703,"pressure":1013.6262313688063,"latitude":40.25499096898331,"longitude":-98.51199886959347}
    
  5. No painel Terminal, para sair do aplicativo de dispositivo simulado, pressione Ctrl-C.

  6. Alterne para a outra janela do Visual Studio Code e use o prompt do Terminal para interromper o aplicativo de dispositivo simulado.

    Não feche as janelas do Visual Studio Code ainda, pois você volta para executar novamente os programas no próximo exercício.

Verificar seu trabalho

  1. Se qualquer um dos seus programas não funcionar, corrija os erros antes de prosseguir para o próximo exercício.

  2. Verifique se o valor do dispositivo gêmeo telemetryDelay é 3 segundos.

    az iot hub device-twin show --hub-name hub-$suffix --device-id sensor-thl-001