Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:
IoT Edge 1.1
Importante
IoT Edge 1.1 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 obtener más información sobre cómo actualizar a la versión más reciente de IoT Edge, consulte Update IoT Edge.
En este artículo, se vuelve a usar 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 datos al dispositivo IoT Edge configurado como puerta de enlace transparente.
Supervisamos el funcionamiento del dispositivo IoT Edge mientras el dispositivo simulado envía datos. Una vez que el dispositivo haya terminado de ejecutarse, veremos los datos de nuestra cuenta de almacenamiento para validar que todo funcionó según lo previsto.
Normalmente, este paso lo realiza un desarrollador de dispositivos o en la nube.
En esta sección del tutorial, aprenderá a:
- Construye y ejecuta un dispositivo externo.
- Compruebe que los datos generados se almacenan en Azure Blob Storage.
- Compruebe que el modelo de Machine Learning clasificó los datos del dispositivo.
Prerrequisitos
Este artículo forma parte de una serie de un tutorial acerca del 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 directamente a este artículo, visite el primer artículo de la serie.
Revisión del arnés del dispositivo
Vuelva a usar el proyecto DeviceHarness para simular el dispositivo receptor. La conexión a la puerta de enlace transparente requiere dos cosas adicionales:
- Registre 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 destino es la máquina virtual de desarrollo.
- Agregue el nombre de dominio completo (FQDN) de la puerta de enlace perimetral a la cadena de conexión del dispositivo.
Examine el código para ver cómo se implementan estos dos elementos.
En su máquina de desarrollo, abra Visual Studio Code.
Use Abrir carpeta>de archivos... para abrir C:\source\IoTEdgeAndMlSample\DeviceHarness.
Examine el método InstallCertificate() en Program.cs.
Tenga 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 examine el método GetIotHubDevice en la clase TurbofanDevice.
Cuando el usuario especifica el FQDN de la puerta de enlace mediante la opción "-g", ese valor se pasa a este método como la
gatewayFqdnvariable , que se anexa a la cadena de conexión del dispositivo.connectionString = $"{connectionString};GatewayHostName={gatewayFqdn.ToLower()}";
Compila y ejecuta el dispositivo posterior
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 seleccione Compilar.
Busque el nombre de dominio completo (FQDN) de la puerta de enlace perimetral; para ello, vaya al dispositivo IoT Edge (VM Linux) en Azure Portal y copie el valor del nombre DNS en la página de información general.
Inicie el dispositivo IoT (máquina virtual Linux) si aún no se está ejecutando.
Abra el terminal de Visual Studio Code. En el menú Terminal , seleccione Nuevo terminal y ejecute el comando siguiente, reemplazando por
<edge_device_fqdn>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 1La aplicación intenta instalar el certificado en la máquina de desarrollo. Cuando lo haga, acepte la advertencia de seguridad.
Cuando se le solicite la cadena de conexión de IoT Hub, haga clic en los puntos suspensivos (...) en el panel Dispositivos de Azure IoT Hub y seleccione Copiar cadena de conexión de IoT Hub. Pegue el valor en el terminal.
Verá una salida similar a la siguiente:
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: 250Tenga en cuenta la adición de "GatewayHostName" a la cadena de conexión del dispositivo, lo que hace que el dispositivo se comunique a través de IoT Hub a través de la puerta de enlace transparente de IoT Edge.
Comprobación de la salida
Salida del dispositivo IoT Edge
La salida del módulo avroFileWriter se puede observar fácilmente examinando el dispositivo IoT Edge.
Accede a través de SSH a tu máquina virtual de IoT Edge.
Busque los archivos escritos en el disco.
find /data/avrofiles -type fLa salida del comando tendrá un aspecto similar al del ejemplo siguiente:
/data/avrofiles/2019/4/18/22/10.avroEs posible que tenga más de un único archivo en función del tiempo de ejecución.
Preste atención a las marcas de tiempo. El módulo avroFileWriter carga los archivos en la nube una vez que han pasado más de 10 minutos desde la última modificación (consulte MODIFIED_FILE_TIMEOUT en uploader.py en el módulo avroFileWriter).
Una vez transcurridos los 10 minutos, el módulo debe cargar los archivos. Si la carga se realiza correctamente, elimina los archivos del disco.
Azure Storage
Podemos ver los resultados de nuestro dispositivo descendente enviando datos al observar las cuentas de almacenamiento donde esperamos que los datos se enruten.
En la máquina de desarrollo, abra Visual Studio Code.
En el panel "AZURE STORAGE" de la ventana de exploración, navegue por el árbol para encontrar su cuenta de almacenamiento.
Expanda el nodo Blob Containers.
A partir del trabajo que hicimos en la parte anterior del tutorial, esperamos que el contenedor ruldata contenga mensajes con RUL. Expanda el nodo ruldata .
Verá uno o varios archivos de blob denominados como:
<IoT Hub Name>/<partition>/<year>/<month>/<day>/<hour>/<minute>.Haga clic con el botón derecho en uno de los archivos y elija Descargar blob para guardar el archivo en la máquina de desarrollo.
A continuación, expanda el nodo uploadturbofanfiles . En el artículo anterior, establecemos esta ubicación como destino para los archivos cargados por el módulo avroFileWriter.
Haga clic con el botón derecho en los archivos y elija Descargar blob para guardarlo en la máquina de desarrollo.
Leer el contenido del archivo avro
Hemos incluido una utilidad de línea de comandos simple para leer un archivo Avro y devolver una cadena JSON de los mensajes en el archivo. En esta sección, instalaremos y ejecutaremos el programa.
Abra un terminal en Visual Studio Code (Terminal>Nuevo terminal).
Instale hubavroreader:
pip install c:\source\IoTEdgeAndMlSample\HubAvroReaderUse hubavroreader para leer el archivo Avro que descargó de ruldata.
hubavroreader <avro file with ath> | moreTenga en cuenta que el cuerpo del mensaje tiene el aspecto esperado con el identificador de dispositivo y el RUL previsto.
{ "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" } }Ejecute el mismo comando pasando el archivo Avro que descargó de uploadturbofanfiles.
Como se esperaba, estos mensajes contienen todos los datos del sensor y la configuración operativa del mensaje original. Estos datos se pueden usar para mejorar el modelo RUL en nuestro 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 tiene previsto explorar los recursos usados por este tutorial completo, espere hasta que haya terminado para limpiar los recursos que creó. De lo contrario, siga estos pasos para eliminarlos:
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 Machine Learning (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 ha clonado el repositorio localmente, cierre las ventanas de PowerShell o VS Code que hacen referencia al repositorio local y, a continuación, elimine el directorio del repositorio.
Si ha creado certificados localmente, elimine la carpeta c:\edgeCertificates.
Pasos siguientes
En este artículo, usamos nuestra máquina virtual de desarrollo para simular un dispositivo aguas abajo que envía datos operativos y de sensor a nuestro dispositivo de borde IoT. Hemos validado que los módulos del dispositivo han enrutado, clasificado, persistido y cargado los datos examinando la operación en tiempo real del dispositivo perimetral y los archivos cargados en la cuenta de almacenamiento.
Para seguir aprendiendo sobre las funcionalidades de IoT Edge, pruebe este tutorial a continuación: