Ordenación de eventos de conexión de dispositivos de Azure IoT Hub mediante Azure Cosmos DB

Azure Event Grid le ayuda a compilar aplicaciones basadas en eventos y a integrar fácilmente eventos de IoT en sus soluciones empresariales. Este artículo le guiará a través de una configuración con Cosmos DB, Logic App, eventos de IoT Hub y un equipo Raspberry Pi simulado para recopilar y almacenar eventos de conexión y desconexión de un dispositivo.

Desde el momento en que se ejecuta el dispositivo, se activa un orden de operaciones:

  1. Se inicia el dispositivo Pi, mediante la clave de dispositivo de IoT Hub y, a continuación, se detiene.

  2. Un evento de IoT Hub captura la actividad del dispositivo y, a continuación, envía una solicitud HTTP a la aplicación lógica.

  3. La aplicación lógica procesa la solicitud HTTP en función de una condición establecida.

  4. La aplicación lógica registra los eventos de conexión o desconexión en un nuevo documento de Cosmos DB.

    Captura de pantalla de la configuración que crearemos para este artículo. Esta configuración muestra cómo se conectan todos los servicios y dispositivos.

Requisitos previos

Creación de una aplicación lógica

En primer lugar, cree una aplicación lógica y agregue un desencadenador de Event Grid que supervise el grupo de recursos de la máquina virtual.

Creación de un recurso de aplicación lógica

  1. En Azure Portal, seleccione +Crear un recurso, Integración y, luego, Aplicación lógica.

    Captura de pantalla de cómo buscar y seleccionar una aplicación lógica en Azure Portal.

  2. Complete el formulario para crear una nueva aplicación lógica que incluya:

    • Su suscripción

    • Su grupo de recursos (o cree uno nuevo)

    • Un nombre de aplicación lógica que sea único en la suscripción

    • La región del centro de IoT

    • No para habilitar Log Analytics

    • El tipo de plan Consumo

      Nota

      El tipo de plan de Consumo es la opción que habilita el Diseñador de aplicación lógica en la interfaz de usuario. Si elige Estándar (el valor predeterminado), debe crear un nuevo flujo de trabajo para que el Diseñador de aplicación lógica esté disponible.

    Captura de pantalla de cómo crear una aplicación lógica en Azure Portal.

  3. Seleccione Revisar y crear para revisar la configuración y, a continuación, seleccione Crear para crear la aplicación lógica.

  4. Ahora ha creado un recurso de Azure para la aplicación lógica. Una vez que Azure implemente la aplicación lógica, seleccione Ir al recurso. En el Diseñador de aplicación lógica se muestran las plantillas de patrones comunes para que pueda empezar con mayor rapidez.

  5. En el Diseñador de aplicación lógica, desplácese hasta que vea la sección Plantillas y, después, elija Aplicación lógica en blanco para que pueda compilar la aplicación lógica desde cero.

Selección de un desencadenador

Un desencadenador es un evento específico que inicia la aplicación lógica. Para este tutorial, el desencadenador que activa el flujo de trabajo recibe una solicitud a través de HTTP.

  1. En la barra de búsqueda de conectores y desencadenadores, escriba HTTP y pulse ENTRAR.

  2. Seleccione la solicitud Cuando se recibe una solicitud HTTP como desencadenador.

    Captura de pantalla de cómo seleccionar el desencadenador de solicitud HTTP.

  3. Seleccione Usar una carga de ejemplo para generar el esquema.

    Captura de pantalla de cómo usar una carga de ejemplo para generar un esquema.

  4. Pegue el siguiente código JSON de ejemplo en el cuadro de texto y después seleccione Listo.

    Este JSON solo se usa como plantilla, por lo que los valores exactos no son importantes.

    [{
     "id": "fbfd8ee1-cf78-74c6-dbcf-e1c58638ccbd",
     "topic":
       "/SUBSCRIPTIONS/DEMO5CDD-8DAB-4CF4-9B2F-C22E8A755472/RESOURCEGROUPS/EGTESTRG/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/MYIOTHUB",
     "subject": "devices/Demo-Device-1",
     "eventType": "Microsoft.Devices.DeviceConnected",
     "eventTime": "2018-07-03T23:20:11.6921933+00:00",
     "data": {
       "deviceConnectionStateEventInfo": {
         "sequenceNumber":
           "000000000000000001D4132452F67CE200000002000000000000000000000001"
       },
       "hubName": "MYIOTHUB",
       "deviceId": "48e44e11-1437-4907-83b1-4a8d7e89859e",
       "moduleId": ""
     },
     "dataVersion": "1",
     "metadataVersion": "1"
    }]
    

    Captura de pantalla de la carga JSON de ejemplo pegada en el cuadro de texto de Azure.

Creación de una condición

