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:

    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 denomina azure-cli-iot-ext. Solo debe tener instalada una versión a la vez. Puede usar el comando az 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:

  1. 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.
  2. 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
    
  3. 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
    
  4. 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:

  1. 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}
    
  2. 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>
    
  3. 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.

  1. 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.

  2. 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:

    Screenshot that shows the simulated device connecting.

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.

  1. 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}
    
  2. 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:

    Screenshot that shows the connection failing after the key reset.

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.

  1. Ejecute el comando az iot hub genereate-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}
    
  2. 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

  3. 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.

  4. 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:

    Screenshot that shows a successful connection using a SAS token.

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:

Screenshot that shows a connection error when the outbound port is blocked.

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

  1. 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}
    
  2. Para ejecutar un dispositivo simulado que envía mensajes, vaya hasta la carpeta iot-hub\Tutorials\ConnectivityTests en el código descargado.

  3. 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:

    Screenshot that shows the simulated device sending messages.

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.

  1. En Azure Portal, seleccione el centro de IoT en la lista desplegable Recurso.

  2. Seleccione Métricas en la sección Supervisión del menú de navegación.

  3. 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:

    Screenshot showing left pane metrics.

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.

  1. 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}"
    
  2. 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:

    Screenshot that shows the device confirming that the direct method was received.

    Cuando el dispositivo simulado recibe correctamente la llamada del método directo, envía una confirmación al centro:

    Screenshot showing that the device returns a direct method acknowledgment.

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.

  1. 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}"
    
  2. 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.

    Screenshot showing the reported properties of a device.

  3. 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:

    Screenshot that shows the device confirming that the desired properties update was received.

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.