Sign inSign up

sf67/geoloc

By sf67

•Updated 12 months ago

Application de géolocalisation teltonika FMB9xx + mapbox

Image
Monitoring & observability
0

466

sf67/geoloc repository overview

⁠Suivi de véhicules (FMB9xx + Mapbox) – Docker (SQLite)

Application de tracking temps réel mono-conteneur avec:

  • Ingestion TCP Teltonika (Codec 8/8E minimal) pour FMB9xx
  • API REST + WebSocket (Node.js/Express)
  • Stockage SQLite (volume Docker)
  • Frontend responsive Mapbox GL JS (carte, trajets, adresses)
  • Edition de rapport PDF

⁠Prérequis

  • Docker et Docker Compose
  • Un token Mapbox valide

⁠Lancement

  • Ingestion Teltonika TCP: port 5027 (configurez FMB9xx vers l'IP publique et ce port).
  • Définissez MAPBOX_TOKEN et JWT_SECRET via variables d’environnement.
  • Définissez DATA_RETENTION_DAYS via variables d’environnement "0" = désactivé.
  • Définissez LANGUAGE: "fr|en" via variables d’environnement.
  • Accédez à http://ip-serveur:8080⁠ et créez le compte via la page de login.

⁠Démarrage rapide (Portainer/Compose)

services:
  app:
    image: sf67/geoloc:production
    environment:
      NODE_ENV: "production"
      APP_PORT: "8080"
      INGESTION_TCP_PORT: "5027"
      DB_FILE: "/data/app.db"
      MAPBOX_TOKEN: ""
      JWT_SECRET: ""
      IMEI_WHITELIST: ""
      DATA_RETENTION_DAYS: ""
      LANGUAGE: ""
    ports:
      - "8080:8080"
      - "5027:5027"
    volumes:
      - app_data:/data
    command: ["node", "src/index.js"]
    restart: unless-stopped

volumes:
  app_data:

⁠Configuration boîtiers Teltonika

  • Protocole: TCP
  • Hôte: IP/DNS de votre serveur
  • Port: 5027 (ou celui publié)

⁠API

  • GET /api/vehicles
  • GET /api/vehicles/:id/last
  • GET /api/vehicles/:id/track?from=...&to=...&limit=...
  • WebSocket: /ws/positions

⁠Segmentation des trajets (/trips)

  • GET /api/vehicles/:id/trips?from=...&to=...&gap=...&min_stop=...&speed_stop_kmh=...&min_dist=...
  • GET /api/vehicles/:id/trips/:tripId?start=...&end=... (détail GeoJSON du trajet)

⁠Paramètres (tous optionnels sauf from et to):

  • from, to: ISO 8601 (ex: 2025-10-20T00:00:00Z) ou timestamps; fenêtre d’analyse.
  • gap: secondes de « coupure » entre deux points pour segmenter (défaut 600, min 60).
  • min_stop: secondes d’immobilité consécutive (< speed_stop_kmh) qui clôturent un trajet (défaut 600, min 60).
  • speed_stop_kmh: seuil km/h en-dessous duquel on considère un arrêt (défaut 6, min 1).
  • min_dist: distance minimale (m) pour retenir un trajet (défaut 300, min 50).

⁠Conseils selon l’échantillonnage des boîtiers:

  • Échantillonnage rare (points très espacés): privilégiez le découpage par gaps, ex: gap=900 à 1200, et laissez min_stop haut pour ne pas segmenter à l’arrêt.
  • Échantillonnage standard (10–60 s): gap=60–180, min_stop=180–300, speed_stop_kmh=3–5.
  • Urbain dense (beaucoup d’arrêts brefs): réduisez min_stop (ex: 120) et gardez speed_stop_kmh≈3–5.

⁠Préréglage (échantillonnage rare ~5–10 min)

  • gap=600, min_stop=600, speed_stop_kmh=6, min_dist=300

⁠Notes

  • Authentification site-wide par JWT (inscription initiale si aucun compte).
  • Base SQLite: persistance dans /data/app.db (volume app_data).
  • Parser Codec 8 minimal (IO simplifié). Pour 8E et IO avancés, étendre parseAndStoreCodecData.
  • CRC et validations minimales (à compléter si besoin).

⁠Déploiement prod

  • Placez un reverse proxy (Nginx/Traefik) devant le service app avec TLS.
  • Protégez le port d'ingestion via firewall (IPs/APN) si possible.
  • Surveillez les métriques (connexions, positions/min, erreurs CRC).

Tag summary

Content type

Image

Digest

sha256:7280f7fbf…

Size

162.9 MB

Last updated

12 months ago

docker pull sf67/geoloc:production