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 |
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:
-
Instala el plugin de SQLite: En
Search→Plugins, busca e instala el pluginSQLite. -
Crea una nueva fuente de datos (Data Source): En Grafana, ve a
Connections→Data Sourcesy añade una nueva fuente de datos de tipoSQLite. -
Configura la ruta del archivo: Especifica la ruta completa al archivo
main.dbque el script Elixir está creando (por ejemplo,/home/user/grafana/main.db). -
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
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).
-
Pasos para generar el token:
-
En la interfaz de usuario de Home Assistant, haz clic en tu perfil de usuario (en la esquina inferior izquierda).
-
Navega a la sección
Security. -
Busca
Long-Lived Access Tokensy haz clic enCreate token. -
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 elLong-Lived Access Tokenque generaste. -
scheme: http: Es crucial usarhttpa 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:8123es 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.
-
Añade Prometheus como fuente de datos en Grafana:
-
En la interfaz de usuario de Grafana, ve a
Connections→Data Sources. -
Haz clic en
Add new data sourcey buscaPrometheus. -
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:9090si se ejecuta localmente en el puerto predeterminado). -
Guarda y prueba la conexión.
-
-
Crea un Dashboard en Grafana:
-
Ve a
Dashboardsy crea unNew Dashboard. -
Añade un
New Panel. -
En la sección de consulta (Query), selecciona tu fuente de datos Prometheus.
-
Utiliza las siguientes consultas para visualizar la temperatura y la humedad:
-
Para temperatura:
hass_sensor_temperature_celsius -
Para humedad:
hass_sensor_humidity_percent
-
-