Grafana

Grafana es una herramienta de código abierto popular para la visualización de datos analíticos. En la siguiente sección mostraremos cómo usarla para visualizar datos de temperatura y humedad de un ESP32.

Integración con ESP32 (mediante HTTP y SQLite)

Utilizaremos el programa de servidor HTTP para ESP32 (DHT11) que se explicó en la página Home Assistant.

Crea el siguiente script en Elixir (por ejemplo, grafana.exs). Este script se conectará periódicamente al servidor HTTP del ESP32, extraerá las lecturas de temperatura y humedad, y las almacenará en una base de datos SQLite (main.db).

Mix.install([:req, :exqlite])

defmodule Grafana do
  def loop(conn) do
    case Req.get!("http://192.168.1.10:8080/temp") do
      %{body: %{"humidity" => humidity_string, "temperature" => temperature_string}} ->
        {humidity, _} = Float.parse(humidity_string)
        {temperature, _} = Float.parse(temperature_string)

        {:ok, statement} =
          Exqlite.Sqlite3.prepare(
            conn,
            "insert into readings (humidity, temperature, time) values (?1, ?2, ?3)"
          )

        :ok = Exqlite.Sqlite3.bind(statement, [humidity, temperature, System.os_time(:second)])
        :done = Exqlite.Sqlite3.step(conn, statement)

        IO.inspect(humidity, label: "humidity")
        IO.inspect(temperature, label: "temperature")

      _ ->
        nil
    end

    Process.sleep(5000)
    Grafana.loop(conn)
  end
end

{:ok, conn} = Exqlite.Sqlite3.open("file:main.db")

:ok =
  Exqlite.Sqlite3.execute(
    conn,
    "create table if not exists readings (id integer primary key, humidity real, temperature real, time integer)"
  )

Grafana.loop(conn)

Reemplaza "192.168.1.10" en el código del ESP32 con la dirección IP real del ESP32.

Desde la terminal, en el directorio donde guardaste grafana.exs, corre el script con elixir grafana.exs. Este comando iniciará el proceso de recolección y almacenamiento de datos en main.db.

Luego, sigue estos pasos para visualizar los datos en Grafana:

  1. Instala el plugin de SQLite: En SearchPlugins, busca e instala el plugin SQLite.

  2. Crea una nueva fuente de datos (Data Source): En Grafana, ve a ConnectionsData Sources y añade una nueva fuente de datos de tipo SQLite.

  3. Configura la ruta del archivo: Especifica la ruta completa al archivo main.db que el script Elixir está creando (por ejemplo, /home/user/grafana/main.db).

  4. Crea un Dashboard y Panel:

    • Crea un nuevo dashboard y añade un panel de visualización.

    • En la configuración del panel, selecciona tu fuente de datos SQLite recién creada.

    • Utiliza la siguiente consulta SQL para obtener la temperatura y humedad a lo largo del tiempo:

SELECT
  time,
  temperature AS "Temperature",
  humidity AS "Humidity"
FROM readings
ORDER BY time
Ejemplo de Dashboard de Grafana con datos del DHT11
Figure 1. Ejemplo de Dashboard

Grafana + Home Assistant

Se detallará cómo integrar Grafana con Home Assistant para crear dashboards de visualización en tiempo real de tus sensores y métricas domóticas. Utilizaremos la configuración de Home Assistant explicada en Home Assistant.

Requisitos Previos

Antes de comenzar, asegúrate de tener instalados y funcionando:

  • Un servidor Home Assistant.

  • Una instancia de Prometheus para recolectar las métricas de Home Assistant.

  • Una instancia de Grafana para visualizar los datos recolectados por Prometheus.

Tanto Prometheus como Grafana pueden instalarse fácilmente usando Docker para simplificar la configuración.

Autenticación en Home Assistant (Long-Lived Access Token)

Para permitir que Prometheus acceda de forma segura a las métricas de Home Assistant, es necesario generar un "Token de Acceso de Larga Duración" (Long-Lived Access Token).

  1. Pasos para generar el token:

    1. En la interfaz de usuario de Home Assistant, haz clic en tu perfil de usuario (en la esquina inferior izquierda).

    2. Navega a la sección Security.

    3. Busca Long-Lived Access Tokens y haz clic en Create token.

    4. Se generará una cadena de caracteres. Cópiala y guárdala, ya que solo se mostrará una vez y la necesitarás para la configuración de Prometheus.

Habilitar la Exposición de Métricas en Home Assistant

Para que Home Assistant exponga sus métricas en un formato compatible con Prometheus, debes habilitar la integración de Prometheus.

Abre el archivo configuration.yaml de tu instalación de Home Assistant (por ejemplo, ~/services/home-assistant:/config) y añade la siguiente línea en el nivel raíz del archivo:

prometheus:

Después de guardar los cambios en configuration.yaml, reinicia tu instancia de Home Assistant. Esto cargará la nueva configuración y habilitará el endpoint /api/prometheus.

Configuración de Prometheus para Recolectar Métricas

Ahora configuraremos Prometheus para que recolecte regularmente las métricas expuestas por Home Assistant.

Abre el archivo de configuración de Prometheus (prometheus.yml) y añade el siguiente bloque scrape_config a la sección scrape_configs:

- job_name: "hass"
  scrape_interval: 60s
  metrics_path: /api/prometheus

  authorization:
    credentials: "your.longlived.token"

  scheme: http
  static_configs:
    - targets: ['localhost:8123']
  • Puntos importantes de la configuración de Prometheus:

    • job_name: "hass": Un nombre para identificar este trabajo de recolección.

    • scrape_interval: 60s: Prometheus recolectará las métricas cada 60 segundos.

    • metrics_path: /api/prometheus: La ruta del endpoint donde Home Assistant expone las métricas.

    • authorization: Utiliza el Long-Lived Access Token que generaste.

    • scheme: http: Es crucial usar http a menos que hayas configurado explícitamente HTTPS en tu instancia de Home Assistant.

    • targets: ['localhost:8123']:

    • Si Prometheus y Home Assistant se ejecutan en la misma máquina y Home Assistant usa --network=host, localhost:8123 es correcto.

    • Si Prometheus es un contenedor en su propia red Docker, o en un computador diferente, deberás usar la dirección IP real de tu Home Assistant.

Luego, guarda los cambios en prometheus.yml y reinicia tu instancia de Prometheus para que cargue la nueva configuración.

Configuración de Grafana para Visualización

Finalmente, configuraremos Grafana para que utilice Prometheus como fuente de datos y cree un dashboard.

  1. Añade Prometheus como fuente de datos en Grafana:

    1. En la interfaz de usuario de Grafana, ve a ConnectionsData Sources.

    2. Haz clic en Add new data source y busca Prometheus.

    3. En la configuración de la fuente de datos, en el campo URL, introduce la dirección de tu servidor Prometheus (por ejemplo, http://localhost:9090 si se ejecuta localmente en el puerto predeterminado).

    4. Guarda y prueba la conexión.

  2. Crea un Dashboard en Grafana:

    1. Ve a Dashboards y crea un New Dashboard.

    2. Añade un New Panel.

    3. En la sección de consulta (Query), selecciona tu fuente de datos Prometheus.

    4. Utiliza las siguientes consultas para visualizar la temperatura y la humedad:

      • Para temperatura: hass_sensor_temperature_celsius

      • Para humedad: hass_sensor_humidity_percent