Un NTP con precisión GPS
Los sistemas GNSS, (GPS) necesitan patrones de tiempo muy exactos por lo que usan relojes atómicos. Así que si disponemos de un receptor de GNSS activo en nuestro sistema parece bastante lógico usarlo para sincronizar un servidor de tiempos
No debemos confundir el protocolo NTP (Network Time Service) con el servidor ntp para linux que puede ser: ntp, open-tpd o chronyd (Este último es el mas reciente).
Además debe familiarizarse don PPS (Pulse-Per-Second) y PTP ( Precision Time Protocol ).
El comando de dragonOS/ubuntu timedatectl nos dice el dia de la semana, fecha, hora y si hay algun servidor NTP activo en el sistema
Partiendo de nuestra instalación que tenemos funcionando Xiaomi A2 + NMEA over network & Raspberry Pi 3 B + dragonOS (ubuntu) + gspd vamos a arrancar un NTP e intentar que reciba los datos gps de gpsd
chrony
Se ha elegido como primera opcion chrony por ser el desarrollo más moderno de un programa NTP
- sudo apt update (OK)
- sudo apt upgrade (OK)
- sudo apt install chrony (chrony es una implementación flexible del protocolo NTP. chronyc – interfaz de línea de comandos para chrony, chronyd – es el daemon que puede iniciarse en el momento del arranque del host)
- sudo apt install pps-tools gpsd-clients para pruebas
- Verificar que la versión de gspd es al menos la 3.22. Para ello teclear en un terminal (gspd -V)
- Conectar el dispositivo gps (En nuestro caso arrancar NMEA Over Network en el teléfono móvil y comprobarlo con gpsdmon; si no va reinicie ambos dispositivos)
- sudo systemctl start chrony.service => arranca el servicio
- sudo systemctl stop chrony.service => para el servicio
- sudo systemctl restart chrony.service => rearranca el servicio
- sudo systemctl status chrony.service => muestra los errores del arranque
- systemctl is-active chronyc => active si está activo o inactive si está inactivo
- chronyc tracking Para comprobar que funciona chronyc, indica el servidor NTC, el tiempo del mismo, la diferencia con el tiempo local
- chronyc sources => Las dos primeras columnas indican M ( ^ servidor, = peer y # local) y S ( “*” sincroniza “+” se acepta para combinar “-” se rechaza apra combinar, “?” conexión perdida) y la tercera indica el nombre/IP de las fuentes o servidores NTP de los que recibe el tiempo. así en nuestro caso debe de ser "#* GPS"
- chronyc sourcestats
- sudo chronyc makestep fuerza la sincronización
Recuerde que Chrony siempre debe arrancar antes que gpsd, por lo que si rearranca chronny debe a continuación hacerlo con gpsd.
Por algún motivo chronyd funciona recupera la informacion del pool de servidores NTP, etc. no es capaz de recuperar la información de gpsd, pese ha que se han probado multiples configuraciones del parametros como SOCK y cp,p PPS SHM1 que se definen en /etc/chrony/chrony.conf las ultimas aquí:
refclock SOCK /var/run/gspd.sock delay 0.0. refid PPS
refclock SHM1 offset 0.0 delay 0.1. refid PPS
NTP
Despues de no conseguir que chrony cumpliera con las expectativas puestas en él para este proyecto pasamos a probar con NTP
- sudo apt update (OK)
- sudo apt upgrade (OK)
- sudo apt install ntp
- Modificar el fichero de configuracion /etc/ntp.conf incluyendo las siguientes líneas
# GPS Serial data reference (NTP0)server 127.127.28.0fudge 127.127.28.0 time1 0.9999 refid GPS# GPS PPS reference (NTP1)server 127.127.28.1 preferfudge 127.127.28.1 refid PPS
- sudo systemctl start ntp.service => arranca el servicio
- sudo systemctl stop ntp.service => para el servicio
- sudo systemctl restart ntp.service => rearranca el servicio
- sudo systemctl status ntp.service => muestra el log de arranque y por tanto los errores del arranque si los hubiera
- systemctl is-active ntp => responde active si está activo o inactive si está inactivo
- sudo ntpshmmon => nos indica si gpsd está enviando por memoria SHM los datos , se sale con CTRL-C
- ntpq -p => muestra los servidores NTP de los cuales recibe datos
- ntptime => da informacion de los errores del reloj etc.
- ntptrace => muestra la sincronización en tiempo real del reloj
- ntpdate <nombre servidor> => para una sincronizacion en el momento
- sudo ntpdate 0.ubuntu.poolntp.org
- sudo date --set "YYYY-MM-DD HH:MM:SS" por si necesita poner la fecha y la hora a mano
- timedatectl set-time HH:MM:SS por si necesita poner la hora a mano
- timedatectl set-timezone Europe/Madrid por si necesita poner la zona horaria a mano
- date => comando proporciona la hora del sistema
- date -u => comando proporciona la hora del sistema en tiempo universal UTC
- timedatectl o timedatectl status o timedatectl show=> nos dice si el reloj del sistema está sincronizado con NTP "system clock synchronized= yes/no" y "NTP service= n/a"
- ntpstat => nos indica que se comunica con el servidor de tiempo, si no está en el sietma se puede instalar como siempre sudo apt install ntpstat
ntpstat nos indica que el servidor NTP se ha sincronizado con la señal GPS que le ha suministrado GPSD "Synchronised to UHF radio at stratum 1" |
El Stratum 1 indica que obtiene la señal de un GPS o reloj atómico STratum 0, frente a los servidores de tiempo que son stratum 2 y 3 |
Seguramente se ha fijado que en los ficheros de configuración de los servidores NTP en lugar de servidores concretos, o ademas de estos aparecen otros del tipo "pool 0.ubuntu.pool.ntp.org" que realmente invocan al pool de NTP que en la actualidad engloba a cerca de 5.000 servidores lo que asegura una alta disponibilidad a fallos y ataques. Auneuq disponer de un NTP propio como el qu hemos configurado es la opción mas razonable en tiempos revueltos.
RESUMEN
Hemos conseguido que nuestro ordenador (Raspberry pi model 3B con dragonOS) tenga el tiempo sincronizados con los relojes atómicos de los sistemas GNSS (GPS), es decir la mejor calidad posible (Stratum 0) cuyas señales estamos recibiendo en un teléfono móvil (Xiaomi Mi A2 Androd 9) que envia a través de la Wi-Fi (mediante mensajes UDP con formato NMEA) al proceso GPSD que le pasa la información al NTP (Seguramente con Chrony también se podrá pero no hemos sabido hacerlo).
Para leer mas
- SDR sobre Raspberry
- DragonOS: Introducción
- DragonOS: Instalación y funcionamiento
- GPSD: un demonio GPS
Referencias
Prohibida la reproducción parcial o total de este artículo sin permiso previo del autor
Comentarios
Publicar un comentario