Embedded data acquisition system (DAQ) for real-time monitoring of temperature, pH, DO, and EC in photobioreactors using Raspberry Pi and Atlas Scientific EZO modules via galvano-isolated I2C.
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
EMOTIONS-HUNTER 10c53dd8b8 Reorganizar documentacion operativa 2 weeks ago
api Agregar interfaz de notificaciones 4 weeks ago
config Agregar notificaciones y limite de acciones criticas 4 weeks ago
data Enfoque más profecional uso de codex y cambio a gémini 1 month ago
deployment Agregar notificaciones y limite de acciones criticas 4 weeks ago
docs Reorganizar documentacion operativa 2 weeks ago
frontend Limitar graficas historicas al dia actual 4 weeks ago
images Primer commit: Estructura base del proyecto Implementación de un Sistema de Monitoreo de Temperatura Basado en Raspberry Pi, Sensor EZO™ RTD y Sonda PT1000 Completada 2 months ago
logs Enfoque más profecional uso de codex y cambio a gémini 1 month ago
node_modules Estructura final del dashboard, archivos markdown de documentacion y prompt de fases 1 month ago
scripts Agregar notificaciones y limite de acciones criticas 4 weeks ago
sensors Permitir adquisicion parcial de sensores EZO 1 month ago
test Limitar graficas historicas al dia actual 4 weeks ago
.gitignore Integrar adquisición y despliegue en Raspberry Pi 1 month ago
ARCHITECTURE.md Reorganizar documentacion operativa 2 weeks ago
PROJECT_STATUS.md Reorganizar documentacion operativa 2 weeks ago
README.md Reorganizar documentacion operativa 2 weeks ago
package-lock.json Integrar adquisición y despliegue en Raspberry Pi 1 month ago
package.json Integrar adquisición y despliegue en Raspberry Pi 1 month ago

README.md

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 systemd y Nginx en Raspberry Pi.

Lectura Rapida

Si es la primera vez que usas el proyecto, sigue este orden:

  1. Inicio rapido
  2. Despliegue en Raspberry Pi
  3. Comandos y calibracion EZO
  4. Diagnostico de problemas

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_COMMAND y EZO_ACQUIRE.
  • Crea el usuario photobioreactor.
  • Configura servicios systemd.
  • Configura Nginx.
  • Fuerza EZO_MODE=hardware para 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

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.