Cómo conectar dispositivos a través de una puerta de enlace IoT Edge transparente

Un dispositivo IoT Edge puede servir como una puerta de enlace que proporciona una conexión entre otros dispositivos de una red local y la aplicación de IoT Central. Cuando el dispositivo no puede acceder directamente a la aplicación de IoT Central, se usa una puerta de enlace.

IoT Edge admite los patrones de puerta de enlace transparente y de traducción. En este artículo, se resume cómo implementar el patrón de puerta de enlace transparente. En este patrón, la puerta de enlace pasa los mensajes desde el dispositivo de nivel inferior hasta el punto de conexión de IoT Hub en la aplicación de IoT Central. La puerta de enlace no manipula los mensajes a medida que pasan. En IoT Central, cada dispositivo de bajada aparece como secundario para el dispositivo de puerta de enlace:

Diagram that shows IoT Edge as a transparent gateway.

Para simplificar, en este artículo se usan máquinas virtuales para hospedar los dispositivos de puerta de enlace y de bajada. En un escenario real, la puerta de enlace y el dispositivo de nivel inferior se ejecutarían en dispositivos físicos de la red local.

En este artículo, se muestra cómo implementar el escenario mediante el runtime de IoT Edge 1.4.

Requisitos previos

Para completar los pasos de este artículo, necesitará lo siguiente:

Para seguir los pasos de este artículo, descargue los archivos siguientes al equipo:

Importación del manifiesto de implementación

Cada dispositivo IoT Edge necesita un manifiesto de implementación para configurar el entorno de ejecución de Azure IoT Edge. Para importar un manifiesto de implementación para la puerta de enlace transparente de IoT Edge:

  1. Vaya a Manifiestos de Edge.

  2. Seleccione + Nuevo, escriba un nombre para el manifiesto de implementación, como Puerta de enlace transparente y, a continuación, cargue el archivo EdgeTransparentGatewayManifest.json que ha descargado anteriormente.

  3. Seleccione Crear para guardar el manifiesto de implementación en la aplicación.

Incorporación de plantillas de dispositivo

Los dispositivos de nivel inferior y el dispositivo de puerta de enlace pueden usar plantillas de dispositivo en IoT Central. IoT Central permite modelar la relación entre los dispositivos de nivel inferior y la puerta de enlace para que pueda verlos y administrarlos una vez conectados. No se requiere una plantilla de dispositivo para conectar un dispositivo de nivel inferior a una puerta de enlace.

Si desea crear una plantilla de dispositivo para un dispositivo de nivel inferior, cree una plantilla de dispositivo estándar que modele las funcionalidades del dispositivo. En el ejemplo que se muestra en este artículo se utiliza el modelo de dispositivo de termostato que descargó.

Para crear una plantilla de dispositivo para un dispositivo de nivel inferior, siga estos pasos:

  1. Cree una plantilla de dispositivo y elija Dispositivo IoT como el tipo de plantilla.

  2. En la página Personalizar del Asistente, escriba un nombre como Termostato para la plantilla de dispositivo.

  3. Después de crear la plantilla de dispositivo, seleccione Importar un modelo. Seleccione un modelo como el archivo thermostat-1.json que descargó anteriormente.

  4. Para generar algunas vistas predeterminadas para el termostato, seleccione las vistas y, luego, elija Generar vistas predeterminadas.

  5. Publicar la plantilla de dispositivo.

Para crear una plantilla de dispositivo para un dispositivo de puerta de enlace IoT Edge transparente:

  1. Cree una plantilla de dispositivo y elija Azure IoT Edge como el tipo de plantilla.

  2. En la página Personalizar del Asistente, escriba un nombre como Puerta de enlace Edge para la plantilla de dispositivo.

  3. En la página Personalizar del asistente, active Este es un dispositivo de puerta de enlace.

  4. En la página Revisar, seleccione Crear.

  5. En la página Crear un modelo, seleccione Modelo personalizado.

  6. Agregue una entrada en Relaciones a la plantilla de dispositivo de nivel inferior.

En la captura de pantalla siguiente se muestra la página Relaciones de un dispositivo de puerta de enlace IoT Edge que tiene dispositivos de nivel inferior que usan la plantilla de dispositivo Termostato:

Screenshot showing IoT Edge gateway device template relationship with a thermostat downstream device template.

En la captura de pantalla anterior se muestra una plantilla de dispositivo de puerta de enlace IoT Edge sin módulos definidos. Una puerta de enlace transparente no requiere ningún módulo, porque el entorno de ejecución de Azure IoT Edge reenvía los mensajes desde los dispositivos de bajada a IoT Central. Si la puerta de enlace misma necesita enviar telemetría, sincronizar propiedades o administrar comandos, es posible definir estas funcionalidades en el componente raíz o en un módulo.

Agregue las vistas y propiedades de la nube que sean necesarias antes de publicar las plantillas de dispositivo de puerta de enlace y de nivel inferior.

Incorporación de los dispositivos

Al agregar los dispositivos a la aplicación de IoT Central, puede definir la relación entre los dispositivos de nivel inferior y la puerta de enlace transparente.

Para agregar los dispositivos, siga estos pasos:

  1. Vaya a la página de los dispositivos de la aplicación de IoT Central.

  2. Agregue una instancia del dispositivo IoT Edge de puerta de enlace transparente. Al agregar el dispositivo, asegúrese de seleccionar el manifiesto de implementación Puerta de enlace transparente. En este artículo, el id. de dispositivo de puerta de enlace es edgegateway.

  3. Agregue una o más instancias del dispositivo de nivel inferior. En este artículo, los dispositivos de nivel inferior son termostatos con los id. thermostat1 y thermostat2.

  4. En la lista de dispositivos, seleccione cada dispositivo de nivel inferior y seleccione Attach to gateway (Conectar a la puerta de enlace).

En la captura de pantalla siguiente se muestra la lista de dispositivos conectados a una puerta de enlace en la página Dispositivos de nivel inferior:

Screenshot that shows the list of downstream devices connected to a transparent gateway.

En una puerta de enlace transparente, los dispositivos de nivel inferior se conectan a la puerta de enlace misma y no a un módulo personalizado hospedado por la puerta de enlace.

Antes de implementar los dispositivos, necesita lo siguiente:

  • El ámbito de identificador de la aplicación de IoT Central.
  • Los valores de id. de dispositivo para los dispositivos de nivel inferior y de puerta de enlace.
  • Los valores de clave principal para los dispositivos de nivel inferior y de puerta de enlace.

Para buscar estos valores, vaya a cada dispositivo en la lista de dispositivos y seleccione Conectar. Anote estos valores antes de continuar.

Sugerencia

Puede conectar los dispositivos y establecer relaciones sin crear primero plantillas de dispositivo para ellos. Puede conectar un dispositivo de nivel inferior sin asignar a un dispositivo de puerta de enlace sin asignar.

Implementación de la puerta de enlace y los dispositivos

Para permitirle probar este escenario, en los pasos siguientes se muestra cómo implementar los dispositivos de nivel inferior y la puerta de enlace en máquinas virtuales de Azure.

Sugerencia

Si desea aprender a implementar el entorno de ejecución de Azure IoT Edge en un dispositivo físico, consulte Creación de un dispositivo IoT Edge en la documentación de IoT Edge.

Para probar el escenario de puerta de enlace transparente, seleccione el botón siguiente para implementar dos máquinas virtuales Linux. Una máquina virtual tiene instalado el runtime de IoT Edge 1.4 y es la puerta de enlace IoT Edge transparente. La otra máquina virtual es un dispositivo de nivel inferior en el que ejecuta código para enviar telemetría de termostato simulada:

Deploy to Azure Button

Cuando se implementen y ejecuten las dos máquinas virtuales, compruebe que el dispositivo de puerta de enlace IoT Edge está en ejecución en la máquina virtual edgegateway:

  1. Vaya a la página Dispositivos de la aplicación de IoT Central. Si el dispositivo de puerta de enlace IoT Edge está conectado a IoT Central, su estado es Aprovisionado.

  2. Abra el dispositivo de puerta de enlace IoT Edge y compruebe el estado de los módulos en la página Módulos. Si el entorno de ejecución de Azure IoT Edge se inició correctamente, el estado de los módulos $edgeAgent y $edgeHub es En ejecución:

    Screenshot showing the $edgeAgent and $edgeHub version 1.4 modules running on the IoT Edge gateway.

    Sugerencia

    Es posible que tenga que esperar varios minutos mientras se inicia la máquina virtual y el dispositivo se aprovisiona en la aplicación de IoT Central.

