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:
Importante
En este artículo se incluyen los pasos para conectar un dispositivo mediante una firma de acceso compartido, también denominada autenticación de clave simétrica. Este método de autenticación es cómodo para probar y evaluar, pero autenticar un dispositivo mediante certificados X.509 es un enfoque más seguro. Para obtener más información, consulte Procedimientos recomendados de > Seguridad de la conexión.
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:
Una suscripción de Azure activa. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Una aplicación de IoT Central creada a partir de la plantilla de aplicación personalizada. Para obtener más información, vea Creación de una aplicación de Azure IoT Central.
Para seguir los pasos de este artículo, descargue los archivos siguientes al equipo:
- Modelo de dispositivo termostato (thermostat-1.json): este archivo es el modelo de dispositivo para los dispositivos de bajada.
- Manifiesto de puerta de enlace transparente (EdgeTransparentGatewayManifest.json): este archivo es el manifiesto de implementación de IoT Edge para el dispositivo de puerta de enlace.
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:
Vaya a Manifiestos de Edge.
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.
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:
Cree una plantilla de dispositivo y elija Dispositivo IoT como el tipo de plantilla.
En la página Personalizar del Asistente, escriba un nombre como Termostato para la plantilla de dispositivo.
Después de crear la plantilla de dispositivo, seleccione Importar un modelo. Seleccione un modelo como el archivo thermostat-1.json que descargó anteriormente.
Para generar algunas vistas predeterminadas para el termostato, seleccione las vistas y, luego, elija Generar vistas predeterminadas.
Publicar la plantilla de dispositivo.
Para crear una plantilla de dispositivo para un dispositivo de puerta de enlace IoT Edge transparente:
Cree una plantilla de dispositivo y elija Azure IoT Edge como el tipo de plantilla.
En la página Personalizar del Asistente, escriba un nombre como Puerta de enlace Edge para la plantilla de dispositivo.
En la página Personalizar del asistente, active Este es un dispositivo de puerta de enlace.
En la página Revisar, seleccione Crear.
En la página Crear un modelo, seleccione Modelo personalizado.
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:
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:
Vaya a la página de los dispositivos de la aplicación de IoT Central.
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
.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
ythermostat2
.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:
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:
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
:
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.
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:
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:
Use SSH para conectarse e iniciar sesión en la máquina virtual del dispositivo de puerta de enlace.
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.
Abra el archivo config.toml en un editor de texto. Por ejemplo:
sudo nano /etc/aziot/config.toml
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".
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:
Ejecute el comando siguiente para instalar el módulo
azure.iot.device
:pip install azure.iot.device
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
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:
Use SSH para conectarse e iniciar sesión en su máquina virtual
leafdevice
.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
Instale el módulo de Python del dispositivo Azure IoT:
sudo apt update sudo apt install python3-pip pip3 install azure.iot.device
Establezca las variables de entorno para configurar el ejemplo. Reemplace
{your device shared key}
por la clave principal dethermostat1
que anotó anteriormente. Estas variables suponen que el nombre de la máquina virtual de la puerta de enlace esedgegateway
y el id. del dispositivo de termostato esthermostat1
: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.
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.
Para ver la telemetría en IoT Central, vaya a la página Información general del dispositivo thermostat1:
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.