Blog de Jesus Forain Blog de Jesus Forain
Blog personnel de Jesus Forain où les principaux sujets sont l'informatique, la technologie, le spatial mais aussi divers sujets.
Rechercher & filtrer
Filtrer par année / mois
Derniers commentaires
Starship flight 6 prévu ce mardi 19 novembre 23h00
avatar de Jesus Forain
Jesus Forain
hier 18:02

Les images des équipes de NASA Spaceflight   ▶  

Starship flight 6 prévu ce mardi 19 novembre 23h00
avatar de Jesus Forain
Jesus Forain
hier 00:24

Le rattrapage du booster, décidé manuellement après étude des données de vol, a été annulé car les conditions n'étaient pas correctes. Il a atterri dans l'océan au large de Boca Chica. Le test de rallumage d'un raptor atmosph&eacu[...]

Starship flight 6 prévu ce mardi 19 novembre 23h00
avatar de Jesus Forain
Jesus Forain
mardi 19 novembre 2024 22:37

Charge utile du Starship: une banane ! Il n'y a pas de rapport avec la ministre Suédoise qui a la phobie des bananes, l'autocollant “banana for scale” apposé sur le Starship était là bien avant que ne sorte cette histoire.  

Demander une adresse IP full stack chez Free pour avoir tous les ports
avatar de Jesus Forain
Jesus Forain
jeudi 14 novembre 2024 21:34

Normalement il ne devrait pas avoir besoin d'une IP full stack pour la caméra, ces caméras sont faites pour fonctionner avec n'importe quelle box. Le message "impossible de se connecter" apparaît-il uniquement quand le tel utilise la connexion mobile et qu'il n'est pas connect&ea[...]

Demander une adresse IP full stack chez Free pour avoir tous les ports
Cori1402 (non inscrit)
jeudi 14 novembre 2024 19:31

Bonjour, J'ai besoin d'aide Je possède des caméras dans mon logement que je peux visualiser sur mon tél mais la plupart du temps, je vois le message "impossible de se connecter". L'ancien proprio qui a fait l'installation me dit que cela vient du problème d'IP de Free et [...]

Demander une adresse IP full stack chez Free pour avoir tous les ports
avatar de Jesus Forain
Jesus Forain
mardi 12 novembre 2024 23:53

J'ai fait des tests en IPv4 et IPv6 avec nperf, les débits sont ceux attendus et je ne trouve pas de différence de débit entre les 2 protocoles. J'ai une Freebox Revolution avec boîtier ONU externe. Pour ton test de débit, tu es bien connecté en Ethernet &agr[...]

Demander une adresse IP full stack chez Free pour avoir tous les ports
fred (non inscrit)
lundi 11 novembre 2024 19:45

Bonjour, Je vous partage mon aventure avec free et la fameuse adresse ip full stack pour une autre raison que l'hébergement web. J'ai été contraint la mort dans l'âme d'abandonner mes journées de travails contraignantes devant la machine a café pour du t&eacu[...]

Free: le reverse DNS est de nouveau opérationnel
avatar de Jesus Forain
Jesus Forain
mercredi 6 novembre 2024 23:15

Tu es sur qu'il n'y a pas de caractères parasites dans le champ de saisie? Il faut saisir le nom de domaine seulement, par exemple “jesus-forain.fr” Ça peut aussi être un bug du formulaire, essaye aussi avec un autre navigateur

Free: le reverse DNS est de nouveau opérationnel
kossak (non inscrit)
mercredi 6 novembre 2024 22:21

Bonsoir, merci pour ce post très utile. Je n'arrive pas de mon côté à activer le reverse DNS car il me dit en l'espèce : "Reverse invalide: il doit faire au maximum 63 caractères et ne peux contenir que des caractères alphanumériques (a-z A-Z 0-[...]

Demander une adresse IP full stack chez Free pour avoir tous les ports
__invité__
samedi 2 novembre 2024 18:25

Oui, je comprends bien que ce genre de situation ne fait pas toujours partie de leurs procédures standards.  Comme tu le dis, ce sont surtout des techniciens de premier niveau, mais ils ont quand même transféré mon appel à des techniciens ainsi qu'à leur[...]

Création d'un serveur NTP de strate 1 (GPS)

- 2908 vues

Sois toujours à l'heure grâce au NTP!

NTP (Netwok Time Protocol) est un protocole réseau servant à synchroniser les horloges des ordinateurs. C'est grâce au NTP que ton smartphone ou ordinateur est toujours à l'heure exacte avec un précision de l'ordre de quelques millisecondes.

Ici, on va créer un serveur NTP ayant le maximum de précision et pour un coût modique de moins de 100€ voir 10€ si tu as déjà une partie du matériel. Ce serveur sera de strate 1 ayant pour référence le GPS et permettant d'avoir l'heure exacte avec une marge d'erreur d'environ 300ns (nanosecondes) soit 300 milliardièmes de seconde!

Le Raspberry hébergeant ce blog dispose de son propre GPS, lui garantissant ainsi d'être toujours à l'heure. L'heure affichée en haut de cette page est donc toujours juste avec une erreur d'environ 1 seconde causée par le temps de chargement de la page.

Si tu n'as rien compris à ce que l'on va faire, pas de panique! Avant d'aborder l'installation proprement dite je vais t'expliquer quelques généralités sur la mesure du temps et le matériel que l'on va utiliser afin que tu comprenne bien ce que l'on va faire. Mais tu verras que créer un serveur NTP c'est facile.

 

Les strates NTP

Les serveurs NTP sont répartis en strates numérotés de 0 à 16 et définissant leur éloignement par rapport à l'horloge de référence. Plus le numéro de strate est élevé, plus le serveur est éloigné de l'horloge source.

Les strates 0 et 16 ont un statut particulier.
- La strate 0 est l'horloge elle-même et il n'existe pas de serveur de strate 0.
- La strate 16 correspond à un serveur non synchronisé permettant aux autres serveurs de l'exclure car indiquant une heure fausse.

Un serveur de strate 1 est directement connecté à l'horloge de référence et offre la synchronisation la plus précise, un serveur de strate 2 se synchronise sur un serveur de strate 1, un serveur de strate 3 se synchronise sur un serveur de strate 2 et ainsi de suite. En général les serveurs vont rarement au delà de la strate 4.
Attention! l'heure ne sera pas forcément plus précise avec un serveur de strate 1 qu'avec un serveur de strate supérieure, notamment sur Internet. Le chemin réseau entre toi et le serveur de strate 1 peut être plus long et traverser beaucoup plus de matériels réseau qu'avec un serveur d'une autre strate qui sera plus proche.

 

L'horloge de référence

Pour avoir l'heure, ça peut paraître évident mais il nous faut une horloge! Mais comme on veut le maximum de précision on ne va pas utiliser n'importe quelle horloge, il faut une horloge atomique qui est le type d'horloge le plus précis avec une marge d'erreur d'une seconde sur plusieurs millions d'années. Ensuite, cette horloge doit être à l'heure, parce qu'avoir une horloge ultra précise qui n'est pas à l'heure, ce n'est pas très utile.

Ici, notre horloge de référence sera le GPS, et on parle bien du même GPS utilisé en voiture pour nous guider!
Là, tu commences à te poser des questions, c'est quoi le rapport entre le GPS et l'heure? c'est comme si l'on se servait d'une carte routière pour avoir l'heure!

Pour comprendre, il faut s'intéresser au fonctionnement du GPS. 
Un récepteur GPS calcule la distance le séparant des satellites dont leur position est connue. Pour placer un point dans l'espace il faut au moins 3 satellites afin de réaliser une triangulation.
Le calcul de distance se fait via la différence de temps entre les signaux reçus des différents satellites et pour savoir quand est parti le signal, il faut l'hordorater et c'est là que le temps entre en compte. Il faut un quatrième satellite pour résoudre une équation à 4 inconnues (X, Y, Z et le temps)

Chaque satellite embarque deux horloges atomiques, dont l'une sers de secours, permettant de diffuser l'heure exacte n'importe où sur Terre.

 

Et pourquoi pas posséder sa propre horloge atomique?

Avoir sa propre horloge atomique, n'importe quel geek trouverait ça cool sauf que savoir l'heure qu'il est c'est bien plus complexe que ça! Paradoxalement, plus les horloges sont devenues précises, plus c'est devenu complexe de faire en sorte qu'elles indiquent l'heure juste!

Si tu va faire un tour sur Ebay, tu pourras trouver des horloges atomiques pour quelques centaines d'euros et là tu te dis qu'il n'y qu'à la synchroniser une seule fois pour avoir éternellement l'heure exacte. Sauf que ça ne fonctionne pas comme ça!

Une seconde, c'est une seconde, peu importe où l'on est. Enfin c'est ce que l'on croyait jusqu'en 1905 où Albert Einstein nous a pondu sa théorie de la relativité. L'écoulement du temps dépend de la force de gravité et de la vitesse. À l'époque ça ne pose pas de problème puisque la précision des horloges est insuffisante pour en mesurer les effets mais avec l'apparition des premières horloges atomiques dans les années 50 et devenant de plus en plus précises, cet effet va se faire ressentir et poser problème. En 1971 a lieu l'expérience de Hafele-Keating consistant à faire voyager des horloges atomiques à bord d'avions pour vérifier expérimentalement la théorie de la relativité. Parfaitement synchronisés au départ, les horloges ne l'étaient plus à la fin de leur voyage et les décalages théoriques obtenus par le calculs étaient validés expérimentalement. Même chose pour l'action de la force de gravité: une horloge soumise à une plus forte gravité va ralentir par rapport à une autre soumise à une gravité moindre.

