IoT en D365FO (arquitectura)
En el artículo de hoy vamos a hablar de IoT; de IoT conectado a D365FO y de como darle a nuestro ERP una nueva capa de funcionalidad que nos permita poder controlar, monitorizar y predecir todo aquello relacionado con nuestros dispositivos conectados de nuestro negocio.
¿Cuál es el objetivo de esta funcionalidad?
Claramente en la actualidad cada vez oímos más hablar de IoT (Internet of things) y de como poder controlar dispositivos desde la nube, tener una monitorización en tiempo real y demás. Eso es exactamente lo que pretende esta funcionalidad; poder tener un entorno de trabajo con una serie de dispositivos IoT (señales, sensores, máquinas, datos de telemetría...) que envíen esta información a D365FO y poder realizar acciones y tomar conclusiones en base a esos datos.
Hace un tiempo vimos el lanzamiento de esta funcionalidad bajo el nombre de "IoT Intelligence". Ahora esta funcionalidad ha sido mejorada y a su vez cambiada de nombre por "Sensor Data Intelligence".
¿Qué podemos hacer con esta característica?
En la actualidad esta funcionalidad nos permite analizar 5 escenarios distintos aunque es de esperar que la cantidad de éstos se vea aumentada. Anteriormente solo podíamos analizar 3 de ellos.
Vamos a verlos en la siguiente tabla:
Ejemplos de aplicación:
- Sensor de producción que se encarga de pesar los palets que pasan por encima. Si el peso es superior a lo esperado hay que rechazar ese palet.
- Lector de presencia en una línea de producción para controlar que la producción sigue funcionando. Si se produce un fallo en la línea se nos notificará.
- Medir el tiempo de utilización de un dispositivo para predecir el punto en el que habrá que hacer un mantenimiento
Hasta aquí podríamos decir que tenemos toda la información NO técnica de esta funcionalidad. A partir de este punto se analizan todos los aspectos técnicos de arquitectura y configuración para entender los entresijos del sistema.
¿Cómo puedo activar esta funcionalidad?
Esta nueva versión de la funcionalidad nos ofrece una variación muy importante cuanto a su activación y configuración inicial. Mientras que en la versión anterior se configuraba mediante un add-in a partir del portal de LCS; en la versión actual lo hacemos directamente desde el entorno de D365FO.
Así pues realizaremos las siguientes acciones:
- Vaya a Administración del sistema > Espacios de trabajo > Administración de características.
- En la pestaña Todos, utilice el campo Filtro para buscar la característica que se llama Sensor Data Intelligence.
- Si la característica Sensor Data Intelligence está habilitada en su sistema, selecciónela en la lista y luego seleccione Deshabilitar para deshabilitarla. No puede usar esta versión anterior de la función junto con la nueva versión
- Use el campo Filtro para buscar la característica que se llama (Vista previa) Sensor Data Intelligence.
- Seleccione la característica en la lista y luego seleccione Habilitar ahora para habilitarla.
Una vez activada la funcionalidad vamos a configurarla:
- Iniciamos sesión en D365FO con una cuenta que tenga permisos de administrador.
- Vamos a Administración del sistema > Configuración > Sensor Data Ingelligence > Implementar y conectar recursos de Azure para abrir el asistente.
- En la página Implementar la solución de IoT de muestra en Azure seleccionamos Implementar.
- Se abrirá una nueva ventana que nos redirigirá directamente al portal de Azure.
- En la página Implementación personalizada, en el campo Suscripción, seleccionamos la suscripción que alojará los recursos.
- Creamos un nuevo grupo de recursos o reutilizamos uno existente
- Establecemos los campos siguientes: URL del entorno de gestión de la cadena de suministro y Reutilizar Azure IoT Hub existente desmarcado.
- Seleccionamos Siguiente: Revisar y crear.
Una vez creados los recursos vamos a realizar unas últimas configuraciones en el entorno de D365FO.
Si no hemos cerrado el asistente, en el siguiente paso nos aparecerán estos campos:
Si hemos cerrado el asistente tan solo tenemos que navegar a la ruta Administración del sistema > Configurar > Inteligencia de datos de sensores > Parámetros de Sensor Data Intelligence en la que veremos un formulario donde configurar los mismos campos.
Necesitamos 2 cadenas de información para poder rellenar estos campos. Nos dirigiremos al portal de Azure y dentro de los recursos creados buscaremos 2 de ellos:
Id de cliente (identidad administrada)
Cache de Redis
Copiamos estos valores y los pegamos cada uno en su lugar correspondiente.
Una vez hechos estos pasos ya tenemos la herramienta correctamente configurada y podemos usarla. Pero no vamos a quedarnos aquí; vamos a analizar qué ha pasado en este proceso de instalación y cuales son los elementos implicados.
Arquitectura de Azure
En la siguiente imagen podemos ver la arquitectura que habrá en Azure una vez hayamos implementado los recursos comentados anteriormente:
Sensores IoT
En primer lugar (a la izquierda de la imagen) tenemos los sensores físicos que serán los encargados de enviar la información de sus lecturas a un IoT Hub. Estas lecturas deberán enviarse en un formato en particular a Azure y siempre deberán ser un par "sensor-valor".
El formato será JSON y tendrá una estructura como la siguiente:
{
"value": 50,
"sensorId": "Machine1"
}
De esta manera el IoT Hub es capaz de distribuir los mensajes que recibe entre todos los dispositivos creados.
IoT Hub
Este recurso es el encargado de almacenar y organizar todos los dispositivos IoT que tengamos. Conceptualmente debería alojar tantos dispositivos IoT como dispositivos reales que tengamos conectados.
Para ello nos dirigimos a la pestaña "Dispositivos" y creamos tantos como queramos:
La diferencia entre ellos es que cada uno tiene su cadena de conexión, y es la que deberemos usar para poder configurar el envío de las señales.
Azure Stream Analytics
Estos recursos de Stream Analytics se encargan de realizar los siguientes procesos:
1. El enlace entre el IoT Hub (donde residen las señales de los dispositivos) y el destino de esas señales. En particular esta información tiene 2 destinos:
- Azure Redis Cache (punto de entrada de las métricas a D365FO)
- Service Bus Queue (gestión de las notificaciones)
2. Recibir datos por parte de D365FO de cara a poder identificar las características y disparadores configurados en D365FO y poder ejecutar las notificaciones.
Así pues podemos encontrar un recurso de Stream Analytics para cada tipo de escenario comentado anteriormente.
Si entramos en uno de ellos veremos como existen unas entradas y unas salidas para estas funciones, comunes para todos ellos.
- Entradas
- Señales IoT
- Información de D365FO relativa a configuración
- Salidas
- Métricas a Redis Cache (para pdoer visualizar las señales en D365FO)
- Mensajes a Service Bus (para gestionar las posibles notificaciones)
Azure Function
Este recurso es el más simple de todos pero el más necesario. Se encarga de la transmisión propiamente dicha de la información entre el origen y el destino. Es el canal por donde viajarán nuestras señales desde Stream Analytics hasta Redis Cache.
Redis Cache
Azure Cache for Redis es una caché en memoria completamente administrada que permite arquitecturas escalables y de alto rendimiento. Se usa para crear implementaciones en la nube o híbridas que manejan millones de solicitudes por segundo con una latencia de menos de un milisegundo, todo con los beneficios de configuración, seguridad y disponibilidad de un servicio administrado. Por tanto es extremadamente útil cuando hablamos de transmisión de datos sencillos con un frecuencia muy elevada y con necesidad de tiempo real.
Podemos en este recurso configurar el tamaño de esta caché y el tiempo de vida de los datos en ella. Viene a ser un "SQL" sencillo con borrado automático.
Así pues también nos ofrece una gran variedad de escalabilidad, como podéis ver en la siguiente imagen:
Aunque obviamente luego repercute en el coste del recurso.
Es en este recurso donde van a almacenarse nuestros datos IoT para que sean accesibles por parte de D365FO. De hecho D365FO hará peticiones periódicas a Redis Cache para obtener los datos y construir los gráficos.
Storage Blob
Este recurso no es más que una cuenta de almacenamiento donde a partir de una Logic App almacenamos las configuraciones de D365FO para que luego el servicio de Stream Analytics pueda comparar los datos reales con las configuraciones y poder generar las alertas.
El contenido de la cuenta de almacenamiento es el siguiente:
Como podéis ver en cada carpeta se almacenará la información de cada escenario con la intención de que Azure tenga estos datos.
Por ejemplo si configuramos el escenario de calidad de producto tendremos un archivo parecido a éste con la información de esa configuración:
El contenido de uno de estos archivos es el siguiente:
[
{
"@odata.etag": "W/\"JzEsNTYzNzE0NjA4MTsxLDY4NzE5NDc2NzYyJw==\"",
"SensorId": "MachineStatus1",
"JobId": "005863",
"JobDataAreaId": "usmf",
"ItemNumber": "P0111",
"MaximumAttributeTolerance": 30,
"OptimalAttributeValue": 25,
"JobRegistrationStartDateTime": "2022-09-22T02:50:40Z",
"OrderId": "B000052",
"IsJobCompleted": "No",
"MinimumAttributeTolerance": 10,
"JobRegistrationStopDateTime": "1900-01-01T00:00:00Z",
"AttributeName": "Concentration"
}
]
En él podemos ver el nombre del sensor, la empresa, el artículo, los márgenes de tolerancia, la orden de producción asociada, el atributo que vamos a medir...
Con esta información tan solo es necesario hacer una comparación con el valor obtenido por el sensor para saber si está fuera o dentro de las tolerancias.
Logic App (transmisión de datos de D365FO a Azure)
Este recurso es el más complejo de analizar aunque su función sea quizás bastante sencilla de entender. Esta logic app se encarga de coger configuraciones de D365FO y trasladarlas al storage anteriormente comentado. ¿Cómo lo hace? Tan solo hay que echar un ojo al siguiente esquema para que veáis la complejidad del asunto.
Imposible detectar nada en esta imagen así que vamos a hacer un spoiler: hay una rama para cada escenario. Así que vamos a centrarnos solo en uno y luego mentalmente seremos capaces de replicarlo para los demás.
Cogemos el ejemplo del escenario de calidad de producto.
En primer lugar tenemos una serie de peticiones para obtener acceso a D365FO y devolvernos el listado de escenarios activos y configurados.
Una vez obtenido (paso común para todos) el flujo realiza las acciones propias para cada escenario; en el caso de la evaluación de la calidad del producto:
Sin entrar mucho en detalle lo que realiza este flujo es comparar las configuraciones que existen en el Storage y crear las que sean necesarias para que la configuración sea actual. Por defecto el decalaje entre actualizaciones de configuración es de 2 minutos, aunque podemos modificarlo fácilmente.
Service Bus
Este servicio es el encargado de poner en cola todas las notificaciones detectadas por Stream Analytics y que tienen que ser enviadas a D365FO en orden.
Logic App (notificaciones)
Una vez tenemos las notificaciones en el Service Bus necesitamos que algo transmita estas alertas a D365FO. De esto se encarga esta Logic App.
Mediante un Post sobre D365FO nos muestra las alertas y marca los mensajes como completados para que la cola se vacíe y el mensaje no vuelva a ser enviado.
¿Con estos conocimientos ya podría usar IoT con D365FO?
Por supuesto la respuesta es sí. Pero en este artículo no hemos visto su funcionamiento ni su configuración. Para ello os emplazamos a ver la siguiente publicación donde, además, hay sorpresas.
En la siguiente publicación configuraremos escenarios, veremos como se muestran los resultados en D365FO, y también veremos como podemos añadirle una capa de visualización mejor con herramientas externas. Por último, lo comentado, alguna sorpresa caerá.
*This post is locked for comments