# Photobioreactor Dashboard Sistema de monitoreo para Raspberry Pi y circuitos Atlas Scientific EZO: | Variable | Circuito | Dirección | Unidad | |---|---|---|---| | Temperatura | EZO-RTD | `0x66` | °C | | pH | EZO-pH | `0x63` | pH | | Oxígeno disuelto | EZO-DO | `0x61` | mg/L | | Conductividad | EZO-EC | `0x64` | µS/cm | El sistema incluye dashboard responsive, históricos Chart.js, alarmas, exportación CSV/Excel, consola de comandos y panel de calibración. ## Arquitectura ```text EZO por I2C | EZO_ACQUIRE / EZO_COMMAND | Recolector Node ---------> data/*.json | logs/*.csv | API Express <------------ Dashboard ^ | Nginx ``` `EZO_ACQUIRE` obtiene las cuatro lecturas en un ciclo agrupado. `EZO_COMMAND` ejecuta comandos interactivos y calibraciones. Ambos comparten el bloqueo `/tmp/photobioreactor-i2c.lock`. ## Desarrollo sin sensores ```bash npm ci npm test ``` Ejecute en dos terminales: ```bash EZO_MODE=demo npm run acquire EZO_MODE=demo npm start ``` Abra `http://localhost:3000/frontend/index.html`. En PowerShell: ```powershell $env:EZO_MODE = "demo" npm run acquire ``` Y en una segunda terminal: ```powershell $env:EZO_MODE = "demo" npm start ``` ## Raspberry Pi El despliegue de producción usa `EZO_MODE=hardware`, systemd y Nginx: ```bash chmod +x scripts/install-raspberry-pi.sh sudo ./scripts/install-raspberry-pi.sh ``` La guía de preparación, detección I2C, calibración y prueba integral está en [`docs/RASPBERRY_PI_DEPLOYMENT.md`](docs/RASPBERRY_PI_DEPLOYMENT.md). ## Sensores conectados parcialmente Para pruebas con solo EZO-RTD conectado, limite la adquisicion al sensor de temperatura desde el panel de configuracion o en `config/runtime.json`: ```json { "loggingRateSeconds": 1, "enabledSensors": ["temperature"] } ``` Tambien puede forzarlo temporalmente por entorno: ```bash EZO_MODE=hardware EZO_ENABLED_SENSORS=temperature npm run acquire ``` En produccion puede dejar `EZO_ENABLED_SENSORS=temperature` en `/etc/default/photobioreactor` como override. Cuando esten conectados los cuatro circuitos, deje la variable vacia y habilite RTD, pH, DO y EC desde el panel. ## Archivos de datos - Lecturas actuales: `data/EZORTD.json`, `EZOPH.json`, `EZODO.json`, `EZOEC.json`. - Históricos: `logs/temperature.csv`, `ph.csv`, `do.csv`, `ec.csv`. - Umbrales: `config/alarms.json`. - Frecuencia de adquisición: `config/runtime.json`. Los CSV usan una única nomenclatura y el formato: ```csv timestamp,value 2026-06-22T12:00:00.000Z,25.123 ``` ## Documentación - Estado actual: [`PROJECT_STATUS.md`](PROJECT_STATUS.md) - Comandos y calibración: [`docs/EZO_COMMANDS.md`](docs/EZO_COMMANDS.md) - Despliegue: [`docs/RASPBERRY_PI_DEPLOYMENT.md`](docs/RASPBERRY_PI_DEPLOYMENT.md) - Diseño extendido: [`ARCHITECTURE.md`](ARCHITECTURE.md) No se utiliza un driver personalizado del kernel. Linux ya proporciona la capa I2C mediante `/dev/i2c-1`; el protocolo ASCII, la adquisición y la calibración se mantienen en espacio de usuario para facilitar mantenimiento y diagnóstico.