Si tu possède ta propre horloge atomique, tu n'auras donc pas l'heure exacte puisque la force de gravité n'est pas parfaitement identique sur Terre, ton horloge ira trop vite ou trop lentement.

La référence de temps utilisée par les horloges atomiques est le TAI (Temps Atomique International), c'est la moyenne pondérée de 450 horloges atomiques dispersés sur la planète. Le TAI est calculé par le Bureau International des Poids et Mesures à Paris.

Et ce n'est pas tout puisqu'il y a un autre paramètre qui entre en compte quand on veux savoir l'heure qu'il est: la vitesse de rotation de la Terre!
Il faut savoir que Terre ne tourne pas exactement en 24h! Soumise à l'influence des autres objets du système solaire, sa rotation est irrégulière, elle accélère ou ralenti de quelques millisecondes chaque jour. Cette référence de temps est nommée UT1 (Universal Time) et correspond à l'heure solaire au méridien de Greenwich.

Maintenant, pour avoir l'heure, il faut combiner le TAI et UT1 qui nous donnent le temps UTC (Coordinated Universal Time), c'est à dire l'heure qu'indique les horloges. Le temps UTC suis l'écoulement du TAI auquel on ajoute des secondes intercalaires afin de rester calé sur le temps UT1. Ces secondes intercalaires sont ajoutés de temps en temps uniquement le 30 juin ou le 31 décembre après 23h 59min 59s, la dernière minute de ces jours dure alors 61 secondes. Depuis l'utilisation d'UTC en 1972, 27 secondes intercalaires ont été ajoutés, la dernière remontant au 31 décembre 2016. Attention! ça ne veut pas dire que les jours ont augmentés de 27 secondes depuis 1972 mais simplement que la définition de la seconde ne colle pas exactement au rythme de rotation de la Terre; ce problème est similaire à celui posé par les années bissextiles auxquelles on ajoute un jour afin que le calendrier reste calé sur les saisons.

Maintenant, tu comprends que mesurer très précisément le temps et garder les pendules à l'heure est un tâche complexe effectuée par des laboratoires spécialisés.

Cependant, tu peux toujours ajouter une horloge atomique à ton serveur NTP. Cette horloge sera synchronisée avec le GPS et servira de secours en cas de perte du signal GPS, permettant ainsi à ton serveur de continuer à fournir l'heure précise pendant quelques jours. D'ailleurs, certains serveurs NTP du commerce sont équipés d'une horloge atomique.

 

Matériel nécessaire

Pour construire notre serveur NTP, on va avoir besoin d'un récepteur GPS ou d'un autre système de positionnement par satellite comme Galilleo ou Glonass. Ce genre de récepteur se trouve sur Amazon pour environ 10€ à 20€, j'ai utilisé celui-ci de type Ublox.
Le récepteur GPS utilise un port série pour communiquer avec l'ordinateur sauf que ce port série possède une latence de quelques millisecondes qui va dégrader la précision de l'heure. Pour cela il faut utiliser en plus un signal PPS (pulse per seconde) qui est une brève impulsion électrique envoyée au début de chaque seconde par le récepteur GPS.

Pour résumer:
- le port série est utilisé pour savoir l'heure qu'il est
- le signal PPS indique très précisément le début de chaque seconde

Les données qui sortent du port série sont toutes les informations brutes calculés par la puce GPS: heure, latitude, longitude, vitesse, nombre de satellites visible etc...

Attention! bien que les puces GPS aient toutes une sortie PPS, sur certains récepteurs GPS la broche PPS de la puce GPS n'est pas câblée, il faudra alors souder un fil directement sur la broche PPS. Vu la petitesse des broches, cette opération est délicate à réaliser. Veiller à choisir un récepteur disposant de la sortie PPS; si le récepteur comporte 5 broches en sortie ça devrait être le cas.

Ensuite, pour notre serveur il nous faut un ordinateur mais pas n'importe lequel puisque l'on va utiliser un Raspberry Pi. Ce qui nous intéresse sur le Raspberry, c'est son connecteur GPIO permettant d'y connecter le récepteur GPS puisque sur le GPIO on y trouve un port série et des connecteurs spécifiques que l'on ne trouve pas sur les ordinateurs type PC permettant de récupérer le signal PPS.

Pour résumer, comme matériel il te faudra:
- un récepteur GPS avec sortie PPS
- un Rasperry Pi. Évite le Raspberry 1 qui est mono core et offre moins de précision que ses successeurs.
- éventuellement des câbles Dupont ou du fil pour connecter le récepteur GPS au Raspberry Pi

