Exercício - Execute os dispositivos simulados
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
No Visual Studio Code, abra a pasta sensor-thl-001-device se ela ainda não estiver aberta.
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.
No prompt de comando do Terminal, verifique se o diretório de trabalho atual é a pasta \sensor-thl-001-device .
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 ...
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.
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.
Deixe o dispositivo simulado em execução.
Tarefa 2: Iniciar o outro dispositivo simulado
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.
Na nova janela Visual Studio Code, no menu Arquivo , selecione Abrir pasta.
Navegue até a pasta sensor-thl-002-device e selecione Selecionar pasta.
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.
No prompt de comando do Terminal, verifique se o diretório de trabalho atual é a pasta \sensor-thl-002-device .
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.
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'}"
Volte para a janela Visual Studio Code que está executando o projeto ContainerDevice da pasta sensor-thl-001-device .
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}
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}
No painel Terminal, para sair do aplicativo de dispositivo simulado, pressione Ctrl-C.
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
Se algum dos seus programas não funcionou, corrija os erros antes de prosseguir para o próximo exercício.
Verifique se o valor Device Twin
telemetryDelay
é3
segundos.az iot hub device-twin show --hub-name hub-$suffix --device-id sensor-thl-001