Las condiciones ayudan a ejecutar acciones concretas cuando se produce una condición específica. En este artículo, la condición es comprobar si eventType es Dispositivo conectado o Dispositivo desconectado. La acción que se ejecuta cuando eventType es true es la creación de un documento en Azure Cosmos DB. Esta condición se crea en el Diseñador de aplicación lógica.

  1. Seleccione + Nuevo paso, luego la pestaña Integrado y, a continuación, busque y seleccione el control denominado Condición.

  2. En su condición, cambie And por Or, ya que queremos capturar los eventos de conexión o los eventos de desconexión en un único análisis.

  3. Haga clic dentro del cuadro Elegir un valor y aparecerá una ventana emergente que muestra el Contenido dinámico, es decir, los campos que se pueden seleccionar.

    • Elija eventType. La ventana emergente se cierra y verá que Cuerpo se coloca en Seleccionar una salida de los pasos anteriores automáticamente. Seleccione Condición para volver a abrir la instrucción condicional.

    • Conserve el valor es igual a.

    • Escriba Microsoft.Devices.DeviceConnected como el último valor de esa fila.

    • Seleccione + Agregar para agregar otra fila.

    • Esta segunda fila es similar a la primera fila, salvo que buscamos eventos de desconexión.

      Use eventType, es igual a y Microsoft.Devices.DeviceDisconnected para los valores de fila.

      Captura de pantalla de la condición Para cada uno completa.

  4. En el cuadro de diálogo if true, haga clic en Agregar una acción.

    Captura de pantalla del cuadro

  5. Busque Cosmos DB y seleccione Azure Cosmos DB: Crear o actualizar documento (V3)

    Captura de pantalla de la búsqueda de Azure Cosmos DB.

  6. Verá el panel Crear o actualizar documento (V3). Especifique estos valores para los campos:

    Nombre de la cuenta de Azure Cosmos DB: {Agregar el nombre de la cuenta}

    Id. de base de datos: ToDoList

    Id. de colección: Elementos

    Documento: elija Current item en la lista de parámetros de contenido dinámico

    Captura de pantalla que muestra un elemento Ejecutar procedimiento almacenado (V3) con

  7. Guarde la aplicación lógica.

Copia de la dirección URL HTTP

Antes de cerrar el Diseñador de aplicaciones lógicas, copie la dirección URL en la que se realizan las escuchas de un desencadenador de aplicación lógica. Use esta dirección URL para configurar Event Grid.

  1. Seleccione el cuadro de configuración del desencadenador Cuando se recibe una solicitud HTTP para expandirlo.

  2. Seleccione el botón de copia que se encuentra junto al valor Dirección URL de HTTP POST para copiarlo.

    Captura de pantalla de dónde buscar la dirección URL HTTP que se va a copiar.

  3. Guarde esta dirección URL para poder usarla en la siguiente sección.

Configurar la suscripción de eventos de IoT Hub

En esta sección, va a configurar IoT Hube para publicar eventos cuando se produzcan.

  1. En Azure Portal, vaya hasta el centro de IoT.

  2. Seleccione Eventos.

    Captura de pantalla de dónde se encuentra el botón Eventos en el menú de IoT Hub.

  3. Seleccione + Suscripción de eventos.

    Crear una suscripción de eventos

  4. Rellene Detalles de suscripciones de eventos: proporcione un Nombre descriptivo y seleccione Esquema de Event Grid como Esquema de eventos.

  5. Cree un Nombre del tema del sistema para el recurso de IoT Hub.

  6. Rellene los campos Tipos de evento. En la lista desplegable, seleccione solo Dispositivo conectado y Dispositivo desconectado en el menú. Haga clic en cualquier otro lugar de la pantalla para cerrar la lista y guardar sus selecciones.

    Establecimiento de los tipos de evento que desea buscar

  7. Detalles de punto de conexión: en Tipo de punto de conexión, seleccione Webhook, haga clic en Seleccionar punto de conexión y pegue la dirección URL que copió de la aplicación lógica y confirme la selección.

    Seleccionar dirección URL de punto de conexión

  8. El formulario debería ser ahora similar al del siguiente ejemplo:

    Captura de pantalla del formulario para crear una suscripción de eventos.

    Seleccione Crear para guardar la suscripción de eventos.

    Importante

    Espere unos minutos para que el evento se procese antes de ejecutar el dispositivo. Cada vez que se crean o cambian los servicios de Azure, iniciar el siguiente paso en la canalización demasiado pronto podría provocar errores innecesarios. Por ejemplo, si el centro de IoT no está en un estado activo, no estará listo para recibir eventos. Compruebe la página Información general del centro de IoT para ver si está en un estado activo o no. Si no es así, verá una advertencia en la parte superior de la página.

    Captura de pantalla de un error de IoT Hub que indica que no está en un estado activo.

