Einleitung
(Zurück zum Inhaltsverzeichnis)
Update: 07.08.2021
Anlaß war dieser Artikel in der Raspberry Pi Geek (Dazu ist noch ein Update in der Raspberry Pi Geek erschienen)
und eine der ersten Basteleien mit dem RPi.
Damals noch mit einem der allerersten RPis unter Debian Wheezy und dem Pollin-Empfänger (läuft immer noch).
Mittlerweile gibt es hier noch zwei NTP-Server, diesmal unter Jessie. Einer mit einem GPS-Modul, der andere ebenfalls mittels des Pollin Empfängers.
Der Artikel ist immer noch aktuell, nur unter Jessie ist es "etwas" anders. Deshalb erfolgt hier auch keine Hardwarebeschreibung, bitte den Schaltplan dem Artikel entnehmen.
Serielle Schnittstelle deaktivieren
Dann die UART wieder einschalten:
Am Ende einfügen (oder ändern):
NTP installieren
Und dann muss noch das Startscript geändert werden:
Diese Zeilen auskommentieren:
#if [ -e /var/lib/ntp/ntp.conf.dhcp ]; then
# NTPD_OPTS="$NTPD_OPTS -c /var/lib/ntp/ntp.conf.dhcp"
#fi
Dafür diese Zeilen einfügen:
Kommen wir zur Konfigurationsdatei vom NTP
Die Raute vor
entfernen.
Alle Server so auskommentieren:
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
und durch folgende Einträge ersetzen:
# DCF77 Pollin
server 127.127.8.0 mode 5 minpoll 6 maxpoll 6 iburst prefer
fudge 127.127.8.0 refid DCF
pool de.pool.ntp.org minpoll 6 maxpoll 6
Die Optionen minpoll und maxpoll sollte man im Anfang auf 4 setzen und später auf 6 setzen.
Die Zeile mit dem pool sorgt dafür, das auch NTP-Server aus dem Internet angefragt werden, falls die DCF77-Uhr mal nicht läuft.
Jetzt wäre ein guter Zeitpunkt, den RPi herunterzufahren und den Empfänger anzuschließen.
Sobald der RPi wieder läuft, sollte ein:
folgendes anzeigen:
May 4 08:52:56 raspi02 ntpd[17863]: ntpd 4.2.6p5@1.2349-o Fri May 18 20:30:57 UTC 2012 (1)
May 4 08:52:56 raspi02 ntpd[17864]: proto: precision = 1.000 usec
May 4 08:52:56 raspi02 ntpd[17864]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
May 4 08:52:56 raspi02 ntpd[17864]: Listen normally on 1 lo 127.0.0.1 UDP 123
May 4 08:52:56 raspi02 ntpd[17864]: peers refreshed
May 4 08:52:56 raspi02 ntpd[17864]: Listening on routing socket on fd #21 for interface updates
May 4 08:52:56 raspi02 ntpd[17864]: restrict: error in address '::1' on line 46. Ignoring...
May 4 08:52:56 raspi02 ntpd[17864]: 0.0.0.0 c016 06 restart
May 4 08:52:56 raspi02 ntpd[17864]: 0.0.0.0 c012 02 freq_set kernel -26.124 PPM
May 4 08:53:00 raspi02 ntpd[17864]: parse: convert_rawdcf: INCOMPLETE DATA - time code only has 2 bits
May 4 08:53:00 raspi02 ntpd[17864]: PARSE receiver #0: interval for following error message class is at least 00:01:00
May 4 08:53:00 raspi02 ntpd[17864]: PARSE receiver #0: FAILED TIMECODE: "-#-#--###-##-##--D--S----12-p-24---p--4---124" (check receiver configuration / wiring)
May 4 08:54:00 raspi02 ntpd[17864]: 0.0.0.0 c215 05 clock_sync
Alles anzeigen
In der letzten Zeile steht ein clock_sync, d.h. die Uhr läuft.
Wenn man der Uhr etwas genauer auf die Finger schauen will:
Heraus kommt dann so etwas:
associd=0 status=00f0 , 15 events, clk_unspec,
device="RAW DCF77 CODE (Conrad DCF77 receiver module)",
timecode="--#-###--#-#-----D--S1--81-4p-2---2p12------4---8-124-1---p",
poll=114680, noreply=0, badformat=0, baddata=594, fudgetime1=869.573,
stratum=1, refid=DCF, flags=0,
refclock_time="dd2e0d46.00000000 Thu, Aug 3 2017 20:59:50.000",
refclock_status="DST; TIME CODE; (LEAP INDICATION; ANTENNA)",
refclock_format="RAW DCF77 Timecode",
refclock_states="*NOMINAL: 84d+06:09:20 (99.18%); ILLEGAL DATE: 16:34:05 (0.81%); running time: 84d+22:43:25"
ind assid status conf reach auth condition last_event cnt
===========================================================
1 44042 961b yes yes none sys.peer clock_alarm 1
2 44043 8073 yes no none reject unreachable 7
3 44044 931d yes yes none outlyer 1
4 44045 942d yes yes none candidate 2
5 44046 934d yes yes none outlyer 4
6 44047 9364 yes yes none outlyer reachable 6
7 44048 9434 yes yes none candidate reachable 3
8 44049 9334 yes yes none outlyer reachable 3
associd=0 status=021a leap_none, sync_lf_radio, 1 event, leap_disarmed,
version="ntpd 4.2.6p5@1.2349-o Mon Jul 25 22:35:28 UTC 2016 (1)",
processor="armv7l", system="Linux/4.9.24-v7+", leap=00, stratum=2,
precision=-20, rootdelay=0.000, rootdisp=2.759, refid=GENERIC(0),
reftime=dd2e0d3e.4c998220 Thu, Aug 3 2017 22:59:42.299,
clock=dd2e0d46.e7c772f0 Thu, Aug 3 2017 22:59:50.905, peer=44042, tc=6,
mintc=3, offset=0.596, frequency=-0.836, sys_jitter=0.945,
clk_jitter=0.595, clk_wander=0.030
remote refid st t when poll reach delay offset jitter
==============================================================================
*GENERIC(0) .DCF. 1 l 8 64 377 0.000 0.596 0.945
LOCAL(0) .RTC. 10 l 85d 8 0 0.000 0.000 0.000
-raspi02 GENERIC(0) 2 u 7 16 377 0.626 8.157 0.146
+raspi16 .PPS. 1 u 3 16 377 0.530 6.919 0.143
-maggo.info 124.216.164.14 2 u 66 64 377 15.946 8.544 0.659
-janetzki.eu 131.188.3.220 2 u 46 64 377 11.213 10.272 1.798
+ntp1.m-online.n 212.18.1.106 2 u 43 64 377 15.352 7.878 0.175
-korak.de 40.179.132.91 2 u 61 64 377 11.068 9.534 0.275
Alles anzeigen
Fudgetime korrigieren
Gefunden habe ich diese Beschreibung hier.
Dazu kann man in der /etc/ntp.conf zusätzliche NTP-Server eintragen, der Zusatz 'noselect' bewirkt, das diese Server nur als Referenz benutzt werden:
server ptbtime1.ptb.de noselect
server ptbtime2.ptb.de noselect
server ptbtime3.ptb.de noselect
In der Datei:
werden die Werte trotzdem eingetragen. Ab jetzt sollte man den NTP-Server eine Weile in Ruhe lassen damit genügend Werte zusammenkommen.
Mit Hilfe dieses Scripts werden dann die Werte ausgewertet.
echo "This script will calculate the mean offset if you provided some noselect ntp-servers in your ntp.conf"
echo "If you did not provide any noselect ntp servers, this script will fail. It will also fail if those servers are not reachable."
echo
echo "Your current fudge time is:"
ntpq -c cv | grep fudgetime1 | cut -d" " -f 5
echo
echo "The mean offset (compared to the 'noselect' ntp-servers in your ntp.conf) is:"
cat /var/log/ntpstats/peerstats | grep -v 127.127.8 | cut -d" " -f 5 | awk '{a+=$1} END{print a/NR " " NR}'
echo
echo "Add up those values, divide them by 1000, and add this line to your ntp.conf:"
Aurufen kann man es mit:
Dann sollte in etwa so ein Ergebnis herauskommen:
This script will calculate the mean offset if you provided some noselect ntp-servers in your ntp.conf
If you did not provide any noselect ntp servers, this script will fail. It will also fail if those servers are not reachable.
Your current fudge time is:
fudgetime1=292.000,
The mean offset (compared to the 'noselect' ntp-servers in your ntp.conf) is:
0.440746 118
So wie ich das verstanden habe, steht der Wert 292.000 für 0.292ms, dazu wird der hier ermittelte Wert 0.440746 dazuaddiert
und ergibt dann 0.732746
Das wird dann in der /etc/ntp.conf eingetragen:
Gleichzeitig sollte man die ptbtime*.ptb.de Server wieder auskommentieren, sie sollten wirklich nur zum kalibrieren genutzt werden.
Das wars auf die Schnelle, bei Fehlern bitte ich um Nachsicht und Nachricht hier als Antwort.
Edit: Fiptehler und kleine Korrekturen, Link korrigiert.