Tutorial: Envío de datos mediante una puerta de enlace transparente
Se aplica a: IoT Edge 1.1
Importante
IoT Edge 1.1: la fecha de finalización del soporte técnico fue el 13 de diciembre de 2022. Consulte la página del ciclo de vida de productos de Microsoft para obtener información sobre cómo se admite este producto, servicio, tecnología o API. Para más información sobre cómo actualizar a la versión más reciente de IoT Edge, consulte Actualización de IoT Edge.
En este artículo usaremos de nuevo la máquina virtual de desarrollo como un dispositivo simulado. Sin embargo, en lugar de enviar datos directamente a IoT Hub, el dispositivo envía los datos al dispositivo de IoT Edge configurado como puerta de enlace transparente.
Supervisamos el funcionamiento del dispositivo de IoT Edge mientras el dispositivo simulado envía datos. Una vez que el dispositivo termina de ejecutarse, nos centramos en los datos en nuestra cuenta de almacenamiento para validar que todo haya funcionado según lo previsto.
Normalmente, este paso está a cargo de un desarrollador de nube o de dispositivo.
En esta sección del tutorial, aprenderá a:
- Compilar y ejecutar un dispositivo de bajada
- Comprobar que los datos generados se almacenan en Azure Blob Storage.
- Comprobar que el modelo de aprendizaje automático ha clasificado los datos del dispositivo.
Requisitos previos
Este artículo forma parte de un tutorial sobre el uso de Azure Machine Learning en IoT Edge. Cada artículo de la serie se basa en el trabajo del artículo anterior. Si ha llegado a este artículo directamente, visite el primer artículo de la serie.
Revisar DeviceHarness
Reutilice el proyecto DeviceHarness para simular dispositivo de bajada. La conexión a la puerta de enlace transparente requiere dos cosas adicionales:
- Registrar el certificado para que el dispositivo IoT de nivel inferior confíe en la entidad de certificación que usa el entorno de ejecución de IoT Edge. En nuestro caso, el dispositivo de nivel inferior es la máquina virtual de desarrollo.
- Agrega el nombre de dominio completo (FQDN) de la puerta de enlace de perímetro a la cadena de conexión del dispositivo.
Examina el código para ver cómo se implementan estos dos elementos.
Abre Visual Studio Code en la máquina de desarrollo.
Use archivo>Abrir carpeta… para abrir C:\source\IoTEdgeAndMlSample\DeviceHarness.
Examina el método InstallCertificate() en Program.cs.
Ten en cuenta que, si el código encuentra la ruta de acceso del certificado, llama al método CertificateManager.InstallCACert para instalar el certificado en la máquina.
Ahora examina el método GetIotHubDevice en la clase TurbofanDevice.
Cuando el usuario especifica el FQDN de la puerta de enlace con la opción "-g", ese valor se pasa a este método como la variable
gatewayFqdn
, que se anexa a la cadena de conexión del dispositivo.connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
Compilación y ejecución de un dispositivo de bajada
Con el proyecto DeviceHarness todavía abierto en Visual Studio Code, compile el proyecto. En el menú Terminal, seleccione Ejecutar tarea de compilación y después Compilación.
Para buscar el nombre de dominio completo (FQDN) para la puerta de enlace de Edge, vaya al dispositivo IoT Edge (Máquina virtual Linux) en Azure Portal y copie el valor de Nombre de DNS desde la página de información general.
Si aún no se está ejecutando, inicie el dispositivo IoT (máquina virtual Linux).
Abra el terminal Visual Studio Code. En el menú Terminal, seleccione Nuevo terminal y ejecute el siguiente comando, reemplazando
<edge_device_fqdn>
por el nombre DNS que copió del dispositivo IoT Edge (máquina virtual Linux):dotnet run -- --gateway-host-name "<edge_device_fqdn>" --certificate C:\edgecertificates\certs\azure-iot-test-only.root.ca.cert.pem --max-devices 1
La aplicación intenta instalar el certificado en la máquina de desarrollo. Al hacerlo, acepta la advertencia de seguridad.
Cuando se le pida la cadena de conexión de IoT Hub, haga clic en los puntos suspensivos ( … ) en el panel de dispositivos de Azure IoT Hub y seleccione Copy IoT Hub Connection String (Copia cadena de conexión de IoT Hub). Pega el valor en el terminal.
Verás un resultado similar a:
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
Tenga en cuenta la incorporación de "GatewayHostName" a la cadena de conexión del dispositivo, que hace que el dispositivo se comunique con IoT Hub mediante la puerta de enlace transparente de IoT Edge.
Consulta la salida
Salida del dispositivo de IoT Edge
La salida del módulo avroFileWriter puede observarse fácilmente echando un vistazo al dispositivo de IoT Edge.
Usa SSH en la máquina virtual de IoT Edge.
Busca los archivos escritos en el disco.
find /data/avrofiles -type f
La salida del comando tendrá un aspecto similar al ejemplo siguiente:
/data/avrofiles/2019/4/18/22/10.avro
Es posible que haya más de un único archivo, según el tiempo de la ejecución.
Presta atención a las marcas de tiempo. El módulo avroFileWriter carga los archivos en la nube una vez transcurridos más de diez minutos desde la hora de la última modificación. (Consulte MODIFIED_FILE_TIMEOUT en uploader.py en el módulo avroFileWriter).
Una vez que hayan transcurrido los 10 minutos, el módulo debería cargar los archivos. Si la carga es correcta, los archivos se eliminan del disco.
Azure Storage
Para ver los resultados de nuestro dispositivo de bajada que envía datos, podemos echar un vistazo a las cuentas de almacenamiento donde esperamos que se enruten los datos.
Abre Visual Studio Code en la máquina de desarrollo.
En el panel "AZURE STORAGE" de la ventana del explorador, examine el árbol para encontrar la cuenta de almacenamiento.
Expanda el nodo Contenedores de blobs.
A partir del trabajo que hicimos en la parte anterior del tutorial, esperamos que el contenedor ruldata contenga los mensajes con la vida útil restante. Expande el nodo ruldata.
Verás uno o varios archivos de blob denominados como:
<IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>
.Haz clic con el botón derecho en uno de los archivos y elige Descargar blob para guardar el archivo en la máquina de desarrollo.
Luego, expande el nodo uploadturbofanfiles. En el artículo anterior, establecimos esta ubicación como destino para los archivos cargados por el módulo avroFileWriter.
Haz clic con el botón derecho en los archivos y elige Descargar blob para guardarlo en la máquina de desarrollo.
Leer el contenido del archivo Avro
Incluimos una utilidad de línea de comandos sencilla para leer un archivo Avro y devolver una cadena JSON de los mensajes en el archivo. En esta sección, la instalaremos y ejecutaremos.
Abre un terminal en Visual Studio Code (Terminal>Nuevo terminal).
Instala hubavroreader:
pip install c:\source\IoTEdgeAndMlSample\HubAvroReader
Usa hubavroreader para leer el archivo Avro que descargaste de ruldata.
hubavroreader <avro file with ath> | more
Ten en cuenta que el cuerpo del mensaje se ve como lo esperábamos con el id. de dispositivo y la vida útil restante predicha.
{ "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" } }
Ejecuta el mismo comando pasando el archivo Avro que descargaste de uploadturbofanfiles.
Según lo previsto, estos mensajes contienen todos los datos de los sensores y la configuración operativa del mensaje original. Estos datos se podrían usar para mejorar el modelo RUL en el dispositivo de borde.
{ "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>" }
Limpieza de recursos
Si tienes previsto explorar los recursos usados por este tutorial completo, espera hasta terminar de limpiar los recursos que has creado. De lo contrario, siga estos pasos para eliminar los recursos:
Elimine los grupos de recursos creados para contener la máquina virtual de desarrollo, la máquina virtual de IoT Edge, IoT Hub, la cuenta de almacenamiento, el servicio de área de trabajo de aprendizaje automático (y los recursos creados: registro de contenedor, Application Insights, almacén de claves, cuenta de almacenamiento).
Elimine el proyecto de aprendizaje automático en Azure Notebooks.
Si has clonado el repositorio localmente, cierra las ventanas de PowerShell o VS Code que hagan referencia al repositorio local y, luego, elimina el directorio del repositorio.
Si ha creado los certificados de forma local, elimine la carpeta c:\edgeCertificates.
Pasos siguientes
En este artículo, hemos usado la máquina virtual de desarrollo para simular un dispositivo de bajada que envía dados operativos y de sensores al dispositivo IoT Edge. Hemos validado que los módulos en el dispositivo enrutaran, clasificaran, persistieran y cargaran los datos mediante el examen de la operación en tiempo real del dispositivo perimetral y echando un vistazo a los archivos cargados en la cuenta de almacenamiento.
Para aprender más sobre la funcionalidad de IoT Edge, siga este tutorial a continuación: