← Retour au blog
tech 4 mai 2026

Diffuser des données GPS sur le réseau local

Découvre comment diffuser des données GPS sur ton réseau local pour améliorer la précision de la localisation sur Linux, en utilisant des protocoles tels que NMEA 0183 et des outils comme Avahi.

Introduction

L'exactitude des services de localisation sur Linux laisse souvent à désirer, surtout après l'arrêt du service de localisation GPS de Mozilla. Si tu utilises Linux, tu as probablement remarqué que les services comme Firefox et Gnome Maps se fient à Geoclue, qui, par défaut, utilise une base de données GeoIP. Le problème ? Une précision de seulement 25 km. Mais il existe une solution : diffuser les données GPS sur ton réseau local.

Pourquoi diffuser des données GPS en local ?

Diffuser des données GPS sur le réseau local peut être une solution efficace pour contourner les limitations des services de localisation basés sur GeoIP. Pour les serveurs ou les dispositifs fixes, émettre des coordonnées GPS stables peut améliorer considérablement la précision de la localisation. Cela peut s'avérer crucial pour des applications qui dépendent de données de localisation précises.

Le protocole NMEA 0183

Le protocole NMEA 0183 est un ensemble de spécifications utilisé principalement dans l'électronique marine. Il permet de transmettre des informations GPS via un port série ou un socket TCP. Par exemple, un message NMEA pourrait ressembler à ceci :

`` $GPRMC,204049.000,A,5308.3999,N,00601.9266,E,0.000,0.000,030526,,02 $GPGGA,204049.000,5308.3999,N,00601.9266,E,1,08,1.0,119.0,M,0.0,M,,6F ``

Ces messages contiennent des données de coordonnées GPS, d'altitude et d'autres informations pertinentes.

Configuration de GeoClue

GeoClue, le système en charge de la localisation sur Linux, prend en charge le protocole NMEA par défaut. Pour activer cette fonctionnalité, il suffit de modifier le fichier de configuration /etc/geoclue/geoclue.conf comme suit :

`` # Network NMEA source configuration options [network-nmea] # Fetch location from NMEA sources on local network? enable=true ``

Cette configuration permet à GeoClue de rechercher des services NMEA sur le réseau local via MDNS.

Mise en place d'un serveur GPS local

Créer un serveur qui diffuse ces données GPS est relativement simple. Tu peux utiliser Python pour écrire un petit serveur TCP qui émet les informations GPS à intervalle régulier. Voici un exemple de script que tu pourrais utiliser :

```python import socket import time

HOST = '' # Adresse IP de l'hôte PORT = 10110 # Port utilisé par le service NMEA

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() conn, addr = s.accept() with conn: print('Connected by', addr) while True: conn.sendall(b'$GPRMC,204049.000,A,5308.3999,N,00601.9266,E,0.000,0.000,030526,,*02\n') time.sleep(1) ```

Utilisation d'Avahi pour la découverte de services

Pour que GeoClue puisse découvrir ton service GPS, tu peux utiliser Avahi, une implémentation standard de MDNS sur Linux. Voici un exemple de configuration Avahi :

``xml <?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">NMEA GPS (%h)</name> <service> <type>_nmea-0183._tcp</type> <port>10110</port> </service> </service-group> ``

Copie ce fichier dans /etc/avahi/services/ et redémarre le service Avahi pour que le serveur soit découvert sur le réseau local.

Conclusion

Diffuser des données GPS localement est une solution ingénieuse pour améliorer la précision de la localisation sur Linux, surtout lorsque les alternatives de localisation sont limitées. En utilisant des protocoles comme NMEA 0183 et des outils comme Avahi, tu peux créer un système de localisation fiable et précis pour tes besoins spécifiques.

Discutons de ton projet en 15 minutes.

GPS NMEA 0183 Local Network GeoClue Avahi

Tu veux automatiser tes opérations ?

Discutons de ton projet en 15 minutes.

Réserver un call