FlotillasGPS - Sistema completo de monitoreo de flotillas GPS

Sistema completo para monitoreo y gestion de flotas de vehiculos con:
- Backend FastAPI con PostgreSQL/TimescaleDB
- Frontend React con TypeScript y TailwindCSS
- App movil React Native con Expo
- Soporte para dispositivos GPS, Meshtastic y celulares
- Video streaming en vivo con MediaMTX
- Geocercas, alertas, viajes y reportes
- Autenticacion JWT y WebSockets en tiempo real

Documentacion completa y guias de usuario incluidas.
This commit is contained in:
FlotillasGPS Developer
2026-01-21 08:18:00 +00:00
commit 51d78bacf4
248 changed files with 50171 additions and 0 deletions

200
deploy/traccar/traccar.xml Normal file
View File

@@ -0,0 +1,200 @@
<?xml version='1.0' encoding='UTF-8'?>
<!--
============================================
Traccar Server - Configuracion para Sistema de Flotillas
============================================
Documentacion: https://www.traccar.org/configuration-file/
Esta configuracion:
- Usa PostgreSQL como base de datos
- Forward de posiciones a API del sistema
- Deshabilita interfaz web (usamos nuestra propia UI)
- Solo habilita protocolos GPS comunes
============================================
-->
<!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'>
<properties>
<!-- ========================================
Configuracion General
======================================== -->
<!-- Modo de operacion -->
<entry key='config.default'>./conf/default.xml</entry>
<!-- Logging -->
<entry key='logger.enable'>true</entry>
<entry key='logger.level'>info</entry>
<entry key='logger.file'>/opt/traccar/logs/tracker-server.log</entry>
<entry key='logger.rotate'>true</entry>
<!-- ========================================
Base de Datos PostgreSQL
======================================== -->
<entry key='database.driver'>org.postgresql.Driver</entry>
<entry key='database.url'>jdbc:postgresql://localhost:5432/traccar</entry>
<entry key='database.user'>flotillas</entry>
<entry key='database.password'>POSTGRES_PASSWORD</entry>
<!-- Pool de conexiones -->
<entry key='database.checkConnection'>true</entry>
<entry key='database.maxPoolSize'>10</entry>
<!-- ========================================
Interfaz Web (DESHABILITADA)
======================================== -->
<!-- No usamos la web UI de Traccar, usamos nuestra propia -->
<entry key='web.enable'>false</entry>
<!-- Si necesitas habilitarla temporalmente para debug: -->
<!-- <entry key='web.enable'>true</entry> -->
<!-- <entry key='web.port'>8082</entry> -->
<!-- ========================================
Forward de Posiciones a API
======================================== -->
<!-- Enviar cada posicion a nuestro backend -->
<entry key='forward.enable'>true</entry>
<entry key='forward.url'>http://localhost:8000/api/v1/traccar/position</entry>
<entry key='forward.json'>true</entry>
<!-- Headers adicionales (si se necesita auth) -->
<!-- <entry key='forward.header.Authorization'>Bearer TOKEN</entry> -->
<!-- Reintentos en caso de fallo -->
<entry key='forward.retryEnable'>true</entry>
<entry key='forward.retryDelay'>60</entry>
<entry key='forward.retryCount'>3</entry>
<!-- ========================================
Protocolos GPS Habilitados
======================================== -->
<!-- Puerto principal - Protocolo Osmand (Android/iOS apps) -->
<entry key='osmand.port'>5055</entry>
<!-- GT06 - Dispositivos chinos comunes -->
<entry key='gt06.port'>5023</entry>
<!-- H02 - Coban y similares -->
<entry key='h02.port'>5013</entry>
<!-- TK103 - Muy comun -->
<entry key='tk103.port'>5002</entry>
<!-- GPS103 -->
<entry key='gps103.port'>5001</entry>
<!-- Teltonika - Profesionales -->
<entry key='teltonika.port'>5027</entry>
<!-- Queclink -->
<entry key='queclink.port'>5050</entry>
<!-- Meitrack -->
<entry key='meitrack.port'>5020</entry>
<!-- Ruptela -->
<entry key='ruptela.port'>5046</entry>
<!-- Suntech -->
<entry key='suntech.port'>5011</entry>
<!-- Watch (smartwatches GPS) -->
<entry key='watch.port'>5093</entry>
<!-- T55 -->
<entry key='t55.port'>5005</entry>
<!-- Xexun -->
<entry key='xexun.port'>5006</entry>
<!-- TotemAT -->
<entry key='totem.port'>5007</entry>
<!-- Enfora -->
<entry key='enfora.port'>5008</entry>
<!-- Meiligao -->
<entry key='meiligao.port'>5009</entry>
<!-- Protocolo Traccar (app oficial) -->
<entry key='traccar.port'>5190</entry>
<!-- ========================================
Procesamiento de Eventos
======================================== -->
<!-- Eventos a procesar -->
<entry key='event.enable'>true</entry>
<entry key='event.ignoreDuplicateAlerts'>true</entry>
<!-- Geocodificacion (obtener direcciones) -->
<entry key='geocoder.enable'>true</entry>
<entry key='geocoder.type'>nominatim</entry>
<entry key='geocoder.url'>https://nominatim.openstreetmap.org/reverse</entry>
<entry key='geocoder.key'></entry>
<entry key='geocoder.processInvalidPositions'>false</entry>
<entry key='geocoder.reuseDistance'>50</entry>
<!-- Alternativamente usar Google (requiere API key) -->
<!-- <entry key='geocoder.type'>google</entry> -->
<!-- <entry key='geocoder.key'>TU_API_KEY</entry> -->
<!-- ========================================
Filtros de Posicion
======================================== -->
<!-- Filtrar posiciones invalidas -->
<entry key='filter.enable'>true</entry>
<entry key='filter.invalid'>true</entry>
<entry key='filter.zero'>true</entry>
<entry key='filter.duplicate'>true</entry>
<!-- Filtrar por velocidad maxima (km/h) -->
<entry key='filter.maxSpeed'>500</entry>
<!-- Distancia minima entre posiciones (metros) -->
<entry key='filter.distance'>10</entry>
<!-- ========================================
Notificaciones
======================================== -->
<!-- Las notificaciones las maneja nuestro backend -->
<entry key='notificator.enable'>false</entry>
<!-- ========================================
API REST de Traccar (DESHABILITADA)
======================================== -->
<!-- No exponemos API de Traccar, usamos nuestra propia -->
<entry key='api.enable'>false</entry>
<!-- ========================================
Seguridad
======================================== -->
<!-- Registro de nuevos dispositivos -->
<entry key='database.registerUnknown'>true</entry>
<!-- Dispositivos deben existir antes de enviar datos -->
<!-- <entry key='database.registerUnknown'>false</entry> -->
<!-- ========================================
Rendimiento
======================================== -->
<!-- Threads para procesamiento -->
<entry key='processing.computedAttributes.enabled'>true</entry>
<entry key='processing.computedAttributes.threads'>4</entry>
<!-- Cache -->
<entry key='database.positionsHistoryDays'>30</entry>
</properties>