Aller au contenu
Sylvain Joffraud l4w
Retour

Tracker GPS : positions « fantôme » sans fix (sat absent)

Un tracker GPS 4G (firmware JT808) que j’utilise pour un projet IoT pet. Réglage standard MODE,1,30,300# (realtime, 30s en mouvement, 300s à l’arrêt). Logiquement, j’attendais des positions toujours fraîches au pire toutes les 5 min.

En analysant les attributes envoyés via Traccar, je remarque que certaines positions arrivent sans le champ sat :

// Position avec fix frais (device actif)
{ "sat": 21, "motion": true, "batteryLevel": 100, "rssi": 31, ... }

// Position en mode économie (device immobile depuis quelques minutes)
{ "motion": false, "batteryLevel": 100, "rssi": 31, ... }
//   ↑ pas de `sat`

Même lat/lon répétée, même inside_zone recalculé… mais pas de nouveau fix GPS.

Pourquoi

Beaucoup de firmwares de trackers low-power coupent le récepteur GPS quand le device est immobile depuis X temps (économie de batterie), et continuent à envoyer périodiquement la dernière position connue. Côté JT808, les bits indiquant « fix valide » et le sat count sont alors omis du body de position, ou mis à 0.

Traccar décode et expose ce que le tracker envoie : si sat est absent du frame, il est absent des attributes. Pas de warning, pas de flag explicite « ceci est un cache ».

Conséquence pour le métier

Une position « fantôme » est un cache, pas une mesure. Elle peut :

Pour toute logique métier qui dépend de où est le device maintenant (géofence, distance parcourue, vitesse instantanée, déclenchement d’alerte sur sortie), il faut filtrer.

Le marqueur fiable

attributes.sat présent et > 0 = fix GPS récent. Absent = position cachée. C’est plus fiable que :

Gating asymétrique selon la criticité

Pour un cas géofence : éviter les faux positifs d’ouverture d’alerte est critique. Donc fail-closed sur sat à l’ouverture d’un épisode → si pas de sat reporté, on n’ouvre pas.

Mais on veut quand même fermer un épisode si le device rentre puis reste immobile (= mode économie) → fail-open sur sat à la fermeture.

C’est l’asymétrie expliquée dans [[82-asymmetrie-fail-open-closed-state-machine]].

Lessons learned


Partager cet article :

Article précédent
Tunnel SSH invisible des conteneurs Docker : bind 0.0.0.0
Article suivant
Anti-spam notifs IoT : pattern épisode + ack + ré-armement