INDUXA · Docs
Arquitectura

Arquitectura de aplicación

Las piezas de software de INDUXA y cómo se comunican.

QUIÉN ENTRAPersonasnavegador · app Agro CampoEquipos y gatewaysMQTT sobre TLS · 8883Sistemas y conectoresHTTPS · John DeerePCs con agente DeskMQTT + HTTPSCámarasRTSPS · video en vivoAuthentikinicio de sesiónINDUXA (K3S)Consola · Next.jsuna por productoEMQXbroker MQTTIngestaHTTPSTelemetría · Node.jsnormaliza · guarda · reglas · avisos · cálculosApache Kafkacrudo → lecturas → alertasMediaMTXvideoHub remotoWebSocketAPI · NestJSpermisos · bitácora · RLSDATOS Y SERVICIOSPostgreSQL 16TimescaleDB · PostGIS · RLSS3 / SeaweedFSfotos y archivos · URL firmadaCorreoAmazon SES / SMTPClaude (Anthropic)Chat IA y diagnósticoAPI públicalectura · webhooks salientesescritor
Dos caminos y una base común: las personas entran por la consola, que solo habla con la API; los equipos entran por EMQX o la ingesta hacia la telemetría.

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

PiezaTecnologíaQué hace
ConsolaNext.js 15Las pantallas de Inicio, Industrial, Agro, Desk y Administración. Los gráficos son ECharts
APINestJS (TypeScript)Empresas, usuarios, dispositivos, alertas, tableros, reportes… Permisos, bitácora y RLS
TelemetríaNode.jsUn solo programa con roles que se encienden por separado (ver abajo)
EMQXBroker MQTTRecibe a los equipos. No guarda contraseñas: le pregunta a la telemetría si cada equipo es válido
Apache KafkaMensajeríaGuarda unos días lo que llega y lo reparte entre los roles
PostgreSQL 16+ TimescaleDB y PostGISDatos del negocio, series de tiempo, mapas y geocercas
Amazon S3 / SeaweedFSArchivosFotos, capturas, reportes y modelos. Se suben y se ven con enlaces firmados
AuthentikIdentidadInicio de sesión de la consola (la app Agro Campo usa correo y código)
Hub remoto.NET, WebSocketAcceso remoto a las PCs de Desk
MediaMTXVideoVideo en vivo de las cámaras de los gateways
Traefik + CrowdSecEntradaHTTPS y bloqueo de IPs que atacan

Roles de la telemetría

RolQué hace
ingestaRecibe por HTTPS y valida las credenciales de los equipos para EMQX
puentePasa los mensajes MQTT de lecturas y posiciones a Kafka
normalizadorValida el mensaje, asigna cada clave a su tag, descarta duplicados
escritorGuarda las lecturas en la tabla del plan de conservación y el último valor
reglasEvalúa umbrales, rangos y «sin datos»; abre y cierra alertas
eventos y comandosGuarda los eventos del equipo; envía comandos y recibe sus confirmaciones
notificadorCorreo, webhooks y campana
cálculosDisponibilidad, predicciones (ONNX), reportes programados, exportaciones, John Deere

Cómo viaja una petición de la consola

  1. La persona inicia sesión en Authentik y la consola recibe su token.
  2. La consola llama a la API con ese token; la ruta lleva la empresa y el producto: /v1/e/{empresa}/{producto}/….
  3. La API valida el token, busca al usuario y sus membresías y revisa que su rol tenga el permiso de esa ruta.
  4. Abre la transacción con la empresa de la sesión: la base solo deja ver las filas de esa empresa.
  5. 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ó.

On this page