Versión: 2025.10 — Gestión: EA1HG
Se ha implementado una actualización integral del sistema de monitorización en tiempo real con las siguientes mejoras técnicas:
🔹 Sincronización estado visual (frontend/backend)
Estado de transmisión (TX/RX) se mantiene coherente entre:
Lista lateral de llamadas (HTML)
Marcadores en el mapa (Leaflet)
Los colores se actualizan cada 500 ms mediante polling a /api/llamadas.
Corrección de fugas de estado: si no se recibe el evento end of voice transmission, el sistema aplica un timeout de 10 segundos (TX_TIMEOUT) y fuerza la transición a RX.
🔹 Capas de mapa mejoradas
Se han integrado tres proveedores de teselas (tiles):
🗺 OpenStreetMap (https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png) → capa por defecto.
🌙 CartoDB Dark (https://{s}.basemaps.cartocdn.com/dark_all/...) → modo nocturno.
🛰 Esri World Imagery (https://server.arcgisonline.com/.../World_Imagery/...) → vista satelital de alta resolución.
✅ El control de capas (L.control.layers) se inicializa con OSM activo, evitando pantalla en blanco al cargar.
🔹 Geolocalización robusta
Para cada callsign:
Se consulta caché local (coordenadas_cache).
Si no existe, se parsea la página de QRZ (www.qrz.com/db/{callsign}) en busca de lat/lon.
Si falla, se intenta conversión desde Grid Maidenhead (función grid_to_latlon).
Si todo falla, se usa ubicación por defecto: Madrid (40.4168, -3.7038).
🔹 Cálculo de distancias en tiempo real
Al abrir el popup de cualquier marcador, se calcula la distancia respecto a todas las demás estaciones visibles.
Algoritmo: Haversine (precisión geodésica).
Formato de salida:
< 1 km → muestra en metros (XXX m)
≥ 1 km → muestra en kilómetros (X.X km)
🔹 Arquitectura de datos
Transmisiones activas: diccionario transmisiones_activas_mmdvm (clave: callsign).
Histórico de llamadas: deque llamadas (máx. 8 entradas, con TTL de 1h).
API REST:
GET /api/llamadas → devuelve { transmisiones_activas[], llamadas_historicas[], estadisticas{} }
GET /api/actividades → devuelve actividades registradas (QSOs, spots, etc.)
🔹 Gestión de recursos
Hilo dedicado a limpieza por timeout (limpiar_tx_timeout).
Hilo de purga de llamadas inactivas (>1h).
Recarga automática del CSV de usuarios cada 10 minutos.
🔗 Acceso al mapa:
👉 http://4374.tplinkdns.com:8082/mapa
73 — EA1HG / REM-ESP 🇪🇸
