Tutorial: Implementación del análisis espacial de IoT mediante Azure Maps

En un escenario de IoT, son típicos el seguimiento y la captura de los eventos pertinentes que se producen en el espacio y en el tiempo. Entre los ejemplos, se incluyen aplicaciones de administración de flotas, seguimiento de activos, movilidad y ciudad inteligente. Este tutorial le guía por una solución que supervisa la circulación de vehículos de alquiler usados mediante la utilización de las API de Azure Maps.

En este tutorial, aprenderá lo siguiente:

  • Crear una cuenta de Azure Storage para registrar los datos de seguimiento de automóviles.
  • Cargue una geovalla en una cuenta de Azure Storage.
  • Crear un centro en Azure IoT Hub y registrar un dispositivo.
  • Crear una función en Azure Functions, para lo que debe implementar una lógica de negocios basada en el análisis espacial de Azure Maps.
  • Suscribirse a eventos de telemetría de dispositivos IoT desde la función de Azure a través de Azure Event Grid.
  • Filtrar los eventos de telemetría mediante el enrutamiento de mensajes de IoT Hub.

Requisitos previos

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Sugerencia

Puede descargar todo el proyecto rentalCarSimulation de C# desde GitHub como un único archivo ZIP; para ello, vaya a la raíz del ejemplo, seleccione el botón <> Código de color verde y, a después Descargar ZIP.

En este tutorial se usa la aplicación Postman, pero se puede elegir otro entorno de desarrollo de API.

Importante

En los ejemplos de direcciones URL, reemplace {Your-Azure-Maps-Subscription-key} por la clave de suscripción de Azure Maps.

Caso de uso: seguimiento de automóviles de alquiler

Supongamos que una empresa de alquiler de vehículos desea registrar la información de la ubicación, la distancia recorrida y el estado operativo de sus vehículos de alquiler. Además, la empresa desea almacenar esta información cada vez que un automóvil abandone la región geográfica autorizada correcta.

Los vehículos de alquiler están equipados con dispositivos IoT que envían periódicamente datos de telemetría a IoT Hub. Los datos de telemetría incluyen la ubicación actual e indican si el motor del vehículo está en funcionamiento. El esquema de ubicación del dispositivo cumple el esquema IoT Plug and Play para datos geoespaciales. El esquema de los datos de telemetría del dispositivo del vehículo de alquiler tiene un aspecto similar al código JSON siguiente:

{
    "data": {
        "properties": {
            "Engine": "ON"
        },
        "systemProperties": {
            "iothub-content-type": "application/json",
            "iothub-content-encoding": "utf-8",
            "iothub-connection-device-id": "ContosoRentalDevice",
            "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
            "iothub-connection-auth-generation-id": "636959817064335548",
            "iothub-enqueuedtime": "2019-06-18T00:17:20.608Z",
            "iothub-message-source": "Telemetry"
        },
        "body": {
            "location": {
                "type": "Point",
                "coordinates": [ -77.025988698005662, 38.9015330523316 ]
            }
        }
    }
}

En este tutorial, solo se hará el seguimiento de un vehículo. Después de configurar los servicios de Azure, debe descargar el proyecto rentalCarSimulation de C# para ejecutar el simulador de vehículos. El proceso completo, desde el evento hasta la ejecución de la función, se resume en los pasos siguientes:

  1. El dispositivo del vehículo envía los datos de telemetría a IoT Hub.

  2. Si el motor del automóvil está en marcha, el centro publica los datos de telemetría en Event Grid.

  3. Una función de Azure se desencadena debido a su suscripción de eventos a los eventos de telemetría de dispositivo.

  4. La función registra las coordenadas de ubicación del dispositivo del vehículo, la hora del evento y el identificador del dispositivo. A continuación, usará Spatial Geofence Get API para determinar si el automóvil ha circulado fuera de la geovalla. Si ha circulado fuera de los límites de la geovalla, la función almacenará los datos de ubicación recibidos del evento en un contenedor de blobs. La función también consulta Get Search Address Reverse para convertir las coordenadas en una dirección y almacenarla con los demás datos de ubicación del dispositivo.

