La verdad es que hacía tiempo que tenía ganas de integrar Azure IoT con Project Online. Las posibilidades que se ofrecen son bastante amplias, pero entiendo que su mayor utilidad es la de generar dinámicamente “Issues” en Project Online cuando se sobrepasan ciertos límites registrados por los dispositivos.
Por ejemplo, un exceso de temperatura en alguna máquina (Industria 4.0), un exceso de tensión en un puente, ciertos niveles de viento…Para no partir de cero, voy a continuar aprovechar los ejemplos de la serie sobre IoT de mi compañero Adrián del Rincón.
El ejemplo que vamos a desarrollar sería el siguiente: imaginemos que estamos encargados del mantenimiento de un puente colgante o de un cableado en altura. Si el viento alcanza cierta velocidad, aumenta el riesgo de rotura al aumentar la tensión. Para evitar esto, tenemos varios dispositivos que se encargan de medir la velocidad del viento y que va enviando las medidas a Azure IoT Hub. Sin embargo, si alcanza cierta velocidad, se envía un mensaje de alerta que genera un elemento en la lista de “Issues” del proyecto de mantenimiento de la infraestructura.
Así pues, partiremos del mismo código que utilizamos como ejemplo en el artículo Desgranando IoT (II): Azure IoT Hub. Sin embargo, añadiremos sólo una pequeña variación para poder enviar los mensajes de alerta a una cola diferente.
El código resaltado en la imagen añade una propiedad al objeto del mensaje llamada “windSpeedAlert”. El valor de la misma es “true” en caso de que el valor del viento sea superior a 11 y “false” en caso contrario:
message.Properties.Add(«windSpeedAlert», (currentWindSpeed > 11) ? «true»: «false»);
De esta forma, estamos preparados para enrutar los mensajes críticos a una cola dedicada. ¿Qué nos falta?
No vamos a explicar el proceso de añadir un nuevo servicio de “Service Bus” en Azure. Para má
En nuestro caso, vamos a crear una cola dedicada dentro de la instancia de “Service Bus” para enviar a la misma los mensajes críticos detectados. Para crear una nueva cola, se debe localizar el enlace “Colas” debajo del apartado “Entidades” de “Service Bus”
A continuación, se debe añadir la nueva cola, en este caso, la llamaremos “windAlerts”. Simplemente hay que pulsar el botón “+Queue” y completar el formulario (en el ejemplo se muestran los valores por defecto).
Para que nuestro servicio de IoT Hub envíe las peticiones críticas a la cola creada en el apartado anterior, se debe crear un endpoint en IoT Hub que lo conecte con la cola correspondiente en “Service Bus”.
En “IoT Hub”, dentro del apartado “MESSAGING” se encuentra el enlace a “EndPoints”.
Añadiremos uno nuevo llamado “WindSpeed.EndPoint”, cuyo tipo de conexión sea una cola de “Service Bus”. De esta manera, en el desplegable “Cola del bus de servicio” se mostrarán las colas disponibles dentro del espacio de nombres indicado. En este caso, seleccionaremos “windalerts”.
Muy bien, ya tenemos nuestro “endpoint” enlazado con la cola deseada. Sin embargo, no irá a parar a ella ningún mensaje puesto que, en nuestro ejemplo, los mensajes de los dispositivos llegan al endpoint por defecto, “message/events”. Falta añadir una ruta para que los mensajes que cumplan la propiedad “windspeedAlert = true” vayan a parar donde deseamos.
Para añadir una nueva ruta se debe localizar el enlace “Routes” debajo de “Endpoints».
Al añadir una nueva ruta, se debe especificar el nombre de la misma, el origen de datos (“Mensajes del dispositivo”, que es lo que se está tratando), el punto de conexión y, por último, la cadena de consulta que se va a utilizar. En este caso, se comprueba que el valor de la propiedad “windSpeedAlert” del dispositivo sea igual a “true”.
Si ejecutamos de nuevo el ejemplo y revisamos las métricas de la cola en el “Service Bus”, se puede comprobar que están llegando peticiones a la misma.
Por ahora lo dejamos aquí. En la segunda parte de este artículo cerraremos el círculo y veremos «Cómo generar una Issue en Project Online» 😉
Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)