Volver al PortafolioAndroid Embebido & Cloud Telemetry
Cliente: Milodón VMCArquitectura Distribuida

Milodón VMC: App Android Embebida & Panel Web de Control

Ecosistema de software diseñado para sustituir entornos propietarios descontinuados en infraestructura de autoservicio (Vending). Integra un orquestador mecatrónico local en modo Kiosk y una plataforma web de telemetría en tiempo real.

Target SoCRockchip RK3288 (Android)
Capa Nativa / I/OJNI / UART / USB Host
POS GatewayTransbank PAX IM30
Web DashboardAstro 6 + React 19
Visión General del Sistema

Arquitectura de Dos Núcleos

Un diseño desacoplado que separa el control electromecánico y la cobranza en terreno respecto al monitoreo de inventario y la analítica de negocio.

Componente 01

Milodón VMC App (Android)

Interfaz gráfica de kiosco (Kiosk Mode) y orquestador mecatrónico que ejecuta en el SoC local. Gestiona el catálogo, el procesamiento de pagos transaccionales vía POS USB y la comunicación serie nativa con la placa de expansión.

  • Kiosk Mode Inmersivo Estricto
  • Puente NDK/JNI UART (/dev/ttyS3)
  • Integración Transbank USB Host API
  • Autocorrección RTC vía NTP + Root Shell
Componente 02

Milodón Web Dashboard

Plataforma web responsiva en tiempo real para la gestión centralizada del parque de máquinas. Permite el control de inventario por coordenadas de matriz, monitoreo financiero, auditoría y despacho de comandos remotos.

  • Matriz interactiva de espirales (Vending Layout)
  • Métricas y analítica con Chart.js
  • Consola de Comandos Remotos (Firestore)
  • Autenticación y Session Tokens
// Subsistema Embebido

Milodón VMC App: Módulos NDK, I/O y Resiliencia

Interfaz & Kiosk Mode

Inmersión estricta (SYSTEM_UI_FLAG_IMMERSIVE_STICKY) con bloqueo de suspensión. Incluye módulo de guardapantallas (ScreensaverActivity) con descarga y reproducción dinámicas de video promocional, y menú técnico oculto activable mediante patrón táctil de seguridad (5 toques en < 1000 ms).

Puente Serie JNI / NDK

Comunicación a nivel de kernel (/dev/ttyS3 @ 19200 bps) mediante android_serialport_api. Orquesta una máquina de estados con control de concurrencia (AtomicBoolean) que ejecuta un latido (heartbeat) de 800 ms y pausa de forma atómica para inyectar secuencias de giro electromecánico.

Pasarela POS USB Host

Integración mediante la API android.hardware.usb (CDC-ACM) directamente con el terminal Transbank PAX IM30. Permite la cobranza con tarjetas de débito, crédito y contactless evitando la intermediación inestable del bus MDB tradicional.

Sincronización RTC (Root Shell)

Debido a la ausencia de batería RTC en el SoC RK3288, el servicio MilodonApp consulta la hora exacta vía protocolo NTP al arrancar y ejecuta comandos con privilegios Root (su -> date) para corregir el reloj del SO, evitando el rechazo de certificados SSL/TLS en Firebase/Supabase.

// Plataforma de Mando

Milodón Web Dashboard: Matriz & Telemetría

Métricas & Heartbeat

Cálculo dinámico de ingresos, volumen transaccional, ranking de productos y detección automática de stock crítico (≤ 3 unidades). Monitorea el estado de conectividad de cada máquina midiendo el intervalo del último latido reportado (≤ 15 min).

Matriz de Espirales (Layout)

Mapeo gráfico e interactivo de la grilla física de motores (Filas 1-2: 6 motores; Filas 3-6: 9 motores). Codificación cromática de estado (Gris, Verde, Amarillo, Rojo) con editor modal para actualización de precios CLP, stock e imágenes en Firebase Storage.

Consola de Comandos Remotos

Módulo de despacho de instrucciones a la colección remote_commands de Firestore. Permite ordenar giros de prueba de motores, reinicios de la aplicación y lectura de logs de diagnóstico procesados asíncronamente por el RemoteCommandManager móvil.

Seguridad & Autenticación

Protección de rutas de administración mediante Firebase Auth y verificación de tokens de sesión mediante middlewares y cookies (session_token) en renderizado híbrido Server-Side de Astro.

// Ingeniería de Soluciones

Desafíos Técnicos Resueltos

Desafío TécnicoCausa RaízSolución Implementada
Pérdida de hora en SOAusencia de batería RTC en SoC RK3288. Al apagar, la fecha volvía a 2013, bloqueando handshakes SSL/TLS.Servicio en MilodonApp que consulta tiempo vía NTP y ejecuta su -> date antes de instanciar clientes cloud.
Incompatibilidad MDB CashlessFallas de identificación NAMA MDB Level 3 entre la placa base Wuyi y lectores MDB externos.Rediseño de arquitectura: integración directa del POS PAX IM30 mediante USB Host API hacia Android.
Colisiones en Bus UARTEnvío de comandos de giro durante la emisión del pulso de latido (POLL) de la placa base.Hilo de control de concurrencia con barreras atómicas (AtomicBoolean) para pausas síncronas del POLL.
Ingeniería Inversa de ProtocoloCódigo y protocolo cerrado en la aplicación de fábrica previa (Ventor).Extracción de APK, descompilación Smali/Java y análisis de logs para aislar la estructura de tramas ASCII (NOAD...).

// Ficha_Del_Stack_Tecnologico.json

// Aplicación Móvil (Android Embedded)
  • • Lenguaje: Kotlin
  • • Framework: Android SDK (API 22+)
  • • Capas Nativas: JNI / NDK (android_serialport_api), USB Host API
  • • Base de Datos & Cloud: Firebase Firestore Realtime, Supabase Client SDK
  • • CLI / SO: Linux Shell (su), Protocolo NTP
// Panel Web (Admin Dashboard)
  • • Framework: Astro 6.x, React 19.x
  • • Estilos & UI: Tailwind CSS 4.x
  • • Backend & BaaS: Firebase Auth, Firebase Firestore, Firebase Storage
  • • Visualización de Datos: Chart.js
  • • Despliegue: Vercel / Node.js SSR runtime