Ir al contenido

Primeros pasos con Grafana e InfluxDB en tu Raspberry PLC

Aprende a configurar una solución de monitorización con Grafana e InfluxDB en el Raspberry PLC
31 de julio de 2024 por
Primeros pasos con Grafana e InfluxDB en tu Raspberry PLC
Boot & Work Corp. S.L, Ricard Franch Argullol

Grafana es una herramienta potente para crear paneles interactivos y claros, mientras que InfluxDB destaca en el manejo de datos de series temporales. Juntas ofrecen una sólida solución de código abierto para el análisis de datos en tiempo real.

En esta guía te mostramos cómo instalar y configurar Grafana e InfluxDB, ambos proyectos de código abierto, en tu Raspberry PLC de Industrial Shields. Al final tendrás un sistema de visualización de datos funcional que te permite visualizar y analizar tus datos de forma eficaz.


Requisitos

¡Recuerda! El Raspberry PLC debe alimentarse con una fuente de 12-24 Vdc.


Instalación del software necesario


1. Raspberry Pi OS y librerías de Industrial Shields

Lo primero es preparar el entorno adecuado para Grafana e InfluxDB en nuestro PLC. Por defecto, con el Raspberry PLC suministramos una imagen de sistema operativo de 32 bits. En este caso, sin embargo, por compatibilidad con InfluxDB v2, usaremos una imagen de 64 bits. Puedes crearla como se describe en el siguiente tutorial, pero seleccionando una imagen de 64 bits:

Después, instala nuestras librerías para interactuar con las entradas y salidas del PLC en C++ y Python; el procedimiento se describe en nuestro GitHub:

¡Recuerda! La imagen de Raspberry Pi OS debe ser la versión de 64 bits.


2. Grafana

A continuación, instala Grafana siguiendo los pasos de su sitio web:


3. InfluxDB v2

Por último, instala InfluxDB, la base de datos de series temporales que usaremos para guardar los datos en este ejemplo. La instalaremos como servicio, siguiendo los pasos de la documentación oficial de InfluxDB v2:

Instala también el módulo de Python para interactuar con InfluxDB con el siguiente comando:

pip3 install Influxdb-client


Configuración de InfluxDB


1. Configuración de la base de datos

Con todo el software necesario instalado, podemos empezar a configurar la base de datos. La configuración inicial se puede hacer con la interfaz de InfluxDB, con la CLI influx o con la API HTTP. En este caso usaremos la interfaz. 

Para acceder a la interfaz con InfluxDB en marcha, basta con abrir en el navegador http://10.10.10.20:8086 (donde la dirección IP es la del Raspberry PLC). Pulsa "Get Started" y sigue los pasos para introducir:

  • Usuario y contraseña del administrador de la base de datos.
  • Nombre de la organización (organization): un espacio de trabajo para un grupo de usuarios.
  • Bucket: una ubicación con nombre donde se almacenan los datos de series temporales. Los buckets pertenecen a una organización y tienen un periodo de retención, es decir, el tiempo que cada dato permanece en la base de datos. 

Por último, crearemos un token para interactuar con la base de datos. Los tokens de API de InfluxDB garantizan una interacción segura entre InfluxDB y herramientas externas, como los clientes. Para interactuar con la base de datos necesitamos crear uno para nuestro usuario con los permisos adecuados. En este caso crearemos uno con permisos de lectura y escritura en todos los buckets. El procedimiento con la interfaz de InfluxDB es el siguiente:

  1. En el menú de navegación de la izquierda, selecciona Load Data > API Tokens.
  2. Pulsa el botón GENERATE API TOKEN.
  3. Selecciona Custom API Token.
  4. Escribe una descripción y marca las casillas Read y Write para All buckets.
  5. Por último, guarda tu token. Es la única vez que podrás verlo, así que guárdalo en un lugar seguro.

Generación de un token en InfluxDB

Con estos sencillos pasos ya tenemos un usuario administrador y un bucket para guardar datos, además de un token para leer y escribir en los buckets.

Si quieres saber más sobre el procedimiento de configuración o sobre otras formas de hacerlo, consulta la documentación de Influx:


2. Guardar datos en InfluxDB con Python

Para tener datos que mostrar después en Grafana, crearemos un script de Python sencillo que lee una entrada analógica y guarda el valor en la base de datos. Usaremos los módulos de Python RPIPLC e InfluxDB instalados antes.

Crea un archivo con el nombre que prefieras, por ejemplo "storeread.py", y copia el código siguiente. Este programa lee la entrada I0.12 y guarda el valor en la base de datos cada segundo. Fíjate en que usamos nuestra librería python-librpiplc para realizar las lecturas, y recuerda adaptar la función rpiplc.init() a la versión de tu PLC (consulta el GitHub para más información).

Además, hay que adaptar las variables a los ajustes configurados en los pasos anteriores:

  • URL: la dirección de la base de datos. En este ejemplo el programa se ejecuta en la misma máquina que la base de datos, así que basta con usar "http://localhost:8086".
  • Organization: la organización que creamos en los pasos anteriores.
  • Bucket: el bucket que creamos en los pasos anteriores, donde se guardarán los datos.
  • Token: el token creado en los pasos anteriores, que da permisos a nuestro programa para escribir en el bucket.

