Raspberry Pi

Grafana e InfluxDB en Raspberry Pi para datos de sensores MQTT

Instala InfluxDB 2, Telegraf y Grafana en una Raspberry Pi de 64 bits, suscribe Telegraf a un broker MQTT, almacena las lecturas de sensores como series temporales y grafícalas en Grafana.

Dashboard de Grafana en un monitor conectado a una Raspberry Pi que ejecuta un stack de Grafana e InfluxDB alimentado por sensores MQTT
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

Montar Grafana e InfluxDB en Raspberry Pi es una de las formas más prácticas de conservar meses de historial de sensores en un ordenador pequeño y silencioso que controlas tú. En este tutorial instalarás InfluxDB 2, Telegraf y Grafana en una Raspberry Pi de 64 bits, harás que Telegraf se suscriba a un broker MQTT y construirás un dashboard de Grafana que se actualiza a medida que llegan nuevas lecturas. Todos los comandos y archivos de configuración están completos, así que puedes seguirlo en una Pi recién instalada.

Arquitectura: quién habla con quién

Antes de instalar nada, conviene tener claro el camino de los datos, porque es donde fallan la mayoría de las instalaciones:

  1. Los sensores (placas ESP32, nodos Pico W, otras Pi) publican JSON en un broker MQTT.
  2. Telegraf, en la Pi, se conecta a ese broker como un cliente MQTT normal, se suscribe a los topics de los sensores y analiza el JSON.
  3. Telegraf escribe los campos analizados en un bucket de InfluxDB 2 en la misma Pi.
  4. Grafana consulta InfluxDB y dibuja los paneles.

El broker en sí no escribe en ninguna base de datos. Solo enruta mensajes. Si quieres repasar ese papel, lee qué hace un broker MQTT. Aquí el broker está en la nube, lo que significa que sensores de otros edificios pueden publicar en él y tu Pi solo necesita una conexión de salida. Sin redirección de puertos ni DNS dinámico.

Componente Función Puerto por defecto en la Pi
Broker MQTT (nube) Recibe y enruta los mensajes de los sensores Ninguno en la Pi
Telegraf Suscriptor MQTT y analizador JSON Ninguno (solo salida)
InfluxDB 2 Almacenamiento de series temporales 8086
Grafana Dashboards e interfaz de alertas 3000

Requisitos

  • Raspberry Pi 4 o 5 con al menos 2 GB de RAM. Una Pi 3 puede servir para cargas muy ligeras, pero va justa.
  • Raspberry Pi OS de 64 bits (Bookworm). Los paquetes de InfluxDB 2 están compilados para arm64, así que la imagen de 32 bits no sirve.
  • Se recomienda encarecidamente un SSD por USB 3. Las bases de datos de series temporales escriben constantemente y las tarjetas SD se desgastan.
  • Un sensor que ya publique por MQTT. Si no tienes ninguno, el tutorial de estadísticas del sistema de la Raspberry Pi convierte a la propia Pi en una fuente de datos en cinco minutos.

Confirma primero la arquitectura:

uname -m          # should print aarch64
cat /etc/os-release | grep VERSION_CODENAME

Instalar InfluxDB 2 y Telegraf

Ambos vienen del repositorio de paquetes de InfluxData. Añade la clave de firma y el repositorio, e instala:

sudo apt update && sudo apt install -y curl gpg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://repos.influxdata.com/influxdata-archive.key \
  | sudo gpg --dearmor -o /etc/apt/keyrings/influxdata-archive.gpg
echo "deb [signed-by=/etc/apt/keyrings/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main" \
  | sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt update
sudo apt install -y influxdb2 influxdb2-cli telegraf
sudo systemctl enable --now influxdb

Ejecuta la configuración inicial. Crea la organización, el primer bucket y el usuario administrador. Elige un periodo de retención acorde con la capacidad de tu SD o SSD; 90 días es un punto de partida razonable para sensores de habitación.

influx setup \
  --org home \
  --bucket sensors \
  --username admin \
  --password 'change-this-long-password' \
  --retention 90d \
  --force

Ahora crea un token dedicado para Telegraf en lugar de reutilizar el token de administrador. El mínimo privilegio importa incluso en una red doméstica:

influx auth create --org home --read-buckets --write-buckets \
  --description "telegraf writer"

Copia el token de la salida. Lo pondrás a continuación en la configuración de Telegraf.

Configurar Telegraf para suscribirse a MQTT

Telegraf incluye un archivo de configuración de ejemplo enorme. Sustitúyelo por uno específico para ver exactamente qué hace. Usa un client ID único y un prefijo de topics único; durante las pruebas, el servidor MQTT público gratuito de broker.connectmq.com funciona sin cuenta.

