5.6 KiB
Photobioreactor Dashboard
Dashboard web para monitorear un fotobiorreactor con Raspberry Pi y circuitos Atlas Scientific EZO por I2C.
El sistema ya contempla:
- Lecturas en vivo de temperatura, pH, oxigeno disuelto y conductividad.
- Historial CSV por sensor.
- Graficas Chart.js.
- Alarmas configurables.
- Exportacion CSV y Excel.
- Consola de comandos EZO.
- Panel de calibracion.
- Notificaciones por webhook y Telegram.
- Despliegue permanente con
systemdy Nginx en Raspberry Pi.
Lectura Rapida
Si es la primera vez que usas el proyecto, sigue este orden:
Si ya conoces el sistema y necesitas detalle tecnico:
Sensores Esperados
| Variable | Circuito | Direccion I2C | Archivo JSON | CSV historico |
|---|---|---|---|---|
| Temperatura | EZO-RTD | 0x66 |
data/EZORTD.json |
logs/temperature.csv |
| pH | EZO-pH | 0x63 |
data/EZOPH.json |
logs/ph.csv |
| Oxigeno disuelto | EZO-DO | 0x61 |
data/EZODO.json |
logs/do.csv |
| Conductividad | EZO-EC | 0x64 |
data/EZOEC.json |
logs/ec.csv |
El proyecto puede operar con sensores parciales. Un sensor deshabilitado se
muestra como DESHABILITADO y no cuenta como alarma. Un sensor habilitado pero
no disponible se muestra como OFFLINE.
Arquitectura Corta
Sensores EZO I2C
|
| /dev/i2c-1
v
EZO_ACQUIRE / EZO_COMMAND
|
v
Recolector Node.js ---> data/*.json
| logs/*.csv
v
API Express <------ Dashboard web
^
|
Nginx
EZO_ACQUIRE toma lecturas agrupadas de los sensores habilitados.
EZO_COMMAND envia comandos individuales, incluyendo diagnostico y calibracion.
Ambos usan el mismo bloqueo:
/tmp/photobioreactor-i2c.lock
Ese bloqueo evita que una lectura automatica y un comando manual usen el bus I2C al mismo tiempo.
Prueba Sin Sensores
En una computadora de desarrollo:
npm ci
npm test
Modo demo en dos terminales:
EZO_MODE=demo npm run acquire
EZO_MODE=demo npm start
Abrir:
http://localhost:3000/frontend/index.html
En PowerShell:
$env:EZO_MODE = "demo"
npm run acquire
$env:EZO_MODE = "demo"
npm start
Raspberry Pi
Instalacion de produccion desde el repo clonado:
chmod +x scripts/install-raspberry-pi.sh
sudo ./scripts/install-raspberry-pi.sh
El instalador:
- Copia la aplicacion a
/opt/photobioreactor. - Instala dependencias.
- Compila
EZO_COMMANDyEZO_ACQUIRE. - Crea el usuario
photobioreactor. - Configura servicios
systemd. - Configura Nginx.
- Fuerza
EZO_MODE=hardwarepara produccion.
Servicios principales:
systemctl status photobioreactor-api --no-pager
systemctl status photobioreactor-acquisition --no-pager
systemctl status nginx --no-pager
Dashboard:
http://IP_DE_LA_RASPBERRY/frontend/index.html
Configuracion Operativa
Archivo principal de operacion:
/opt/photobioreactor/config/runtime.json
Ejemplo con tres sensores conectados:
{
"loggingRateSeconds": 5,
"historyRetentionDays": 30,
"enabledSensors": [
"temperature",
"ph",
"ec"
]
}
Ejemplo con los cuatro sensores:
{
"loggingRateSeconds": 5,
"historyRetentionDays": 30,
"enabledSensors": [
"temperature",
"ph",
"do",
"ec"
]
}
Despues de cambiar esta configuracion:
sudo systemctl restart photobioreactor-acquisition
Datos Guardados
Los JSON en data/ se sobrescriben; no crecen de forma indefinida.
Los CSV en logs/ si crecen hasta el limite definido por
historyRetentionDays.
Formato CSV:
timestamp,value
2026-07-07T17:26:13.459Z,25.132
En el peor caso operativo:
4 sensores
1 lectura por segundo
30 dias
el sistema guarda aproximadamente:
350 a 375 MB por mes
Ver el calculo completo en docs/STORAGE_ESTIMATE.md.
Exportaciones
Las graficas del dashboard muestran solo el dia actual para evitar saturacion visual. Las exportaciones CSV y Excel leen el historico disponible en los CSV. Por eso un Excel puede pesar mucho mas que lo que se ve en pantalla.
Seguridad
En produccion configure API_AUTH_TOKEN en:
/etc/default/photobioreactor
Ese token protege:
- Comandos EZO.
- Calibraciones.
- Cambios de configuracion.
- Borrado de historicos.
- Configuracion de notificaciones.
El dashboard guarda el token solo en el navegador local y lo envia como header:
X-API-Token
No exponga el dashboard directamente a Internet. Use una red local confiable o una VPN.
Documentacion
- Inicio rapido
- Indice de documentacion
- Despliegue en Raspberry Pi
- Comandos y calibracion EZO
- Diagnostico de problemas
- Calculo de almacenamiento
- Telegram
- Arquitectura
- Estado del proyecto
Nota Sobre Drivers Del Kernel
No se usa un driver personalizado del kernel. Linux ya expone el bus I2C como
/dev/i2c-1. Mantener el protocolo Atlas EZO en espacio de usuario simplifica
diagnostico, mantenimiento, calibracion y despliegue.