Pour gagner en précision et en stabilité, je te conseille de dédier ton Raspberry uniquement à l'utilisation en tant que serveur NTP et ne pas laisser tourner de services inutiles car cela occupe le CPU et diminue la précision de la synchronisation.

 

Installation matérielle

Tu recevras ton GPS emballé dans un sachet

module GPS emballé

À l'intérieur, il y a 3 éléments:

  • le circuit imprimé avec la puce GPS
  • l'antenne, à clipser sur le connecteur en bas à gauche sur le circuit imprimé.
  • un connecteur à souder

Ce GPS a aussi un port mini USB que l'on ne va pas utiliser ici. Ce port USB est en fait un adaptateur port série vers USB permettant de connecter le GPS à n'importe quel ordinateur et il a le même rôle que le port série du connecteur à souder.

module GPS

La nomenclature des broches est indiqué sur le circuit imprimé du GPS.

  • PPS sortie du signal PPS
  • TXD transmission de données du port série
  • RXD réception de données du port série
  • GND ground, masse
  • VCC alimentation +3,3V

brochage du module GPS

Pour le branchement, utilise ce schéma des broches du connecteur GPIO.

  • PPS à connecter sur un des connecteurs GPIO en orange. Attention! le numéro du port GPIO est différent du numéro de la broche physique. Ici j'utilise le GPIO N°18 qui correspond physiquement à la broche N°12 sur le Raspberry.
  • TXD à connecter sur la broche N°10. Attention! on connecte la sortie d'un élément sur l'entrée de l'autre élément.
  • RXD à connecter sur la broche N°8
  • GND à connecter sur n'importe quel connecteur GND en noir
  • VCC à connecter sur la broche N°1

Lors de la mise sous tension du Raspberry, tu doit avoir un LED rouge qui s'allume et qui au bout de quelques minutes devrait se mettre à clignoter au début de chaque seconde (la LED s'éteint quand l'impulsion PPS est envoyée) indiquant alors que le GPS a accroché le signal et est opérationnel. Tant que ça ne clignote pas, tu ne pourras pas utiliser ton GPS et le mieux est d'aller dehors afin de recevoir les signaux des satellites GPS de façon optimale.
Et si tu te poses la question: est-ce que si j'ai plusieurs modules, vont-ils tous clignoter en même temps? la réponse est oui, ils seront tous parfaitement synchronisés.

brochage du Raspberry Pi
source: https://freesvg.org/gpiopinsv3withpi

Exemple de branchement sur un Raspberry Pi 1 que j'ai utilisé pour écrire ce tuto.

module GPS connecté au Raspberry

 

Installation logicielle

Installation faite sur Raspberry Pi OS 2022-09-22-raspios-bullseye-armhf-lite

Se connecter en root

 

Installation des paquets

On aura besoin de:

  • pps-tools outils pour voir l'état du signal PPS
  • gpsd daemon GPS
  • gpsd-tools outils pour GPSD, notamment voir l'état du GPS
  • chrony c'est le serveur NTP
apt install pps-tools gpsd gpsd-tools chrony

 

Désactivation de la console série

Une console est activée par défaut sur le port série du Raspberry, il faut la désactiver car elle va entrer en conflit avec le GPS.

Ouvre le fichier de configuration des paramètres du boot

vim /boot/cmdline.txt

Supprime ces deux paramètres s'ils sont présents dans la ligne d'options

console=serial0,115200 
console=tty1

Désactive le service console port série

systemctl disable hciuart.service

 

Configuration de la broche PPS et du port série

Ouvre le fichier de configuration

vim /boot/config.txt

Vérifie que le port série est activé. S'il est présent le paramètre enable_uart doit être à 1. S'il est absent du fichier, ajoute-le.

# Activer le port série
enable_uart=1

Configuration de la broche PPS. Ici on utilise le pin GPIO N°4 mais tu peux en utiliser un autre si tu veux.
Attention! le numéro du pin GPIO est différent du numéro de la broche physique sur le connecteur GPIO.

# Broche PPS
dtoverlay=pps-gpio,gpiopin=18

Pour les Raspberry 3 et supérieur avec Bluetooth, il faut le désactiver car il utilise une partie des broches GPIO.

# Désactiver le Bluetooth
dtoverlay=disable-bt

 

Mapper le GPS et le PPS

On va mapper le GPS et le PPS sur des périphériques virtuels avec des noms spécifiques attendus par chrony.

Créer un fichier de règles UDEV

vim /etc/udev/rules.d/80-gps-pps.rules

Colle ça dedans

# Création du lien symbolique /dev/gps0 pointant vers /dev/ttyAMA0
KERNEL=="ttyAMA0", SUBSYSTEM=="tty", DRIVER=="", SYMLINK+="gps0", MODE="0666"

# Création du lien symbolique /dev/gpspps0 pointant vers /dev/pps0
KERNEL=="pps0", SUBSYSTEM=="pps", DRIVER=="", SYMLINK+="gpspps0", MODE="0666"

 

Ajout du PPS au kernel

On va dire au kernel Linux d'utiliser un signal PPS.

Ouvre le fichier

vim /etc/modules

Ajoute cette ligne

pps-gpio

Redémarre le Raspberry

reboot

Dans /dev vérifie que tu as ces 2 périphériques grâce à cette commande

ls -l /dev/gps0 /dev/gpspps0

Tu doit avoir un résultat similaire (ignore les dates)

lrwxrwxrwx 1 root root 7  5 févr. 14:20 /dev/gps0 -> ttyAMA0
lrwxrwxrwx 1 root root 4  5 févr. 14:20 /dev/gpspps0 -> pps0

 

Configuration de gpsmon

Ouvre le fichier de configuration

vim /etc/default/gpsd

Explication des paramètres

  • GPSD_OPTIONS options de gpsd
    -n (nowait) : ne pas attendre qu'un client se connecte pour interroger le GPS
    -r (badtime) : utiliser l'heure GPS même si le signal n'est pas accroché
     
  • DEVICES périphériques
    Chemin du périphérique à utiliser
     
  • USBAUTO concerne les périphériques USB, on n'utilise pas ce parmètre

Ton fichier doit ressembler à ça

# Devices gpsd should collect to at boot time.
# They need to be read/writeable, either by user gpsd or the group dialout.
DEVICES="/dev/ttyAMA0"

# Other options you want to pass to gpsd
GPSD_OPTIONS="-n -r"

# Automatically hot add/remove USB GPS devices via gpsdctl
#USBAUTO="true"

Exécute gpsd au démarrage

systemctl enable gpsd

Démarre le service gpsd

systemctl start gpsd

 

Test du bon fonctionnement du GPS

Le GPS étant maintenant configuré, on va vérifier qu'il fonctionne.

Lance gpsmon

gpsmon

Tu doit avoir un tableau avec toutes les infos retournés par le GPS et ça doit s'actualiser toutes les secondes. Cet affichage est valable pour un GPS envoyant les données au format binaire, si les données sont au format NMEA, l'affichage sera différent. Pour modifier le format, voir la partie Bonus à la fin de cet article.

/dev/ttyAMA0                  u-blox>
┌──────────────────────────┐┌─────────────────────────────────────────────────┐ or":14}
│Ch PRN  Az  El S/N Flag U ││ECEF Pos: +7295054.65m  -23086.83m +3791045.55m  │ ver":"u-blox","subtype":"SW
│ 0   6  89   1   0 0104   ││ECEF Vel:     -0.17m/s     -0.19m/s     +0.20m/s │ ed":"2023-02-12T10:59:41.00
│ 1  10 277  21  16 030c   ││                                                 │ ycle":0.02}]}
│ 2  12 234  68  36 070d Y ││LTP Pos:  44.845663488°  -0.572704807°    86.23m │ false,"timing":false,"split
│ 3  13 147   6  21 040d Y ││LTP Vel:    0.00m/s   0.0°   0.00m/s             │
│ 4  15 169  26  21 040d Y ││                                                 │
│ 5  17  37  14  25 040d Y ││Time: 0 11:00:02.00                              │
│ 6  19  63  35  23 040d Y ││Time GPS: 2249+ 39602.000     Day: 0             │
│ 7  23 242  14  33 070d Y ││                                                 │
│ 8  24  76  76  25 040d Y ││Est Pos Err   9.71m Est Vel Err   0.00m/s        │
│ 9  25 239  37  30 070d Y ││PRNs:  9 PDOP:  1.5 Fix 0x03 Flags 0xdd          │
│10  32 314  23  26 040d Y │└─────────────────── NAV_SOL ─────────────────────┘
│11 120 201  36   0 0110   │┌─────────────────────────────────────────────────┐
│12 124 150  34   0 0110   ││DOP [H]  0.8 [V]  1.2 [P]  1.5 [T]  0.7 [G]  1.6 │
│13 126 146  32   0 0110   │└─────────────────── NAV_DOP ─────────────────────┘
│14 193   0 -91   0 0110   │┌─────────────────────────────────────────────────┐
│15 194   0 -91   0 0110   ││TOFF:  0.130635318       PPS:  0.000001066       │
└────── NAV_SVINFO ────────┘└─────────────────────────────────────────────────┘
(26) 15ce49dcc90ca16cdeadfc206f4c707f65383de140fb5de720ca
(24) bcec9e3cb6c043b6b93ffe40bfc2ce9a03b01efe618db6077583
------------------- PPS offset:  0.000000925 ------
(60) df7e11eb4ec5fc383157d87fbfb72e492d6633dfcd84024cede41be8a9f074cf5d59df383fae544fa92b66303cd83ed3712af6
69f280b5295fcc14e6
(220) 4b266bb589387e397ea1056054384bd94892c8c168437882ef294f8817a1a2257f12770277b590120510fd1fc9afdc68b584f
a4239ac025c3eca02c79f29854bafa947119b60415639ffc9c3d5f4027990458adf31a7fd2e8a9d86e10e3f9206d2491b10f2b09d1b
aee3d9e5fc9300de9457392bc05e7d7cf1a813683b969d45d03dea429b9d88361fd10ad1030ef36e6c028ac2a50787f2b7b90e50b5e
461f46acb536d37b7606176907d45d91d78b1cd6c15f0251cf8d829c5f584e7b96fd713625adeb890370d0d784769cbc4e03d750c75
ceb11c3569c6070c16
(26) d9594e78700ab25287f9309342619729f3f804a962dedd90724a
(24) 701626805a097044fc604519f75b984c44c971aa3577844a
------------------- PPS offset:  0.000001066 ------
(60) 3088ff6514e187a61f65c37f4c4e74e370c2015808afdd1b6cc4eda02bf7e424148adb8bceca4f77ca51da14a1dac2ef675ba9
f0d802e7212ab5448e