sudo mv /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.sample
sudo nano /etc/telegraf/telegraf.conf
[agent]
  interval = "10s"
  flush_interval = "10s"
  omit_hostname = true

[[inputs.mqtt_consumer]]
  servers = ["tcp://broker.connectmq.com:1883"]
  client_id = "telegraf-pi-4b21c9"
  topics = ["connectmq/demo/4b21c9/+/climate"]
  qos = 1
  persistent_session = false
  data_format = "json_v2"

  [[inputs.mqtt_consumer.topic_parsing]]
    topic = "connectmq/demo/4b21c9/+/climate"
    tags = "_/_/_/room/_"

  [[inputs.mqtt_consumer.json_v2]]
    measurement_name = "climate"
    [[inputs.mqtt_consumer.json_v2.field]]
      path = "t"
      rename = "temperature"
      type = "float"
    [[inputs.mqtt_consumer.json_v2.field]]
      path = "rh"
      rename = "humidity"
      type = "float"

[[outputs.influxdb_v2]]
  urls = ["http://127.0.0.1:8086"]
  token = "PASTE_THE_TELEGRAF_TOKEN_HERE"
  organization = "home"
  bucket = "sensors"

El bloque topic_parsing convierte el cuarto nivel del topic en un tag room, de modo que un mensaje en connectmq/demo/4b21c9/kitchen/climate se convierte en un punto con el tag room=kitchen. Los tags están indexados en InfluxDB, lo que acelera las consultas por habitación. Para más opciones del analizador, consulta la guía del consumidor MQTT de Telegraf.

Inicia el servicio y sigue su log. Telegraf muestra allí los errores de conexión y de análisis, lo que es mucho más fácil que adivinar:

sudo systemctl enable --now telegraf
sudo journalctl -u telegraf -f

Publica una lectura de prueba desde cualquier máquina:

mosquitto_pub -h broker.connectmq.com -p 1883 -i tester-4b21c9 -q 1 \
  -t connectmq/demo/4b21c9/kitchen/climate \
  -m '{"t":21.7,"rh":48.2}'

Después consulta InfluxDB directamente para confirmar que el punto llegó:

influx query --org home \
  'from(bucket:"sensors") |> range(start:-10m) |> filter(fn:(r) => r._measurement == "climate")'

Si ves filas con room=kitchen, la mitad de ingesta está lista.

Instalar Grafana en la Raspberry Pi

Grafana publica su propio repositorio arm64:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://apt.grafana.com/gpg.key \
  | sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" \
  | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install -y grafana
sudo systemctl enable --now grafana-server

Abre http://<pi-ip>:3000, inicia sesión con admin / admin y define una nueva contraseña cuando se te pida.

Conectar Grafana a InfluxDB

En Grafana, ve a Connections, Data sources, Add data source, InfluxDB y después:

  1. Define Query language como Flux.
  2. URL: http://localhost:8086.
  3. En InfluxDB Details, define Organization como home, pega un token (crea uno de solo lectura con influx auth create --org home --read-buckets para aplicar el mínimo privilegio) y define Default Bucket como sensors.
  4. Haz clic en Save and test. Deberías ver el número de buckets.

Construir un dashboard con Grafana e InfluxDB en Raspberry Pi

Crea un dashboard nuevo, añade un panel Time series y pega esta consulta Flux:

from(bucket: "sensors")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r._measurement == "climate" and r._field == "temperature")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "temperature")

Grafana dibuja automáticamente una línea por habitación porque room es un tag. Algunas decisiones de dashboard que marcan una diferencia real en una Pi:

  • Usa aggregateWindow. Sin ella, un rango de 30 días trae todos los puntos brutos y la Pi sufre. Con ella, Grafana solo pide tantos puntos como el panel puede mostrar.
  • Fija el refresco del dashboard en 30 segundos o más. Los refrescos más rápidos sobre todo queman CPU en la Pi para datos que cambian despacio.
  • Añade un panel Stat con last() en lugar de mean para la temperatura actual de cada habitación.
  • Usa las alertas de Grafana con moderación. Se evalúan en la Pi, así que mantén un intervalo de evaluación razonable.

Si prefieres prescindir de la base de datos y graficar directamente los valores MQTT en vivo, la guía de la fuente de datos MQTT para Grafana muestra ese enfoque. Es más sencillo, pero no tiene historial.

Pasar el broker a credenciales privadas

El servidor público es legible por cualquiera, así que los sensores de producción deben publicar en un broker privado. Con ConnectMQ, un broker MQTT en la nube que funciona como broker MQTT gestionado, creas un broker en el portal y recibes un usuario, una contraseña y un client ID. Cambia tres cosas en telegraf.conf:

