Ejercicio: Ejecución de los dispositivos simulados
En este ejercicio, ejecutará el dispositivo simulado. Cuando el dispositivo se inicia por primera vez, se conecta al servicio de aprovisionamiento de dispositivos (DPS) que lo inscribe automáticamente mediante la inscripción de grupo configurada.
Una vez que el dispositivo se inscribe en la inscripción de grupo de DPS, se registra automáticamente en el registro de dispositivos de IoT Hub. Una vez que el dispositivo está inscrito y registrado, puede empezar a comunicarse con Azure IoT Hub de forma segura mediante la autenticación de certificado de dispositivo X.509 configurada.
Tarea 1: Compilación y ejecución de los proyectos de dispositivo simulado
En Visual Studio Code, abra la carpeta sensor-thl-001-device si aún no está abierta.
En Visual Studio, abra el menú Terminal y, después, seleccione Nuevo terminal para abrir el terminal integrado en la parte inferior de la ventana de Visual Studio Code.
En el símbolo del sistema de Terminal, asegúrese de que el directorio de trabajo actual es la carpeta \sensor-thl-001-device.
Compile y ejecute el proyecto ContainerDevice:
dotnet run
Nota:
Al ejecutar el dispositivo simulado por primera vez, el error más común es un error de certificado no válido. Este error puede provocar una excepción ProvisioningTransportException. Si ve un mensaje similar al ejemplo siguiente, asegúrese de que el certificado de CA en DPS y el certificado de dispositivo de la aplicación de dispositivo simulado están configurados correctamente. En la sección Comprobar el trabajo de la parte inferior de esta página web, hay comandos de Cloud Shell para mostrar la información del certificado de entidad de certificación y dispositivo registrada de DPS que se pueden usar para ayudar a diagnosticar un error.
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 la aplicación de dispositivo simulado envía la salida a la ventana Terminal.
Cuando la aplicación de dispositivo simulado se ejecuta correctamente, en Terminal se muestra la salida de la consola de la aplicación.
Desplácese hacia arriba hasta la parte superior de la información que se muestra en la ventana Terminal.
Observe que se ha cargado el certificado de dispositivo X.509 sensor-thl-001, que el dispositivo se ha registrado con el servicio de aprovisionamiento de dispositivos, que se ha asignado para conectarse al centro de IoT hub-{el-sufijo} y que se han cargado las propiedades deseadas del dispositivo gemelo.
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 el código fuente del dispositivo simulado, abra el archivo de código fuente Program.cs. Busque las instrucciones Console.WriteLine que se usan para generar los mensajes que se ven en la consola.
Observe que los mensajes de telemetría con formato JSON se envían a IoT Hub.
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}
Una vez que el dispositivo simulado completa las tareas de inicio, aprovisionamiento y registro iniciales, envía mensajes de telemetría del sensor simulado a IoT Hub.
Observe que el retraso entre cada mensaje enviado a IoT Hub, tal como se define en la propiedad de dispositivo gemelo telemetryDelay, actualmente se retrasa un segundo entre el envío de mensajes de telemetría del sensor.
Deje el dispositivo simulado en ejecución.
Tarea 2: Inicio del otro dispositivo simulado
Abra una nueva instancia de Visual Studio Code.
Puede abrir la nueva instancia desde Visual Studio Code: abra el menú Archivo y seleccione Nueva ventana.
En la nueva ventana de Visual Studio Code, en el menú Archivo, seleccione Abrir carpeta.
Vaya a la carpeta sensor-thl-002-device y elija Seleccionar carpeta.
En Visual Studio, abra el menú Terminal y, después, seleccione Nuevo terminal para abrir el terminal integrado en la parte inferior de la ventana de Visual Studio Code.
En el símbolo del sistema de Terminal, asegúrese de que el directorio de trabajo actual es la carpeta \sensor-thl-002-device.
Compile y ejecute el proyecto ContainerDevice.
dotnet run
Tarea 3: Cambio de la configuración del dispositivo desde su gemelo
Al crear la inscripción de grupo en DPS, ha establecido la configuración inicial del gemelo para que los dispositivos tengan una propiedad telemetryDelay establecida en 1 segundo. Con los dispositivos simulados en ejecución, la configuración telemetryDelay se puede actualizar si se edita el estado deseado del dispositivo gemelo desde IoT Hub.
En el espacio aislado de Azure, actualice las propiedades deseadas del dispositivo sensor-thl-001 para enviar telemetría cada 3 segundos.
az iot hub device-twin update --hub-name hub-$suffix --device-id sensor-thl-001 --desired "{'telemetryDelay':'3'}"
Vuelva a la ventana de Visual Studio Code en la que se ejecuta el proyecto ContainerDevice de la carpeta sensor-thl-001-device.
Observe que se ha notificado a la aplicación la configuración actualizada de la propiedad telemetryDelay deseada del dispositivo gemelo.
La aplicación genera mensajes en la consola que muestran que se han cargado las nuevas propiedades deseadas del dispositivo gemelo y que los cambios se han establecido y se han vuelto a notificar a Azure IoT Hub.
Desired Twin Property Changed: {"telemetryDelay":3,"$version":2} Reported Twin Properties: {"telemetryDelay":3}
Observe que los mensajes de telemetría del sensor de dispositivo simulado ahora se envían a Azure IoT Hub cada tres 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}
En el panel Terminal, presione Ctrl-C para salir de la aplicación de dispositivo simulado.
Cambie a la otra ventana de Visual Studio Code y use el símbolo del sistema de Terminal para detener la aplicación de dispositivo simulado.
No cierre todavía las ventanas de Visual Studio Code, ya que volverá a ejecutar los programas en el ejercicio siguiente.
Comprobación del trabajo
Si alguno de los programas no ha funcionado, corrija los errores antes de continuar con el ejercicio siguiente.
Compruebe que el valor
telemetryDelay
del dispositivo gemelo es3
segundos.az iot hub device-twin show --hub-name hub-$suffix --device-id sensor-thl-001