En el siguiente diagrama se proporciona información general sobre el sistema.

Diagrama de información general del sistema.

La siguiente ilustración resalta el área de geovalla en azul. La ruta del vehículo de alquiler se indica mediante una línea verde.

Figura que muestra la ruta de geovalla.

Creación de una cuenta de Azure Storage

Para almacenar datos de seguimiento de infracciones de automóvil, cree una cuenta de almacenamiento de uso general v2 en el grupo de recursos. Si no ha creado un grupo de recursos, siga las instrucciones que se indican en Crear grupos de recursos. Asigne al grupo de recursos el nombre ContosoRental.

Para crear una cuenta de almacenamiento, siga las instrucciones de Creación de una cuenta de almacenamiento. En este tutorial, la cuenta de almacenamiento se llamará contosorentalstorage, pero puede asignarle el nombre que quiera.

Una vez que haya creado la cuenta de almacenamiento correctamente, es necesario crear un contenedor para almacenar los datos de registro.

  1. Vaya a la cuenta de almacenamiento recién creada. En la sección Essentials, haga clic en el vínculo Contenedores.

    Captura de pantalla de los contenedores para el almacenamiento de blobs.

  2. En la esquina superior izquierda, seleccione + Container (+ Contenedor). Aparece un panel en el lado derecho del explorador. Asigne al contenedor el nombre contoso-rental-logs y seleccione Crear.

    Captura de pantalla del cuadro de diálogo de creación de un contenedor de blobs.

  3. Vaya al panel Claves de acceso de la cuenta de almacenamiento y copie los valores de Nombre de la cuenta de almacenamiento y Clave en la sección key1. Necesitará ambos valores en la sección Creación de una función y adición de una suscripción a Event Grid.

    Captura de pantalla de la copia del nombre y la clave de la cuenta de almacenamiento.

Carga de una geovalla en la cuenta de Azure Storage

La geovalla define el área geográfica autorizada para nuestro vehículo de alquiler. Use la geovalla en la función de Azure para determinar si un automóvil se ha salido del área de la geovalla.

Siga los pasos descritos en el artículo Cómo crear un registro de datos para cargar el archivo de datos JSON de geovalla en su cuenta de almacenamiento de Azure y luego regístrelo en su cuenta de Azure Maps. Asegúrese de anotar el valor de identificador único (udid), ya que lo necesitará. udid es la forma en que hace referencia a la geovalla que cargó en la cuenta de almacenamiento de Azure desde el código fuente. Para obtener más información sobre el formato de datos de las geovallas, consulte Datos GeoJSON de geovallas.

Creación de un centro de IoT

IoT Hub permite una comunicación bidireccional confiable y segura entre una aplicación de IoT y los dispositivos que administra. Este tutorial tiene como finalidad obtener información del dispositivo en el vehículo para determinar la ubicación del vehículo de alquiler. En esta sección, va a crear un centro de IoT en el grupo de recursos ContosoRental. Este centro es responsable de publicar los eventos de telemetría de su dispositivo.

Para crear un centro de IoT en el grupo de recursos ContosoRental, siga los pasos descritos en Creación de un centro de IoT.

Registro de un dispositivo en su centro de IoT

Los dispositivos no pueden conectarse al centro de IoT a menos que estén registrados en el registro de identidades del centro de IoT. Cree un único dispositivo denominado InVehicleDevice. Para crear y registrar el dispositivo en el centro de IoT, siga los pasos descritos en Registro de un nuevo dispositivo en el centro de IoT. Asegúrese de copiar la cadena de conexión principal del dispositivo. Lo necesitará más adelante.

Creación de una función y adición de una suscripción a Event Grid

Azure Functions es un servicio de proceso sin servidor que permite ejecutar pequeños fragmentos de código ("funciones") sin necesidad de aprovisionar ni administrar explícitamente la infraestructura de proceso. Para más información, consulte Azure Functions.