Ejecución del dispositivo y observación de eventos

Ahora que la suscripción de eventos se ha configurado, vamos a probar a conectar un dispositivo.

Registro de un dispositivo en IoT Hub

  1. En el centro de IoT, seleccione Dispositivos.

  2. Seleccione + Agregar dispositivo en la parte superior del panel.

  3. En Id. de dispositivo, escriba Demo-Device-1.

  4. Seleccione Guardar.

    Captura de pantalla de la ubicación del botón Agregar dispositivo.

  5. Haga clic en el dispositivo nuevo. Ahora ya estarán rellenas las cadenas de conexión y las claves. Copie y guarde la Cadena de conexión primaria para usarla más adelante.

    Captura de pantalla de la ubicación de la cadena de conexión primaria del dispositivo.

Inicio del simulador de Raspberry Pi

Vamos a usar el simulador web de Raspberry Pi para simular la conexión del dispositivo.

Iniciar simulador de Raspberry Pi

Ejecución de una aplicación de ejemplo en el simulador web de Raspberry Pi

Esta aplicación de ejemplo desencadenará un evento de dispositivo conectado.

  1. En el área de codificación, reemplace el marcador de posición de la línea 15 con la cadena de conexión del dispositivo de Azure IoT Hub que guardó al final de la sección anterior.

    Captura de pantalla de dónde agregar la cadena de conexión primaria en el script de Raspberry Pi.

  2. Para ejecutar la aplicación seleccione Ejecutar.

    Debería ver algo parecido a la siguiente salida, que muestra los datos del sensor y los mensajes que se envían a IoT Hub.

    Captura de pantalla de lo que se espera en la consola de salida al ejecutar Raspberry Pi.

  3. Puede comprobar en la página Información general de la aplicación lógica si se está desencadenando la lógica. Indicará Correcto o Con errores. Esta comprobación le permite conocer el estado de la aplicación lógica si es necesario solucionar problemas. Espere un retraso de entre 15 y 30 segundos cuando se ejecute el desencadenador. Si necesita solucionar problemas de la aplicación lógica, consulte este artículo de Solución de errores.

    Captura de pantalla de las actualizaciones de estado en la página Información general de la aplicación lógica.

  4. Seleccione Detener para detener el simulador, lo que desencadena un evento de Dispositivo desconectado. Este evento iniciará sesión en la página Información general de la aplicación lógica, al igual que el evento de conexión registrado allí.

Ha ejecutado una aplicación de ejemplo para recopilar eventos de conexión y desconexión del dispositivo, que van al centro de IoT.

Observación de eventos en Azure Cosmos DB

Puede ver los resultados de la aplicación lógica ejecutada en el documento de Cosmos DB. El documento aparece en la colección Elementos al actualizar la página. Cada evento de estado de conexión genera un nuevo documento asignado a un único id. En la imagen siguiente se muestra el documento creado cuando se inició (conectó) el dispositivo. El tipo de evento conectado aparece en la salida JSON.

Captura de pantalla del evento de estado de conexión recién generado en una colección de Cosmos DB.

Uso de la CLI de Azure

En lugar de usar Azure Portal, puede llevar a cabo los pasos de IoT Hub mediante la CLI de Azure. Para más información, consulte las páginas de la CLI de Azure para crear una suscripción de eventos y crear un dispositivo IoT.

Limpieza de recursos

En este tutorial se usaron recursos que generan gastos en su suscripción de Azure. Cuando haya terminado de probar el tutorial y los resultados de las pruebas, deshabilite o elimine los recursos que no desea conservar.

Aplicación lógica

Si no desea perder el trabajo realizado en la aplicación lógica, deshabilítela en lugar de eliminarla.

  1. Vaya a la aplicación lógica.

  2. En la hoja Información general, seleccione Eliminar o Deshabilitar.

    Cada suscripción solo puede tener una instancia de IoT Hub gratuita. Si creó una instancia de IoT Hub gratis para este tutorial, no es necesario eliminarla para evitar cargos.

IoT Hub o Event Grid

  1. Vaya a su instancia de IoT Hub.

  2. En la página Información general, seleccione Eliminar.

  3. Aunque conserve la instancia de IoT Hub, puede que desee eliminar la suscripción de eventos que creó. En la instancia de IoT Hub, seleccione Event Grid.

  4. Seleccione la suscripción de eventos que quiere eliminar y seleccione Eliminar.

Cosmos DB

Para quitar una cuenta de Azure Cosmos DB de Azure Portal, vaya al recurso y seleccione Eliminar cuenta en la barra de menús superior. Consulte las instrucciones detalladas para eliminar una cuenta de Azure Cosmos DB.

Pasos siguientes