import influxdb_client, os, time
from influxdb_client import InfluxDBClient, Point, WritePrecision
from influxdb_client.client.write_api import SYNCHRONOUS
from librpiplc import rpiplc

url = "http://localhost:8086"
org = "YOUR ORG"
bucket= "YOUR BUCKET"
token = "YOUR TOKEN"

write_client = influxdb_client.InfluxDBClient(url=url, token=token, org=org)
write_api = write_client.write_api(write_options=SYNCHRONOUS)


if __name__ == "__main__":
    rpiplc.init("RPIPLC_V4", "RPIPLC_21")

    while True:
        reading = rpiplc.analog_read("I0.12")
        print("%d" % reading)
        point = (
            Point("Reading")
            .tag("Input", "I0.12")
            .field("Value", reading)
        )
        write_api.write(bucket=bucket, org="Industrial Shields", record=point)
        time.sleep(1)


Por último, podemos ejecutar este programa sencillo con el comando python storeread.py para guardar datos en InfluxDB. En la interfaz de InfluxDB podemos comprobar con una consulta que los datos se guardan correctamente. Si quieres saber más sobre el uso de consultas en la interfaz de InfluxDB, consulta su documentación oficial:


Explorador de datos de InfluxDB


Grafana

Con los datos ya disponibles, podemos crear nuestro panel en Grafana. Primero, abre Grafana en tu navegador: http://10.10.10.20:3000/ (si no usas la IP predeterminada de Ethernet 0, recuerda cambiarla por la que uses). La primera vez que entres tendrás que introducir un usuario y una contraseña; por defecto ambos son "admin" (por seguridad conviene cambiar las credenciales, lo que puedes hacer desde la propia página web).


1. Configuración de la conexión con InfluxDB

Dentro de Grafana, lo primero es establecer la conexión con nuestro InfluxDB para obtener los datos. Se hace así:

  1. Ve a Connections > Add new connection.
  2. Selecciona InfluxDB.
  3. Selecciona Add new data source.
  4. Configura los ajustes así:
    1. Query language: en este caso usaremos Flux, pero puedes elegir el que prefieras.
    2. URL: http://localhost:8086
    3. Selecciona "Basic auth" e introduce el usuario y la contraseña.
    4. Organization: la organización creada antes.
    5. Token: el token que creamos para dar acceso a la base de datos.
    6. Default bucket: pon el bucket que usamos antes para guardar los datos.
  5. Pulsa Save & Test.


Configuración de la conexión de Influx con Grafana



2. Visualización de los datos

Con la conexión entre Grafana e InfluxDB configurada, ya podemos crear nuestro panel y empezar a consultar datos. Para crearlo:

  1. Haz clic en Dashboards en el menú de la izquierda.
  2. En la página Dashboards, haz clic en New y selecciona New Dashboard en el menú desplegable.
  3. En el panel, haz clic en + Add visualization.
  4. Selecciona la fuente de InfluxDB que creamos en los pasos anteriores:

    Selección de la fuente de datos en Grafana
  5. Aparece una ventana nueva donde podemos configurar todos los aspectos de la visualización, además de la consulta que obtiene los datos. Aquí usamos una visualización de series temporales, una de las muchas opciones que ofrece Grafana. En el menú de la derecha se configuran todos sus aspectos: estilos del gráfico, leyendas, etc. En el campo de consulta hay que escribir una consulta en Flux (u otro lenguaje) para obtener los datos. En este caso solo leemos las lecturas de I0.12 que introdujimos en la base de datos, con la organización y las etiquetas correspondientes:
    from(bucket: "Example")
      |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
      |> filter(fn: (r) => r["_measurement"] == "Reading")
      |> filter(fn: (r) => r["Input"] == "I0.12")
      |> filter(fn: (r) => r["_field"] == "Value")
      |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
      |> yield(name: "mean")

    Página de configuración de la visualización en Grafana

  6.  Haz clic en Apply, y después, en la página del panel, pulsa el botón Save de la barra superior.

Con esto ya tenemos un panel sencillo con una visualización. Ahora podemos añadir más, de distintos tipos, para mostrar más datos. Por ejemplo, este panel tiene lecturas de más entradas y distintos tipos de visualización, como tablas e indicadores:

Panel de Grafana


Ya conoces los pasos básicos para tener una aplicación funcional con Grafana e InfluxDB en tu Raspberry PLC. Puedes usar este ejemplo como punto de partida para crear tu propia aplicación. Si quieres saber más sobre Grafana e InfluxDB, consulta sus respectivas documentaciones:

Si quieres saber más

consulta el siguiente enlace y no olvides leer el resto de artículos de este blog.

Buscar en nuestro blog

Primeros pasos con Grafana e InfluxDB en tu Raspberry PLC
Boot & Work Corp. S.L, Ricard Franch Argullol 31 de julio de 2024
Compartir esta publicación
Etiquetas

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs