4.7 KiB
Estado del Proyecto
Resumen
El proyecto implementa un dashboard web para monitoreo de fotobiorreactor con
Raspberry Pi y circuitos Atlas Scientific EZO. La aplicacion puede trabajar en
modo demo para desarrollo sin hardware y en modo hardware usando /dev/i2c-1.
Estado Actual
Implementado:
- Dashboard responsive.
- Lecturas en vivo desde
data/*.json. - Adquisicion automatica con
api/acquisition.js. - Helper C
EZO_ACQUIREpara lecturas agrupadas. - Helper C
EZO_COMMANDpara comandos y calibracion. - Historial CSV por sensor.
- Graficas con Chart.js.
- Exportacion CSV y Excel con SheetJS.
- Alarmas configurables.
- Bitacora de alarmas en
logs/alarms.csv. - Notificaciones por webhook y Telegram.
- Configuracion de sensores habilitados.
- Retencion historica configurable.
- Servicios
systemdpara API y adquisicion. - Configuracion Nginx.
- Instalador para Raspberry Pi.
Componentes Principales
| Componente | Responsabilidad |
|---|---|
frontend/ |
Dashboard, graficas, controles, exportaciones y consola EZO |
api/server.js |
API HTTP, configuracion, historicos, comandos y seguridad |
api/acquisition.js |
Proceso continuo de adquisicion |
api/acquisition-service.js |
Lectura, escritura atomica, alarmas y retencion |
api/notification-service.js |
Webhook y Telegram |
sensors/EZOCommand/EZO_ACQUIRE |
Lectura agrupada de sensores EZO |
sensors/EZOCommand/EZO_COMMAND |
Comandos individuales EZO |
config/*.json |
Configuracion operativa |
deployment/ |
Servicios systemd, Nginx y variables de entorno |
scripts/install-raspberry-pi.sh |
Instalacion automatizada en Raspberry Pi |
Sensores
| Sensor | Direccion esperada | Estado en software |
|---|---|---|
| EZO-RTD | 0x66 |
Implementado |
| EZO-pH | 0x63 |
Implementado |
| EZO-DO | 0x61 |
Implementado |
| EZO-EC | 0x64 |
Implementado |
El sistema tambien puede detectar otros EZO en el bus, por ejemplo ORP, pero el dashboard actual solo modela RTD, pH, DO y EC.
Modos De Operacion
| Modo | Uso |
|---|---|
EZO_MODE=demo |
Desarrollo sin Raspberry ni sensores |
EZO_MODE=auto |
Usa hardware si esta disponible; si no, demo |
EZO_MODE=hardware |
Produccion estricta; no simula datos |
En Raspberry Pi de produccion se usa EZO_MODE=hardware.
Datos
Lecturas actuales:
data/EZORTD.jsondata/EZOPH.jsondata/EZODO.jsondata/EZOEC.json
Historicos:
logs/temperature.csvlogs/ph.csvlogs/do.csvlogs/ec.csv
Formato:
timestamp,value
2026-07-07T17:26:13.459Z,25.132
Las graficas muestran el dia actual. Los CSV conservan el periodo configurado
por historyRetentionDays.
Alarmas
Los umbrales viven en:
config/alarms.json
Estados:
NORMALWARNINGCRITICALOFFLINEDISABLED
Los eventos se guardan en:
logs/alarms.csv
Los sensores deshabilitados no generan alarma ni riesgo global.
Notificaciones
Configuracion:
config/notifications.json
En produccion:
/etc/photobioreactor/notifications.json
Canales:
- Webhook HTTP.
- Telegram Bot API.
El backend redacta secretos cuando envia configuracion al navegador.
Seguridad
Implementado:
API_AUTH_TOKENpara endpoints criticos.- Header
X-API-Token. - Comparacion de token en tiempo constante.
- Rate limit para acciones criticas.
- Headers HTTP defensivos basicos.
- API escuchando en
127.0.0.1detras de Nginx.
Pendiente si se expone fuera de LAN:
- HTTPS.
- Autenticacion de usuario completa.
- Politica de acceso por VPN o red privada.
Validacion
Validado en desarrollo:
- Pruebas automatizadas Node.
- Modo demo.
- Dashboard por HTTP local.
- Chart.js y SheetJS locales.
- Comandos EZO simulados.
- Configuracion de alarmas y notificaciones.
Validacion en Raspberry:
- I2C mediante
/dev/i2c-1. - Servicios
systemd. - Lecturas reales parciales cuando los sensores estan conectados.
La calibracion metrologica y la estabilidad final deben verificarse siempre con sondas reales, soluciones de referencia y operacion continua.
Trabajo Pendiente Recomendado
- Prueba continua de 8 a 24 horas en Raspberry.
- Validacion con los cuatro sensores conectados.
- Calibracion real documentada con fecha y soluciones usadas.
- Confirmar notificaciones Telegram en la red final.
- Evaluar integracion futura de ORP si se decide usar ese sensor.
- Mejorar exportaciones para seleccionar rango: dia actual, ultimas 24 horas o todo el historico.
Documentos Relacionados
README.mddocs/README.mddocs/QUICK_START.mddocs/RASPBERRY_PI_DEPLOYMENT.mddocs/EZO_COMMANDS.mddocs/TROUBLESHOOTING.mddocs/STORAGE_ESTIMATE.mddocs/TELEGRAM_BOT_SETUP.mdARCHITECTURE.md