Manual del Global Hub
Concentrador GPS que recibe datos de unidades vehiculares desde Protrack, TrackSolid y Wialon, y los retransmite a entidades regulatorias peruanas (SUTRAN, OSINERGMIN, UNIGIS, MAERSK, SIPCOP) según obligaciones legales/contractuales.
◆ ¿Qué es Global Hub?
Middleware de retransmisión GPS. Toma los datos de tus unidades desde la plataforma del proveedor (Protrack/TrackSolid/Wialon), los transforma al formato que cada entidad peruana exige, y los envía en tiempo real.
Valor operativo
- ✅ Un solo lugar para cumplir con SUTRAN, OSINERGMIN y otras entidades — no necesitas integrar cada una por separado.
- ✅ Normalización automática — placa peruana con guión para OSINERGMIN, coordenadas ajustadas a SUTRAN, formato JSON por entidad.
- ✅ Colectores 24/7 — los 3 colectores (Protrack, TrackSolid, Wialon) toman posiciones constantemente y los 4+ transmitters reenvían.
- ✅ Auditoría + consent log — trazabilidad completa para cumplimiento de Ley 29733.
- ✅ Backup diario cifrado — GPG AES-256 + copia off-site al servidor del CRM.
🏗 Arquitectura
Tres capas: colectores → BD SQLite → transmitters. Cada uno es un servicio systemd independiente.
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ PROTRACK │ │ TRACKSOLID │ │ WIALON │
│ (colector) │ │ (colector) │ │ (colector) │
└───────┬────────┘ └───────┬────────┘ └───────┬────────┘
│ │ │
└─────────────────────┼─────────────────────┘
▼
┌──────────────────────────┐
│ SQLite + FastAPI │
│ devices + tx_logs │
└─────┬────────────────────┘
│
┌──────────┬──────┴─────┬─────────┬──────────┐
▼ ▼ ▼ ▼ ▼
SUTRAN OSINERGMIN UNIGIS MAERSK SIPCOP
(transm) (transm) (transm) (transm) (pendiente)
Servicios activos
| Servicio systemd | Rol |
|---|---|
globalhub.service | API FastAPI + web (puerto 8000) |
globalhub-protrack.service | Colector Protrack (polling API) |
globalhub-tracksolid.service | Colector TrackSolid (polling API, token cached 2h) |
globalhub-wialon.service | Colector Wialon (AVL events) |
globalhub-sutran.service | Transmitter SUTRAN |
globalhub-osinergmin.service | Transmitter OSINERGMIN |
globalhub-unigis.service | Transmitter UNIGIS |
globalhub-maersk.service | Transmitter MAERSK |
globalhub-notifier.service | Monitor de alertas email |
🔑 Ingresar al panel
El Hub requiere autenticación — no hay acceso público. Los usuarios los crea el admin.
- URL oficial:
https://apirest.globalgpsperu.com - Alternativa en Piura (WiFi bloquea 443):
http://apirest.globalgpsperu.com:8080— redirige a HTTPS - Ingresa usuario y contraseña
- Al primer login se pide verificar email si aún no se ha hecho
📊 Dashboard
Vista principal del estado de la flota.
Tarjetas principales
| Tarjeta | Qué muestra |
|---|---|
| Total unidades | Devices registrados (active=1) |
| Transmitiendo | Unidades con al menos 1 destino encendido |
| Con ignición ON | Unidades en movimiento (ignition=1 última trama) |
| Entidades activas | Cuántas entidades distintas (0–5) están recibiendo datos. NO es suma por unidad. El subtítulo lista los nombres concretos (ej: "OSINERGMIN · SUTRAN"). |
Tabla de flota
Lista por unidad con: placa, proveedor (Protrack/TrackSolid/Wialon), coordenadas, velocidad, ignición, destinos activos, última actualización. Filtro por placa arriba.
🚚 Unidades
CRUD de devices. Normalmente se crean automáticamente vía auto-activate desde el CRM, pero también se pueden crear a mano.
Crear unidad manualmente
- Menú → Unidades → + Nueva unidad
- IMEI (15 dígitos del chip GSM)
- Placa con guión (formato peruano
XXX-999) - Proveedor: Protrack / TrackSolid / Wialon
- Nombre de la empresa del cliente (va en el campo
transport_vendor) - Notas opcionales (contacto, observaciones)
- Guardar → queda
active=1, sin destinos activos aún
Editar unidad
Tabla → clic en icono lápiz. Puedes cambiar placa, proveedor, notas, estado activo/inactivo.
Eliminar
DELETE /api/devices/{imei} borra físicamente la unidad y sus logs asociados. No es soft-delete. Pensarlo bien antes de ejecutar. Si solo quieres que no transmita, usa active=0.📡 Transmisiones
Control de a qué entidades retransmite cada unidad.
Activar transmisión (manual)
- Menú → Unidades → seleccionar unidad
- Panel Destinos — 5 toggles (SUTRAN, OSINERGMIN, UNIGIS, MAERSK, SIPCOP)
- Para SUTRAN: ingresa
speed_limit(10-200 km/h). Este valor se aplica realmente — si speed_limit=60, SUTRAN verá máximo 60 km/h aunque el GPS reporte 90. - Para OSINERGMIN: asegúrate que la placa tenga guión (el Hub normaliza automáticamente si viene sin guión).
- Guardar → la próxima iteración del transmitter respectivo (cada 15 seg) envía la trama a la entidad.
Desactivar transmisión
Mismo flujo, toggle a OFF. La trama deja de enviarse inmediatamente.
Auto-activate (desde CRM)
Normalmente NO tocas esto manualmente. Al guardar un cliente con filtros regulatorios en el CRM, este hace POST /api/transmission/auto-activate con IMEI + provider + destino + speed_limit, y el Hub:
- Verifica que la unidad exista en la plataforma del proveedor
- Si no existe, la registra (device_created=true)
- Para OSINERGMIN: normaliza la placa al formato peruano con guión
- Activa la transmisión
- Retorna al CRM:
imei,plate,device_created,transmitting=true
🔍 Búsqueda externa (antes de registrar)
Verifica que una unidad exista en la plataforma del proveedor antes de registrarla.
| Plataforma | Endpoint | Criterio |
|---|---|---|
| Protrack | GET /api/search/protrack/{imei} | Por IMEI |
| TrackSolid | GET /api/search/tracksolid/{imei} | Por IMEI (busca en cuentas hijas) |
| Wialon | GET /api/search/wialon/{placa} | Por placa (búsqueda parcial) |
| Wialon | GET /api/search/wialon_id/{id} | Por sys_id |
🚛 SUTRAN
Superintendencia de Transporte Terrestre. Fiscaliza buses interprovinciales, carga pesada y transporte escolar.
SUTRAN_ENDPOINT del .env⛽ OSINERGMIN
Organismo Supervisor de la Inversión en Energía y Minería. Fiscaliza transporte de hidrocarburos (combustibles).
OSIN_URL del .envtokenTrama) del .envT7K592 → T7K-592). Si tu placa es de formato raro, revisa el log del transmitter.⛏ UNIGIS
Monitoreo de minería y seguridad. Envío de posiciones + eventos de seguridad.
UNIGIS_URL del .env⚓ MAERSK
Naviera. Retransmisión a su plataforma de visibilidad logística para contenedores en ruta.
MAERSK_ENDPOINT del .envMAERSK_TOKEN del .env📦 SIPCOP
Sistema de transporte de productos controlados.
sipcop_on=1), no hay transmitter implementado todavía. Prioridad baja hasta que la entidad habilite la integración.📝 Logs de transmisión
Cada trama enviada a una entidad queda registrada con status HTTP y respuesta del destino.
Consultar
- Menú → Logs
- Filtros: por IMEI, por entidad, por status (200 / error)
- Vista muestra payload enviado + respuesta recibida + timestamp
Retención
Los logs se guardan 90 días en la tabla principal. Después pasan automáticamente a transmission_logs_archivo vía cron semanal (domingos 3 AM). Permanecen consultables desde esa tabla por 5 años antes de ser eliminados.
🛰 Auditoría
Bitácora de acciones del personal. Solo Admin
Registra: LOGIN, DEVICE_CREATE, DEVICE_UPDATE, DEVICE_DELETE, TRANSMISSION_ON, TRANSMISSION_OFF. Cada evento con usuario, IP, timestamp y detalle completo.
👤 Usuarios
Gestión de cuentas del Hub. Solo Admin
Roles
| Rol | Acceso |
|---|---|
| admin | Todo — usuarios, devices, transmisiones, auditoría, logs |
| operator | Operación diaria — devices, transmisiones, logs (sin gestión de usuarios ni auditoría) |
Crear usuario
- Menú → Usuarios → + Nuevo
- Username (sin espacios), email corporativo, nombre completo
- Rol: admin u operator
- Password inicial fuerte
- El sistema envía email de verificación al usuario
- Al verificar + cambiar password, queda activo
🔐 Privacidad — Ley 29733
Cumplimiento de la Ley de Protección de Datos Personales del Perú.
Qué datos procesa Global Hub
- IMEI del equipo GPS
- Placa del vehículo
- Coordenadas en tiempo real (últimas + histórico)
- Velocidad, ignición, odómetro
- Razón social del cliente (transport_vendor)
Tabla consent_log
Cada activación/desactivación de destino queda registrada con:
device_imei,device_platedestination(sutran/osinergmin/unigis/maersk/sipcop)action: granted | revokedgranted_at,revoked_atcontract_ref: referencia al contrato del cliente en el CRMgranted_by: usuario que ejecutó + IP
Derechos del titular (art. 18-22)
Acceso, rectificación, cancelación y oposición. Canal: contacto@globalgpsperu.com. Plazo: 20 días hábiles.
🔗 Integración con el CRM
Cómo el CRM se comunica con el Hub para automatizar la activación de filtros.
Flujo completo
- En el CRM: al guardar una unidad GPS con filtros marcados (SUTRAN, OSINERGMIN, etc.) y speed_limit
- CRM hace
POST /api/unidades/{uid}/filtros/syncinternamente - El módulo
api/globalhub_integration/del CRM:- Obtiene token JWT del Hub (
POST /api/login) con credenciales dedicadas (usuariocrm_integration) - Por cada filtro nuevo:
POST /api/transmission/auto-activatecon IMEI/placa, provider, destination - Por cada filtro a desactivar:
POST /api/transmission/toggleenabled=false
- Obtiene token JWT del Hub (
- El Hub responde con estado final; el CRM actualiza su tabla
unidad_filtros_regulatorios - Si algo falla, el CRM reintenta con cron cada 15 min. Tras 3 fallos: estado
error_persistente+ alerta al admin.
Credenciales Hub en el CRM
Variables del /etc/crm/env:
GHUB_API_URL=https://apirest.globalgpsperu.com
GHUB_USER=crm_integration
GHUB_PASS=<secret>
⚡ API endpoints
Lista completa de endpoints REST. Todos requieren JWT excepto /api/login.
Autenticación
POST /api/login | Devuelve JWT HS256, 8 horas de validez |
POST /api/auth/forgot-password | Envía email con token de reset |
POST /api/auth/reset-password | Cambia password con token |
Unidades
GET /api/devices | Listar unidades |
POST /api/devices | Crear manualmente |
PUT /api/devices/{imei} | Editar |
DELETE /api/devices/{imei} | Eliminar (admin) |
Transmisión
POST /api/transmission/toggle | Encender/apagar destino puntual |
POST /api/transmission/auto-activate | Flujo completo: busca, registra, activa |
GET /api/transmission/active | Dashboard — devices con destinos activos |
Logs
GET /api/logs/transmission?imei=X&limit=100 | Logs de transmisión con filtros |
GET /api/logs/audit?limit=200 | Logs de auditoría (admin) |
/docs y /redoc están deshabilitados en producción por seguridad. Se activan temporalmente con EXPOSE_DOCS=true en el env (reiniciar servicio).❓ Preguntas frecuentes
plate en la tabla devices al formato correcto.jimi.user.child.list para listar todas las cuentas, luego itera por cada una buscando el IMEI. Si sigue sin encontrarse, el dispositivo puede estar en otra cuenta maestra o dado de baja.gpg -d --batch --passphrase "$BACKUP_PASSPHRASE" \
backup.db.gz.gpg | gunzip > restore.db La passphrase está en /root/global_hub/.env del Hub.⚠ Errores comunes
| Síntoma | Causa probable | Acción |
|---|---|---|
| Dashboard muestra 0 unidades | Servicio API caído o BD corrupta | systemctl status globalhub en servidor |
| Una entidad deja de recibir trama | Token vencido en el .env del destino | Renovar con el proveedor y actualizar .env + restart service |
| Protrack/TrackSolid "1006 rate limit" | Polling muy frecuente | Token cacheado 2h, no tocar el colector |
| Wialon "unit not found" | Búsqueda parcial matcheó placa incorrecta | Usar search/wialon_id/{id} si conoces el sys_id |
| "Apikey Required / Limit Exceeded" | No pertenece al Hub — es Decolecta del CRM | Revisar DECOLECTA_API_KEY del CRM |