Exercício - Execute os dispositivos simulados

Concluído

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

Depois que o dispositivo é registrado no registro do grupo DPS, ele é registrado automaticamente no registro do dispositivo do Hub IoT. Depois que o dispositivo é registrado e 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: Criar 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 Código do Visual Studio.

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

  4. Crie e execute o projeto ContainerDevice :

    dotnet run
    

    Nota

    Quando você executa seu 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, verifique se o certificado da autoridade de certificação no DPS e o certificado do dispositivo para o aplicativo de dispositivo simulado estão 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 CA registrada e certificado de dispositivo 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 do Terminal.

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

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

    Observe que o certificado de dispositivo X.509 sensor-thl-001 foi carregado, o dispositivo foi registrado no Serviço de Provisionamento de Dispositivo, foi atribuído para se conectar ao hub IoT hub-{seu-sufixo} e as propriedades desejadas do gêmeo do dispositivo são 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 revisar o código-fonte do dispositivo simulado, abra o arquivo de código-fonte Program.cs . Procure as instruções Console.WriteLine que são usadas para gerar as mensagens vistas para o 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 conclui as tarefas iniciais de inicialização, provisionamento e registro, ele envia 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 gêmea do dispositivo telemetryDelay, está atualmente 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 de dentro do Visual Studio Code: abra o menu Arquivo e selecione Nova janela.

  2. Na nova janela 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 Código do Visual Studio.

  5. No prompt de comando do Terminal, verifique se o diretório de trabalho atual é a pasta \sensor-thl-002-device .

  6. Crie e execute o projeto ContainerDevice .

    dotnet run
    

Tarefa 3: Alterar a configuração do dispositivo através do seu gémeo

Ao criar o registro de grupo no DPS, você define a configuração gêmea inicial 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 no Hub IoT.

  1. Na sandbox 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 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 atualizada da propriedade desejada do dispositivo twin telemetryDelay .

    O aplicativo envia mensagens para o Console que mostram que as propriedades desejadas do novo gêmeo de dispositivo são carregadas e que as alterações são definidas e relatadas de volta ao 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 sua outra janela do Visual Studio Code e use o prompt do Terminal para parar 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.

Verifique o seu trabalho

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

  2. Verifique se o valor Device Twin telemetryDelay é 3 segundos.

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