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.

196 lines
4.7 KiB
Markdown

# 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_ACQUIRE` para lecturas agrupadas.
- Helper C `EZO_COMMAND` para 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 `systemd` para 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.json`
- `data/EZOPH.json`
- `data/EZODO.json`
- `data/EZOEC.json`
Historicos:
- `logs/temperature.csv`
- `logs/ph.csv`
- `logs/do.csv`
- `logs/ec.csv`
Formato:
```csv
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:
```text
config/alarms.json
```
Estados:
- `NORMAL`
- `WARNING`
- `CRITICAL`
- `OFFLINE`
- `DISABLED`
Los eventos se guardan en:
```text
logs/alarms.csv
```
Los sensores deshabilitados no generan alarma ni riesgo global.
## Notificaciones
Configuracion:
```text
config/notifications.json
```
En produccion:
```text
/etc/photobioreactor/notifications.json
```
Canales:
- Webhook HTTP.
- Telegram Bot API.
El backend redacta secretos cuando envia configuracion al navegador.
## Seguridad
Implementado:
- `API_AUTH_TOKEN` para 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.1` detras 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.md`
- `docs/README.md`
- `docs/QUICK_START.md`
- `docs/RASPBERRY_PI_DEPLOYMENT.md`
- `docs/EZO_COMMANDS.md`
- `docs/TROUBLESHOOTING.md`
- `docs/STORAGE_ESTIMATE.md`
- `docs/TELEGRAM_BOT_SETUP.md`
- `ARCHITECTURE.md`