Tutorial: Uso de un dispositivo simulado para probar la conectividad con IoT Hubs
En este tutorial, usará herramientas del portal de Azure IoT Hub y comandos de la CLI de Azure para probar la conectividad de los dispositivos. En este tutorial también se usa un simulador de dispositivos sencillo que se ejecuta en la máquina de escritorio.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
En este tutorial, aprenderá a:
- Comprobar la autenticación del dispositivo
- Comprobar la conectividad del dispositivo a la nube
- Comprobación de la conectividad de la nube al dispositivo
- Comprobar la sincronización de dispositivos gemelos
Requisitos previos
En este tutorial se usa la CLI de Azure para crear recursos en la nube. Hay dos maneras de ejecutar comandos de la CLI:
Use el entorno de Bash en Azure Cloud Shell. Para más información, vea Inicio rápido de Azure Cloud Shell: Bash.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
- Inicie sesión en la CLI de Azure mediante el comando az login.
- Cuando se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
- Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
Nota
En este artículo se usa la versión más reciente de la extensión de Azure IoT, denominada
azure-iot
. La versión heredada se denominaazure-cli-iot-ext
. Solo debe tener instalada una versión a la vez. Puede usar el comandoaz extension list
para validar las extensiones instaladas actualmente.Use
az extension remove --name azure-cli-iot-ext
para eliminar la versión heredada de la extensión.Use
az extension add --name azure-iot
para agregar la nueva versión de la extensión.Para ver las extensiones que ha instalado, use
az extension list
.La aplicación de ejemplo que se ejecuta en este tutorial usa Node.js. Necesitará Node.js v10.x.x o una versión posterior en la máquina de desarrollo.
Puede descargar Node.js para varias plataformas desde nodejs.org.
Puede verificar la versión actual de Node.js en el equipo de desarrollo con el comando siguiente:
node --version
Clone o descargue el proyecto de Node.js de ejemplo de Ejemplos de Azure IoT para Node.js.
Asegúrese de que está abierto el puerto 8883 del firewall. En el dispositivos de ejemplo de este tutorial se usa el protocolo MQTT, que se comunica mediante el puerto 8883. Este puerto puede estar bloqueado en algunos entornos de red corporativos y educativos. Para más información y para saber cómo solucionar este problema, consulte el artículo sobre la conexión a IoT Hub (MQTT).
Crear un centro de IoT
En esta sección, usará la CLI de Azure para crear un centro de IoT y un grupo de recursos. Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure. Un centro de IoT funciona como centro de mensajes unificado para la comunicación bidireccional entre la aplicación de IoT y los dispositivos.
Si ya tiene un centro de IoT en su suscripción de Azure, puede omitir esta sección.
Para crear un centro de IoT y un grupo de recursos:
Inicie la aplicación de la CLI. Para ejecutar los comandos de la CLI en el resto de este artículo, copie la sintaxis de comando, péguela en la aplicación de la CLI, edite los valores de las variables y presione
Enter
.- Si usa Cloud Shell, seleccione el botón Probar en los comandos de la CLI para iniciar Cloud Shell en una ventana dividida del explorador. O bien, puede abrir Cloud Shell en una pestaña del explorador independiente.
- Si usa la CLI de Azure localmente, inicie la aplicación de consola de la CLI e inicie sesión en la CLI de Azure.
Ejecute az extension add para instalar o actualizar la extensión azure-iot a la versión actual.
az extension add --upgrade --name azure-iot
En la aplicación de la CLI, ejecute el comando az group create para crear un grupo de recursos. El siguiente comando crea un grupo de recursos denominado MyResourceGroup en la ubicación eastus.
Nota
Opcionalmente, puede establecer otra ubicación. Para ver las ubicaciones disponibles, ejecute
az account list-locations
. En este inicio rápido se usa eastus, como se muestra en el comando de ejemplo.az group create --name MyResourceGroup --location eastus
Ejecute el comando az iot hub create para crear una instancia de IoT Hub. La creación de una instancia de IoT Hub puede tardar unos minutos.
YourIotHubName. Reemplace este marcador de posición y las llaves circundantes en el siguiente comando, con el nombre que eligió para el centro de IoT. Un nombre de centro de IoT debe ser único globalmente en Azure. Use el nombre del centro de IoT a lo largo de este inicio rápido cuando vea el marcador de posición.
az iot hub create --resource-group MyResourceGroup --name {your_iot_hub_name}
Comprobación de la autenticación de dispositivos
Un dispositivo debe autenticarse con el centro antes de poder intercambiar datos con él. Para administrar los dispositivos y comprobar las claves de autenticación que usan, puede emplear la herramienta Dispositivos IoT de la sección Administración de dispositivos del portal. En esta sección del tutorial, agregará un nuevo dispositivo de prueba, recuperará su clave y comprobará que el dispositivo de prueba puede conectarse al centro. Más adelante, restablecerá la clave de autenticación para observar lo que sucede cuando un dispositivo intenta usar una clave no actualizada.
Registrar un dispositivo
Debe registrar un dispositivo con IoT Hub antes de poder conectarlo. En esta sección, se usa la CLI de Azure para crear una identidad del dispositivo.
Si ya tiene un dispositivo registrado en el centro de IoT, puede omitir esta sección.
Para crear una identidad de dispositivo:
Ejecute el comando az iot hub device-identity create en el shell de la CLI. Este comando crea la identidad del dispositivo.
your_iot_hub_name. reemplace este marcador de posición por el nombre elegido para el centro de IoT.
myDevice. Puede usar este nombre para el id. de dispositivo en este artículo o proporcionar un nombre de dispositivo diferente.
az iot hub device-identity create --device-id myDevice --hub-name {your_iot_hub_name}
Ejecute el comando az iot hub device-identity connection-string show.
az iot hub device-identity connection-string show --device-id myDevice --hub-name {your_iot_hub_name}
La cadena de conexión tiene el formato siguiente:
HostName=<your IoT Hub name>.azure-devices.net;DeviceId=<your device id>;SharedAccessKey=<some value>
Guarde la cadena de conexión en una ubicación segura.
Nota
Mantenga abierta la aplicación de la CLI. Lo usará en pasos posteriores.
Simular un dispositivo de prueba
Para simular un dispositivo que envía telemetría a su centro de IoT, ejecute la aplicación de dispositivo simulado Node.js que descargó anteriormente.
En una ventana de terminal de la máquina de desarrollo, vaya a la carpeta raíz del proyecto de ejemplo de Node.js que ha descargado. A continuación, vaya a la carpeta iot-hub\Tutorials\ConnectivityTests.
En la ventana de terminal, ejecute los comandos siguientes para instalar las bibliotecas necesarias y ejecute la aplicación de dispositivo simulado. Use la cadena de conexión del dispositivo que anotó cuando registró el dispositivo.
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
En la ventana del terminal se muestra un mensaje de operación correcta una vez que se conecta al centro:
Ahora se ha autenticado correctamente desde un dispositivo mediante una clave de dispositivo generada por el centro de IoT.
Restablecimiento de claves
En esta sección, restablecerá la clave de dispositivo y observará el error cuando el dispositivo simulado intenta conectarse.
Para restablecer la clave de dispositivo principal del dispositivo, ejecute el comando az iot hub device-identity update :
# Generate a new Base64 encoded key using the current date read key < <(date +%s | sha256sum | base64 | head -c 32) # Reset the primary device key for test device az iot hub device-identity update --device-id {your_device_id} --set authentication.symmetricKey.primaryKey=$key --hub-name {your_iot_hub_name}
En la ventana de terminal de su máquina de desarrollo, ejecute de nuevo la aplicación de dispositivo simulado:
npm install node SimulatedDevice-1.js "{your_device_connection_string}"
Esta vez verá un error de autenticación cuando la aplicación intenta conectarse:
Generación de un token de firma de acceso compartido (SAS)
Si el dispositivo usa uno de los SDK de dispositivo de IoT Hub, el código de biblioteca del SDK genera el token de SAS usado para autenticarse con el centro. Un token de SAS se genera a partir del nombre del centro, el nombre del dispositivo y la clave del dispositivo.
En algunos escenarios, como en una puerta de enlace de protocolo de nube o como parte de un esquema de autenticación personalizado, puede que deba generar el token de SAS por su cuenta. Para solucionar problemas con el código de generación de SAS, es útil generar un token de SAS conocido para usar durante las pruebas.
Nota
El ejemplo SimulatedDevice 2.js incluye ejemplos de generación de un token de SAS con y sin el SDK.
Ejecute el comando az iot hub generate-sas-token para generar un token de SAS conocido mediante la CLI:
az iot hub generate-sas-token --device-id {your_device_id} --hub-name {your_iot_hub_name}
Copie el texto completo del token de SAS generado. Un token de SAS se parece al siguiente ejemplo:
SharedAccessSignature sr=tutorials-iot-hub.azure-devices.net%2Fdevices%2FmyDevice&sig=xxxxxx&se=111111
En una ventana de terminal de su máquina de desarrollo, desplácese a la carpeta raíz del proyecto de ejemplo de Node.js que descargó. A continuación, vaya a la carpeta iot-hub\Tutorials\ConnectivityTests.
En la ventana de terminal, ejecute los comandos siguientes para instalar las bibliotecas necesarias y ejecute la aplicación de dispositivo simulado:
npm install node SimulatedDevice-2.js "{Your SAS token}"
En la ventana del terminal se muestra un mensaje de operación correcta una vez que se conecta al centro mediante el token de SAS:
Ahora se ha autenticado correctamente desde un dispositivo mediante un token de SAS de prueba generado por un comando de la CLI. El archivo SimulatedDevice-2.js incluye código de ejemplo que muestra cómo generar un token de SAS en el código.
Protocolos
Un dispositivo puede usar cualquiera de los siguientes protocolos para conectarse al centro de IoT:
Protocolo | Puerto de salida |
---|---|
MQTT | 8883 |
MQTT sobre WebSockets | 443 |
AMQP | 5671 |
AMQP sobre WebSockets | 443 |
HTTPS | 443 |
Si el puerto de salida está bloqueado por un firewall, el dispositivo no se puede conectar:
Comprobar la conectividad del dispositivo a la nube
Después de que un dispositivo se conecta, puede comenzar a enviar telemetría a su centro de IoT. En esta sección se muestra cómo puede comprobar que la telemetría enviada por el dispositivo llega al centro.
Envío de mensajes del dispositivo a la nube
Como en la sección anterior se ha restablecido la cadena de conexión del dispositivo, use el comando az iot hub device-identity connection-string show para recuperar la cadena de conexión actualizada:
az iot hub device-identity connection-string show --device-id {your_device_id} --output table --hub-name {your_iot_hub_name}
Para ejecutar un dispositivo simulado que envía mensajes, vaya hasta la carpeta iot-hub\Tutorials\ConnectivityTests en el código descargado.
En la ventana de terminal, ejecute los comandos siguientes para instalar las bibliotecas necesarias y ejecute la aplicación de dispositivo simulado:
npm install node SimulatedDevice-3.js "{your_device_connection_string}"
En la ventana de terminal se muestra información a medida que se envía telemetría a su centro:
Supervisión de mensajes entrantes
Puede usar Métricas en el portal para comprobar que los mensajes de telemetría llegan al centro de IoT.
En Azure Portal, seleccione el centro de IoT en la lista desplegable Recurso.
Seleccione Métricas en la sección Supervisión del menú de navegación.
Seleccione Mensajes de telemetría enviados como métrica y establezca el intervalo de tiempo en la Última hora. En el gráfico se muestra el recuento total de mensajes enviados por el dispositivo simulado:
Las métricas tardan unos minutos en estar disponibles después de iniciar el dispositivo simulado.
Comprobación de la conectividad de la nube al dispositivo
En esta sección se muestra cómo realizar una llamada del método directo de prueba a un dispositivo para comprobar la conectividad de la nube al dispositivo. Ejecutará un dispositivo simulado en la máquina de desarrollo para escuchar llamadas del método directo desde su centro.
En la ventana de terminal, use el comando siguiente para ejecutar la aplicación de dispositivo simulado:
node SimulatedDevice-3.js "{your_device_connection_string}"
En una ventana independiente, use el comando az iot hub invoke-device-method para llamar a un método directo en el dispositivo:
az iot hub invoke-device-method --device-id {your_device_id} --method-name TestMethod --timeout 10 --method-payload '{"key":"value"}' --hub-name {your_iot_hub_name}
El dispositivo simulado imprime un mensaje en la consola cuando recibe una llamada del método directo:
Cuando el dispositivo simulado recibe correctamente la llamada del método directo, envía una confirmación al centro:
Comprobación de sincronización de dispositivos gemelos
Los dispositivos usan gemelos para sincronizar el estado entre el dispositivo y el centro. En esta sección, usará comandos de la CLI para enviar las propiedades deseadas a un dispositivo y leer las propiedades notificadas enviadas por el dispositivo.
El dispositivo simulado que se usa en esta sección envía propiedades notificadas al centro cada vez que se inicia, e imprime las propiedades deseadas en la consola cada vez que las recibe.
En la ventana de terminal, use el comando siguiente para ejecutar la aplicación de dispositivo simulado:
node SimulatedDevice-3.js "{your_device_connection_string}"
En una ventana independiente, ejecute el comando az iot hub device-twin show para comprobar que el centro ha recibido las propiedades notificadas del dispositivo:
az iot hub device-twin show --device-id {your_device_id} --hub-name {your_iot_hub_name}
En la salida del comando, puede ver la propiedad devicelaststarted en la sección de propiedades notificadas. Esta propiedad muestra la fecha y hora en que se inició por última vez el dispositivo simulado.
Para comprobar que el centro puede enviar los valores de propiedad deseados al dispositivo, use el comando az iot hub device-twin update:
az iot hub device-twin update --set properties.desired='{"mydesiredproperty":"propertyvalue"}' --device-id {your_device_id} --hub-name {your_iot_hub_name}
El dispositivo simulado imprime un mensaje cuando recibe una actualización de propiedad deseada del centro:
Además de recibir los cambios en las propiedades deseadas a medida que se realizan, el dispositivo simulado busca automáticamente propiedades deseadas al inicio.
Limpieza de recursos
Si ya no los va a necesitar más, elimínelos en el portal. Para ello, seleccione el grupo de recursos que contiene su centro de IoT y seleccione Eliminar.
Pasos siguientes
En este tutorial, ha visto cómo comprobar las claves de dispositivo, la conectividad del dispositivo a la nube, la conectividad de la nube al dispositivo y la sincronización de dispositivos gemelos. Para aprender más sobre cómo supervisar el centro de IoT, visite el artículo sobre procedimientos relativo a la supervisión de IoT Hub.