Arquitectura
Arquitectura de aplicación
Las piezas de software de INDUXA y cómo se comunican.
Hay dos caminos hacia la plataforma y una base común:
- Las personas entran por la consola (Next.js) o la app Agro Campo. La consola habla solo con la API (NestJS), que revisa los permisos del rol, anota los cambios en la bitácora y limita cada consulta a la empresa de la sesión (RLS).
- Los equipos entran por EMQX (MQTT sobre TLS) o por la ingesta HTTPS. La telemetría (Node.js) recibe los mensajes, los pasa por Kafka, los normaliza, los guarda y evalúa las reglas.
Piezas
| Pieza | Tecnología | Qué hace |
|---|---|---|
| Consola | Next.js 15 | Las pantallas de Inicio, Industrial, Agro, Desk y Administración. Los gráficos son ECharts |
| API | NestJS (TypeScript) | Empresas, usuarios, dispositivos, alertas, tableros, reportes… Permisos, bitácora y RLS |
| Telemetría | Node.js | Un solo programa con roles que se encienden por separado (ver abajo) |
| EMQX | Broker MQTT | Recibe a los equipos. No guarda contraseñas: le pregunta a la telemetría si cada equipo es válido |
| Apache Kafka | Mensajería | Guarda unos días lo que llega y lo reparte entre los roles |
| PostgreSQL 16 | + TimescaleDB y PostGIS | Datos del negocio, series de tiempo, mapas y geocercas |
| Amazon S3 / SeaweedFS | Archivos | Fotos, capturas, reportes y modelos. Se suben y se ven con enlaces firmados |
| Authentik | Identidad | Inicio de sesión de la consola (la app Agro Campo usa correo y código) |
| Hub remoto | .NET, WebSocket | Acceso remoto a las PCs de Desk |
| MediaMTX | Video | Video en vivo de las cámaras de los gateways |
| Traefik + CrowdSec | Entrada | HTTPS y bloqueo de IPs que atacan |
Roles de la telemetría
| Rol | Qué hace |
|---|---|
| ingesta | Recibe por HTTPS y valida las credenciales de los equipos para EMQX |
| puente | Pasa los mensajes MQTT de lecturas y posiciones a Kafka |
| normalizador | Valida el mensaje, asigna cada clave a su tag, descarta duplicados |
| escritor | Guarda las lecturas en la tabla del plan de conservación y el último valor |
| reglas | Evalúa umbrales, rangos y «sin datos»; abre y cierra alertas |
| eventos y comandos | Guarda los eventos del equipo; envía comandos y recibe sus confirmaciones |
| notificador | Correo, webhooks y campana |
| cálculos | Disponibilidad, predicciones (ONNX), reportes programados, exportaciones, John Deere |
Cómo viaja una petición de la consola
- La persona inicia sesión en Authentik y la consola recibe su token.
- La consola llama a la API con ese token; la ruta lleva la empresa y el producto:
/v1/e/{empresa}/{producto}/…. - La API valida el token, busca al usuario y sus membresías y revisa que su rol tenga el permiso de esa ruta.
- Abre la transacción con la empresa de la sesión: la base solo deja ver las filas de esa empresa.
- Si la ruta cambia algo, lo anota en la bitácora (quién, qué, antes y después) en la misma transacción.
Archivos
Las fotos, capturas y reportes no pasan por la API: la API entrega un enlace firmado (de 15 minutos a 12 horas), el equipo o el navegador sube o descarga directo del almacén, y luego la API confirma que el archivo llegó.