Les lignes qui défilent sous le tableau sont les données brutes envoyés par le récepteur GPS sur le port série et ces données sont mises en forme dans le tableau pour faciliter leur lecture par un humain. Si ton GPS a accroché le signal et que tes branchements sont corrects, tu doit avoir la ligne “PPS offset”, dans le cas contraire elle est absente; on va tester le fonctionnement du PPS au chapitre suivant.

Attention, l'heure donnée par le GPS est fausse! Le temps GPS est calé sur le TAI et ne prends pas en compte les secondes intercalaires. Les secondes intercalaires sont listés au niveau du système dans les fichiers /usr/share/zoneinfo/leapseconds et /usr/share/zoneinfo/leap-seconds.list. Pense à faire régulièrement les mises jour ton système, ces fichiers seront ainsi actualisés.

À partir d'ici, pour continuer ton GPS doit accrocher le signal. Tu doit avoir des Y dans la colonne U à gauche indiquant les satellites actuellement utilisés. S'il n'accroche pas le signal, rapproche-toi d'une fenêtre ou va dehors.
Lors d'un démarrage à froid (au moment de la mise sous tension du GPS), il peut s'écouler une quinzaine de minutes avant que le GPS accroche le signal.

 

Test du signal PPS

Exécute la commande

ppstest /dev/gpspps0

Tu doit avoir un résultat de ce genre avec une ligne qui s'affiche toutes les secondes

trying PPS source "/dev/gpspps0"
found PPS source "/dev/gpspps0"
ok, found 1 source(s), now start fetching data...
source 0 - assert 1676200598.000002348, sequence: 159720 - clear  0.000000000, sequence: 0
source 0 - assert 1676200599.000000675, sequence: 159721 - clear  0.000000000, sequence: 0
source 0 - assert 1676200600.000000095, sequence: 159722 - clear  0.000000000, sequence: 0
source 0 - assert 1676200601.000001234, sequence: 159723 - clear  0.000000000, sequence: 0
source 0 - assert 1676200602.000000654, sequence: 159724 - clear  0.000000000, sequence: 0
source 0 - assert 1676200603.000001949, sequence: 159725 - clear  0.000000000, sequence: 0

Si tu as ça, ce n'est pas bon, le PPS ne fonctionne pas. Causes possibles: GPS non synchronisé, mauvais contact, mauvaise broche GPIO.

trying PPS source "/dev/gpspps0"
found PPS source "/dev/gpspps0"
ok, found 1 source(s), now start fetching data...
time_pps_fetch() error -1 (Connection timed out)
time_pps_fetch() error -1 (Connection timed out)
time_pps_fetch() error -1 (Connection timed out)

 

Configuration de Chrony

On va configurer le serveur NTP.

Ouvre le fichier de configuration

vim /etc/chrony/chrony.conf

Désactive tous les autres serveurs, dans mon cas il y a juste cette ligne à commenter

pool 2.debian.pool.ntp.org iburst

Juste après cette ligne, ajoute le GPS et le PPS

# GPS
refclock SHM 0 poll 4 refid GPS noselect

# PPS
refclock PPS /dev/pps0 refid PPS poll 4 lock GPS

Explication des paramètres

  • refclock horloge de référence. Pour le GPS, segment de mémoire partagée (SHM = SHared Memory) et pour le PPS, périphérique /dev/pps0
     
  • poll intervalle de polling (interrogation) de l'horloge. Définit toutes les combien de secondes on interroge l'horloge. Ce sont des puissances de 2. Une valeur de 4 signifie interroger l'horloge toutes les 24 secondes soit 16 secondes. Une valeur de 5, interroger l'horloge toutes les 25 = 32 secondes et ainsi de suite.
     
  • refid nom que tu choisis de donner à la source de temps. Ici j'ai appelé les sources GPS et PPS.
     
  • noselect (GPS uniquement) ne pas utiliser cette horloge pour la synchronisation. En fait on l'utilise pour avoir l'heure mais de façon imprécise. La précision est apportée par le PPS.
     
  • lock (PPS uniquement) nom du refid de l'horloge sur laquelle on verrouille la source de temps. Le PPS étant juste un top horaire, on a besoin d'une autre source pour savoir l'heure qu'il est.

 

Par défaut, le serveur chrony n'autorise aucune connexion, il faut les autoriser en ajoutant le paramètre allow.

Autoriser les connexions en provenance de n'importe quelle adresse

allow all

Autoriser uniquement les connexions en provenance du réseau local 192.168.1.0/24

allow 192.168.1.0/24

 

Redémarre chrony pour appliquer les modifications

systemctl restart chrony

À partir d'ici, ton serveur NTP est maintenant opérationnel.

Pour afficher l'état de la synchronisation, tu peux utiliser cette commande. Il faut cependant attendre quelques minutes que l'horloge se synchronise et d'ici une dizaine de minutes, tu devrait atteindre la précision maximale.

watch -n1 chronyc sources\; echo \; chronyc sourcestats \; echo \; chronyc tracking
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
#? GPS                           0   4   377    20   +132ms[ +132ms] +/-  491us
#* PPS                           0   4   377    20   +612ns[-1468ns] +/- 5000ns

Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
GPS                        29  16   447     -3.833      4.836   +133ms   988us
PPS                         6   4    77     -0.010      0.171   -109ns  1281ns

Reference ID    : 50505300 (PPS)
Stratum         : 1
Ref time (UTC)  : Mon Feb 13 17:35:12 2023
System time     : 0.000000000 seconds fast of NTP time
Last offset     : -0.000002741 seconds
RMS offset      : 0.000002092 seconds
Frequency       : 52.534 ppm fast
Residual freq   : -0.010 ppm
Skew            : 0.210 ppm
Root delay      : 0.000000001 seconds
Root dispersion : 0.000030353 seconds
Update interval : 16.0 seconds
Leap status     : Normal

Ton serveur est synchronisé lorsque le paramètre Leap status indique Normal, tant que ce paramètre est à Not synchronised, ton serveur NTP n'est pas encore synchronisé et non opérationnel.

À côté du nom de la source, juste après le # tu as le status de la source:

  • * source actuellement utilisée
  • ? source en cours d'acquisition
  • x falseticker: source rejetée à cause de délais ou variations trop importants

Si ta synchronisation est correcte, tu doit avoir comme ici le point d'interrogation en face de “GPS” et l'étoile en face de “PPS”.

Ajustement précis

Tu remarqueras que dans ma situation, l'offset du GPS est toujours de +132ms, c'est dû à la latence du port série. Il est possible de réduire cette valeur en l'indiquant à chrony. Pour avoir un offset correct, attends 5 à 10 min après le démarrage du serveur le temps de le laisser se synchroniser précisément.

Dans la ligne GPS, il faut ajouter l'offset en secondes via le paramètre "offset". 132 ms en secondes, ça fait 0.132 s. La ligne GPS sera donc

# GPS
refclock SHM 0 poll 4 refid GPS noselect offset 0.132

Redémarre chrony pour appliquer les modifications

systemctl restart chrony

Maintenant, l'offset n'est plus que de quelques centaines de millisecondes

Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
GPS                        15   8   112     -4.339     18.091   -324us   494us
PPS                        15   6   112     +0.000      0.007     +0ns   236ns

 

Test ultime

Ton serveur NTP étant maintenant opérationnel, tu peux tester son bon fonctionnement en l'éteignant quelques instants et en le rallumant pour vérifier que tout fonctionne au démarrage. L'horloge devrait se mettre automatiquement à l'heure au bout de quelques minutes.

 

Utilisation du serveur

Maintenant que tu as un serveur NTP fonctionnel, on va pouvoir l'utiliser pour remettre les pendules à l'heure.

Tu peux aussi le rendre disponible à tout le monde sur Internet. Pour cela il faut faire une redirection du port 123 UDP dans ta box internet.

 

Windows

Ouvre la fenêtre "Exécuter" en faisant [WIN] + R
Dans "Ouvrir :" mets timedate.cpl puis [ENTRÉE]

Tu as le panneau de configuration "Date et heure" qui s'ouvre, va dans l'onglet "Temps internet" puis bouton "Modifier les paramètres".
Dans le champ "Serveur:" mets l'adresse de ton serveur NTP puis clic sur "Mettre à jour". Tu devrais voir juste en dessous "L'horloge a été synchronisée avec <ADRESSE_DU_SERVEUR> le <DATE_HEURE>".
En cas d'échec, recommence car des fois windows est capricieux. Si ça ne fonctionne toujours pas, vérifie ton serveur NTP.

 

Linux

Il suffit d'ajouter l'adresse de ton serveur NTP dans le fichier de configuration de ton client NTP. En général ntpd ou chrony.

 

Android

Il n'est pas possible de configurer le serveur NTP utilisé sans aller bidouiller ou rooter l'appareil. C'est une limitation imposée par Google depuis le début. Il existe cependant des applis qui peuvent récupérer l'heure à partir d'un serveur NTP mais sans pouvoir synchroniser l'appareil; la synchronisation via une appli NTP est uniquement possible sur un appareil rooté.

 

IOS

N'utilisant pas ce système, c'est probablement le même problème que pour Android.

 

Routeurs, caméras IP et autres périphériques réseau

Si ton matériel a une option de synchronisation NTP, indique simplement l'adresse de ton serveur NTP.

 

Le serveur NTP de Jesus Forain

Si tu veux, tu peux utiliser mon serveur NTP de strate 1 dont l'adresse est ntp.jesus-forain.fr. Il utilise un Raspberry Pi 2 avec un récepteur GPS; il est disponible en IPv4 et en IPv6.


Bonus: envoyer des commandes au GPS

Pour ton serveur NTP, ceci ne sera pas utile puisque ton GPS a déjà la bonne configuration mais ça peut être utile si tu utilises ton GPS pour d'autres projets ou simplement par curiosité. Tu peux aussi obtenir des informations sur le récepteur GPS comme la version du firmware. Ces paramètres sont perdus à la mise hors tension du GPS.

Le GPS envoie ses données sur le port série mais il peut également recevoir des commandes.

Tu trouveras une liste détaillé des commandes ici. Ceci est uniquement pour les GPS Ublox.

Il se peut qu'à l'exécution de ces commandes ça te renvoie cette erreur

ubxtool: failed to import gps, check PYTHONPATH

C'est qu'il te manque une bibliothèque Python qu'il faudra installer

apt install python3-gps

 

Reset du GPS

Remets le GPS à zéro

ubxtool -p RESET

 

Passer en mode binaire

ubxtool -e BINARY
ubxtool -d NMEA

On désactive le format NMEA et active le format binaire
-e enable (activer)
-d disable (désactiver)

 

Passer en mode NMEA

On fait l'inverse que précédemment. Si tu exécute gpsmon, tu remarqueras que l'affichage est différent.

ubxtool -d BINARY
ubxtool -e NMEA

 

Forcer un démarrage à froid (COLDBOOT)

Efface toutes les données des satellites en mémoire. Le GPS reviens à un état non synchronisé où il devra chercher les satellites comme lors de la première mise sous tension.

unxtool -p COLDBOOT

 

Changer la fréquence de rafraichissement

Par défaut, les données GPS sont envoyés toutes les secondes; si le récepteur GPS a un taux d'actualisation de 10Hz, il est possible de les envoyer jusqu'à 10 fois par seconde.

La fréquence d'actualisation est en millisecondes (1000ms = 1s).

Actualiser toutes les secondes (comportement par défaut)

ubxtool -p CFG-RATE,1000

Actualiser 10 fois par seconde soit toutes les 100ms

ubxtool -p CFG-RATE,100

Lance gpsmon et tu verras que ça défile beaucoup plus vite.

 

Changer la vitesse du port série

Par exemple 115200 bps

ubxtool -s 115200

Il faudra modifier le fichier de configuration de gpsd /etc/default/gpsd en ajoutant le paramètre -s 115200 dans GPSD_OPTIONS et redémarrer gpsd.

partager sur Facebook
COMMENTAIRES
fab (non inscrit)
jeudi 11 janvier 2024 23:02

Excellent ! Merci pour ce tuto très clair . Exactement ce que je cherchais. Ca donne envie de se lancer !! 

Fred (non inscrit)
mercredi 17 avril 2024 17:08

Bonjour, tuto très clair est précis ! Le module GPS marche parfaitement suite aux indications de mises en œuvre.

Merci beaucoup !

__invité__
mardi 1 octobre 2024 20:18

Super intéressant, merci !

Envoyer un commentaire
chargement de l'éditeur en cours...
Envoi d'images pour les insérer dans le message
Cliquez sur le bouton "insérer l'image" pour l'ajouter à votre message, le fond de l'image passe en vert indiquant qu'elle est ajoutée. Les images non insérés sont supprimées.

Envoi de fichiers pour les télécharger

Attention! vous n'êtes pas connecté, vous postez en mode invité.