Configuración de la puerta de enlace

Para que el dispositivo IoT Edge funcione como puerta de enlace transparente, necesita algunos certificados para demostrar su identidad en cualquier dispositivo de nivel inferior. En este artículo se utilizan certificados de demostración. En un entorno de producción, use certificados de su entidad de certificación.

Para generar los certificados de demostración e instalarlos en el dispositivo de puerta de enlace, haga lo siguiente:

  1. Use SSH para conectarse e iniciar sesión en la máquina virtual del dispositivo de puerta de enlace.

  2. Ejecute los comandos siguientes para clonar el repositorio de IoT Edge y generar los certificados de demostración:

    # Clone the repo
    cd ~
    git clone https://github.com/Azure/iotedge.git
    
    # Generate the demo certificates
    mkdir certs
    cd certs
    cp ~/iotedge/tools/CACertificates/*.cnf .
    cp ~/iotedge/tools/CACertificates/certGen.sh .
    ./certGen.sh create_root_and_intermediate
    ./certGen.sh create_edge_device_ca_certificate "mycacert"
    

    Después de ejecutar los comandos anteriores, estos archivos están listos para usarse en los pasos siguientes:

    • ~/certs/certs/azure-iot-test-only.root.ca.cert.pem: el certificado de CA raíz que se usa para crear todos los demás certificados de demostración con el fin de probar un escenario de IoT Edge.
    • ~/certs/certs/iot-edge-device-mycacert-full-chain.cert.pem: es un certificado CA de dispositivo referenciado desde el archivo de configuración de IoT Edge. En un escenario de puerta de enlace, este certificado de CA es la forma en que el dispositivo IoT Edge comprueba su identidad en los dispositivos de nivel inferior.
    • ~/certs/private/iot-edge-device-mycacert.key.pem: la clave privada asociada con el certificado de CA del dispositivo.

    Para más información sobre estos certificados de demostración, consulte Creación de certificados de demostración para probar las características de dispositivo IoT Edge.

  3. Abra el archivo config.toml en un editor de texto. Por ejemplo:

    sudo nano /etc/aziot/config.toml
    
  4. Busque los valores siguientes en el archivo de configuración. Agregue la configuración del certificado como se indica a continuación:

    trust_bundle_cert = "file:///home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem"
    
    [edge_ca]
    cert = "file:///home/AzureUser/certs/certs/iot-edge-device-ca-mycacert-full-chain.cert.pem"
    pk = "file:///home/AzureUser/certs/private/iot-edge-device-ca-mycacert.key.pem"
    

    El ejemplo anterior asume que ha iniciado sesión como AzureUser y ha creado un certificado CA de dispositivo llamado "mycacert".

  5. Guarde los cambios y reinicie el entorno de ejecución de Azure IoT Edge:

    sudo iotedge config apply
    

Si el entorno de ejecución de Azure IoT Edge se inicia correctamente después de los cambios, el estado de los módulos $edgeAgent y $edgeHub cambia a En ejecución en la página Módulos del dispositivo de puerta de enlace en IoT Central.

Si el entorno de ejecución no se inicia, compruebe los cambios que ha realizado en el archivo de configuración de IoT Edge y consulte Solución de problemas del dispositivo IoT Edge.

La puerta de enlace transparente ya está configurada y lista para empezar a reenviar telemetría desde los dispositivos de nivel inferior.

Aprovisionamiento de un dispositivo de nivel inferior

IoT Central se basa en Device Provisioning Service (DPS) para aprovisionar dispositivos en IoT Central. Actualmente, IoT Edge no puede usar el aprovisionamiento de DPS en un dispositivo de nivel inferior a la aplicación de IoT Central. Estos pasos muestran cómo aprovisionar el dispositivo thermostat1 de forma manual. Para completar estos pasos, necesita un entorno con Python instalado y conexión a Internet. Compruebe el SDK de Python de Azure IoT para ver los requisitos actuales de la versión de Python. Azure Cloud Shell tiene Python preinstalado:

  1. Ejecute el comando siguiente para instalar el módulo azure.iot.device:

    pip install azure.iot.device
    
  2. Ejecute el comando siguiente para descargar el script de Python que realiza el aprovisionamiento de dispositivos:

    wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/provision_device.py
    
  3. Para aprovisionar el dispositivo de bajada thermostat1 en la aplicación de IoT Central, ejecute los comandos siguientes, reemplazando {your application id scope} y {your device primary key}. Anotó estos valores cuando agregó los dispositivos a su aplicación de IoT Central:

    export IOTHUB_DEVICE_DPS_DEVICE_ID=thermostat1
    export IOTHUB_DEVICE_DPS_ID_SCOPE={your application id scope}
    export IOTHUB_DEVICE_DPS_DEVICE_KEY={your device primary key}
    python provision_device.py
    

En su aplicación de IoT Central, compruebe que el Estado del dispositivo para el dispositivo thermostat1 es Aprovisionado.

Configuración de un dispositivo de nivel inferior

En la sección anterior, configuró la máquina virtual edgegateway con los certificados de demostración para permitir que se ejecute como puerta de enlace. La máquina virtual leafdevice está lista para la instalación de un simulador de termostato que usa la puerta de enlace para conectarse a IoT Central.

La máquina virtual leafdevice necesita una copia del certificado de CA raíz que creó en la máquina virtual edgegateway. Copie el archivo /home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem de la máquina virtual edgegateway en el directorio principal de la máquina virtual leafdevice. Puede usar el comando scp para copiar archivos entre máquinas virtuales de Linux. Por ejemplo, desde la máquina leafdevice:

scp AzureUser@edgegateway:/home/AzureUser/certs/certs/azure-iot-test-only.root.ca.cert.pem .

Consulte Prueba de la conexión de puerta de enlace para saber cómo comprobar la conexión desde el dispositivo de nivel inferior hasta la puerta de enlace.

Para ejecutar el simulador de termostato en la máquina virtual leafdevice, siga estos pasos:

  1. Use SSH para conectarse e iniciar sesión en su máquina virtual leafdevice.

  2. Descargue el ejemplo de Python en el directorio principal:

    cd ~
    wget https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/transparent-gateway-1-4/simple_thermostat.py
    
  3. Instale el módulo de Python del dispositivo Azure IoT:

    sudo apt update
    sudo apt install python3-pip
    pip3 install azure.iot.device
    
  4. Establezca las variables de entorno para configurar el ejemplo. Reemplace {your device shared key} por la clave principal de thermostat1 que anotó anteriormente. Estas variables suponen que el nombre de la máquina virtual de la puerta de enlace es edgegateway y el id. del dispositivo de termostato es thermostat1:

    export IOTHUB_DEVICE_SECURITY_TYPE=connectionString
    export IOTHUB_DEVICE_CONNECTION_STRING="HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key}"
    export IOTEDGE_ROOT_CA_CERT_PATH=~/azure-iot-test-only.root.ca.cert.pem
    

    Observe que la cadena de conexión usa el nombre del dispositivo de puerta de enlace y no el de un centro de IoT.

  5. Use el comando siguiente para ejecutar el código:

    python3 simple_thermostat.py
    

    La salida de este comando tiene un aspecto similar al siguiente:

    Connecting using Connection String HostName=edgegateway;DeviceId=thermostat1;SharedAccessKey={your device shared key}
    Listening for command requests and property updates
    Press Q to quit
    Sending telemetry for temperature
    Sent message
    Sent message
    Sent message
    ...
    

    Sugerencia

    Si ve un error cuando el dispositivo de bajada intenta conectarse, Intente volver a ejecutar los pasos de aprovisionamiento de dispositivos.

  6. Para ver la telemetría en IoT Central, vaya a la página Información general del dispositivo thermostat1:

    Screenshot showing telemetry from the downstream device.

    En la página About (Acerca de) puede ver los valores de propiedad enviados desde el dispositivo de nivel inferior y, en la página Command (Comando), puede llamar a comandos en el dispositivo de nivel inferior.