Una función la desencadena un determinado evento. Cree una función desencadenada por un desencadenador de Event Grid. Para establecer la relación entre el desencadenador y la función, cree una suscripción a los eventos de telemetría del dispositivo del centro de IoT. Cuando se produce un evento de telemetría del dispositivo, se llama a la función como un punto de conexión y recibe los datos pertinentes para el dispositivo que se registró anteriormente en el centro de IoT.

Este es el código de script de C# que contiene la función.

Configure ahora la función de Azure.

  1. En el panel de Azure Portal, seleccione Crear un recurso. Escriba Function App en el cuadro de búsqueda. Seleccione Function App>Create (Aplicación de funciones > Crear).

  2. En la página de creación de la Aplicación de funciones, asigne un nombre a la aplicación de funciones. En Grupo de recursos, seleccione ContosoRental en la lista desplegable. Seleccione .NET como la pila en tiempo de ejecución. En la parte inferior de la página, seleccione Siguiente: Almacenamiento >.

    Captura de pantalla de la creación de una aplicación de funciones.

  3. En Cuenta de almacenamiento, seleccione la cuenta de almacenamiento que creó en Crear una cuenta de almacenamiento. Seleccione Revisar + crear.

  4. Revise los detalles de la aplicación de funciones y seleccione Create.

  5. Una vez creada la aplicación, es preciso agregarle una función. Vaya a la aplicación de función. Seleccione el botón Crear en Azure Portal.

    Importante

    Las plantillas Desencadenador de Azure Event Hub y Desencadenador de Azure Event Grid tienen nombres similares. Asegúrese de seleccionar la plantilla Desencadenador de Azure Event Grid.

    Captura de pantalla de la creación de una función en Azure Portal.

  6. Aparece el panel Crear función. Desplácese hacia abajo en el panel Seleccionar una plantilla, seleccione Desencadenador de Azure Event Grid y, después, seleccione el botón Crear.

    Captura de pantalla de la creación de una función.

  7. Asigne un nombre a la función. En este tutorial, use el nombre GetGeoFunction, pero por lo general puede cualquier otro nombre. Seleccione Crear función.

  8. En el menú de la izquierda, seleccione el panel Código + prueba. Copie y pegue el script de C# en la ventana de código.

    Captura de pantalla de la copia y pegado de código en la ventana de función.

  9. En el código de C#, reemplace los siguientes parámetros:

    • Reemplace SUBSCRIPTION_KEY por la clave de suscripción de su cuenta de Azure Maps.
    • Reemplace UDID por el valor udid de la geovalla que cargó en Carga de geovallas en la cuenta de almacenamiento de Azure.
    • La función CreateBlobAsync del script crea un blob por evento en la cuenta de almacenamiento de datos. Reemplace ACCESS_KEY, ACCOUNT_NAME y STORAGE_CONTAINER_NAME por la clave de acceso de la cuenta de almacenamiento, el nombre de la cuenta y el contenedor de almacenamiento de datos. Estos valores se generaron al crear la cuenta de almacenamiento en Crear una cuenta de almacenamiento de Azure.
  10. En el menú de la izquierda, seleccione el panel Integración. Seleccione Desencadenador de Event Grid en el diagrama. Escriba un nombre para el desencadenador, eventGridEvent, y seleccione Crear suscripción de Event Grid.

    Captura de pantalla de la adición de una suscripción a eventos.

  11. Rellene los detalles de la suscripción. Asigne un nombre a la suscripción del evento. En Esquema de eventos, seleccione Esquema de Event Grid. En Tipos de tema, seleccione Cuentas de Azure IoT Hub. En Grupos de recursos, seleccione el grupo de recursos que creó al principio de este tutorial. En Recurso, seleccione el centro de IoT que ha creado en "Creación de un centro de Azure IoT". En Filtrar por tipos de eventos, seleccione Telemetría del dispositivo.

    Después de elegir estas opciones, verá que Tipo de tema cambia a IoT Hub. En Nombre del tema del sistema, puede usar el mismo nombre del recurso. Por último, en la sección Detalles del punto de conexión, elija Selección de un punto de conexión. Acepte toda la configuración y elija Confirmar selección.

    Captura de pantalla de la creación de una suscripción a eventos.

  12. Revise la configuración. Asegúrese de que el punto de conexión especifica la función que creó al principio de esta sección. Seleccione Crear.

    Captura de pantalla de confirmación de la creación de una suscripción de eventos.

  13. Ahora vuelva al panel Editar desencadenador. Seleccione Guardar.