[[inputs.mqtt_consumer]]
  servers = ["ssl://broker.connectmq.com:8883"]
  client_id = "YOUR_CLIENT_ID"
  username = "YOUR_USERNAME"
  password = "YOUR_PASSWORD"
  topics = ["home/+/climate"]
  qos = 1
  data_format = "json_v2"

ConnectMQ usa un certificado de Let's Encrypt, así que el paquete de CA del sistema de la Pi lo valida y no hace falta ninguna línea tls_ca. Recuerda que los client IDs están vinculados a las credenciales emitidas: Telegraf y cada sensor necesitan su propio client ID. Actualiza topic_parsing para que coincida con la nueva forma de tus topics.

Surge así un reparto claro de responsabilidades: ConnectMQ se encarga de la conectividad, la autenticación y el enrutamiento de todos los dispositivos, mientras que la Pi se ocupa del almacenamiento y la visualización de los datos que te interesa conservar. ConnectMQ no almacena historial de mensajes más allá de los mensajes retenidos, así que InfluxDB es el lugar adecuado para los datos a largo plazo.

Mantener el stack en buen estado

Problema Causa Solución
El log de Telegraf muestra not authorized Credenciales o client ID incorrectos Vuelve a copiar los tres datos del portal
No hay puntos en InfluxDB ni errores El filtro de topics no coincide Compara topics con un mosquitto_sub en vivo
Llegan puntos pero faltan campos Ruta json_v2 o tipo incorrectos Revisa los nombres de los campos y type
Paneles de Grafana lentos en rangos largos Sin agregación Añade aggregateWindow
Tarjeta SD corrupta al cabo de meses Escrituras constantes Mueve los datos de InfluxDB a un SSD
El disco se llena Retención demasiado larga influx bucket update --retention 30d

Haz copias de seguridad periódicas tanto de InfluxDB (influx backup /path/to/backup) como de /var/lib/grafana/grafana.db. Perder un dashboard que te costó una tarde ajustar es más molesto que perder una semana de datos de temperatura.

Empieza con ConnectMQ

Apunta tus sensores y Telegraf a un broker privado en minutos: regístrate en app.connectmq.com, elige el plan Serverless gratuito (sin tarjeta de crédito) y copia las credenciales generadas. Para el resto de la serie sobre la Pi, empieza por el tutorial de MQTT con Raspberry Pi, y si prefieres contenedores, consulta la guía de IOTstack en Raspberry Pi.

Preguntas frecuentes

¿Puede InfluxDB suscribirse a MQTT directamente?

No por sí solo en InfluxDB 2 OSS. La entrada mqtt_consumer de Telegraf es el puente estándar, y funciona sin problemas en la misma Pi con un consumo de memoria pequeño.

¿Funciona esto en Raspberry Pi OS de 32 bits?

InfluxDB 2 requiere un sistema operativo de 64 bits, así que usa la imagen arm64. Grafana y Telegraf tienen versiones de 32 bits, pero la base de datos es la pieza limitante.

¿Cuántos datos puede almacenar una Raspberry Pi en InfluxDB?

Depende de cuántas series haya y con qué frecuencia informen, además de tu disco. Unos pocos sensores cada diez segundos son una carga ligera; usa un SSD y una política de retención para que el crecimiento se mantenga acotado.

¿Puede Grafana leer MQTT sin InfluxDB?

Sí, con el plugin de fuente de datos MQTT puede mostrar valores en vivo, pero pierdes el historial y la agregación. Usa InfluxDB cuando necesites tendencias de días o meses.

Artículos relacionados

Fiabilidad de la Raspberry Pi: cómo usar una Pi 24/7 como gateway IoT

Una guía práctica para mantener un gateway MQTT con Raspberry Pi funcionando durante meses: desgaste del almacenamiento, sistemas de archivos de solo lectura, alimentación, refrigeración, watchdogs de hardware y software y monitorización remota de la salud.

9 min de lectura

Pico W vs Pico 2 W para MQTT: rendimiento, memoria y TLS de RP2040 frente a RP2350

La Pico 2 W mantiene el formato y el chip Wi-Fi de la Pico W, pero sustituye el RP2040 por el RP2350, más rápido. Esta comparativa analiza qué significa para los dispositivos MQTT: CPU, memoria, TLS, funciones de seguridad, soporte de software y qué placa comprar para cada proyecto.

9 min de lectura

Registro de accesos Raspberry Pi RFID MQTT con el lector RC522

Conecta un lector RFID RC522 a una Raspberry Pi, lee etiquetas en Python, compáralas con una lista blanca local y publica cada intento de acceso como un evento MQTT que pueden consumir registradores, dashboards y herramientas de alertas.

8 min de lectura

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.