Filtrado de eventos mediante el enrutamiento de mensajes de IoT Hub

Cuando se agrega una suscripción a Event Grid para la función de Azure, se crea automáticamente una ruta de mensajería en el centro de IoT especificado. El enrutamiento de mensajes le permite enrutar distintos tipos de datos a varios puntos de conexión. Por ejemplo, puede enrutar los mensajes de telemetría del dispositivo, los eventos del ciclo de vida del dispositivo y los eventos de cambio de dispositivo gemelo. Para más información, consulte Uso del enrutamiento de mensajes de IoT Hub.

Captura de pantalla del enrutamiento de mensajes en IoT Hub.

En el escenario de ejemplo, solo desea recibir mensajes cuando el vehículo de alquiler está circulando. Cree una consulta de enrutamiento para filtrar los eventos en los que la propiedad Engine sea igual a "ON" . Para crear una consulta de enrutamiento, seleccione la ruta RouteToEventGrid y reemplace la consulta de enrutamiento por "Engine='ON'" . Después, seleccione Guardar. Ahora, el centro de IoT solo publicará los datos de telemetría del dispositivo cuando el valor para Engine sea ON.

Captura de pantalla del filtro de mensajes de enrutamiento.

Sugerencia

Hay varias maneras de consultar mensajes del dispositivo a la nube de IoT. Para obtener más información sobre la sintaxis del enrutamiento de mensajes, consulte Enrutamiento de mensajes de IoT Hub.

Envío de datos de telemetría a IoT Hub

Cuando la función de Azure está ejecutándose, puede enviar los datos de telemetría al centro de IoT, que los enruta a Event Grid. Use una aplicación de C# para simular los datos de ubicación de un dispositivo instalado en un vehículo de alquiler. Para ejecutar la aplicación, necesita el SDK de .NET 6.0 en el equipo de desarrollo. Siga los pasos que se indican a continuación para enviar datos de telemetría simulados al centro de IoT.

  1. Si todavía no lo ha hecho, descargue el proyecto rentalCarSimulation de C#.

  2. Abra el archivo connectionString en un editor de texto de su elección, reemplace el valor de simulatedCar.cs por el que guardó al registrar el dispositivo. Guarde los cambios realizados en el archivo.

  3. Asegúrese de que tiene el runtime de ASP.NET Core instalado en la máquina. En la ventana del terminal local, vaya a la carpeta raíz del proyecto de C# y ejecute el siguiente comando para instalar los paquetes necesarios para la aplicación de dispositivo simulado:

    dotnet restore
    
  4. En el mismo terminal, ejecute el comando siguiente para compilar la aplicación de simulación de automóvil de alquiler y ejecutarla:

    dotnet run
    

El terminal local debe tener un aspecto similar al de la captura de pantalla siguiente.

Captura de pantalla de la salida del terminal.

Si abre el contenedor de almacenamiento de blobs ahora, puede ver cuatro blobs, que corresponden a las ubicaciones en las que el vehículo estuvo fuera de la geovalla.

Captura de pantalla de visualización de blobs dentro del contenedor.

En el mapa siguiente se muestran cuatro puntos de ubicación del vehículo fuera de la geovalla. Cada ubicación se registró en intervalos de tiempo regulares.

Captura de pantalla del mapa de infracciones.

Explorar Azure Maps e IoT

Para explorar las API de Azure Maps que se usan en este tutorial, consulte:

Para obtener una lista completa de las API REST de Azure Maps, consulte:

Para obtener una lista de los dispositivos que tienen la certificación de Azure para IoT, visite:

Limpieza de recursos

No hay recursos que requieran limpieza.

Pasos siguientes

Para más información sobre cómo enviar datos de telemetría del dispositivo a la nube y viceversa, consulte: