DCF77 - NTP-Server
Kurzanleitung
Ausführliche Beschreibung siehe: RaspberryPi als NTP-ServerBluetooth deaktivieren
sudo vi /boot/config.txt
Code einfügen:
dtoverlay=disable-bt
RPI neu starten: sudo rebootUART-Konfiguration prüfen
ls -gG /dev/serial?
lrwxrwxrwx 1 7 Apr 25 22:34 /dev/serial0 -> ttyAMA0
lrwxrwxrwx 1 5 Apr 25 22:34 /dev/serial1 -> ttyS0
lrwxrwxrwx 1 5 Apr 25 22:34 /dev/serial1 -> ttyS0
primären UART deaktivieren
sudo vi /boot/cmdline.txt
Durchgestrichenen Text entfernen:
console=tty1 console=serial0,115200 root=PARTUUID=System-UUID rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Anschluss
Den mitgelieferten Kondensator nicht verwenden.
Der PullUp-Widerstand soll nicht größer sein als 3,3 kOhm.
NTP-Server installieren
sudo apt-get install ntp
NTP-Initialisierung
sudo vi /usr/lib/ntp/ntp-systemd-wrapper
Blauen Code einfügen:
...
NTPD_OPTS="$NTPD_OPTS -c /run/ntp.conf.dhcp"
fi
if [ ! -L /dev/refclock-0 ]; then
ln -s /dev/ttyAMA0 /dev/refclock-0
fi
RUNASUSER=ntp
...
NTPD_OPTS="$NTPD_OPTS -c /run/ntp.conf.dhcp"
fi
if [ ! -L /dev/refclock-0 ]; then
ln -s /dev/ttyAMA0 /dev/refclock-0
fi
RUNASUSER=ntp
...
Systemd-Dienst aktivieren
sudo systemctl enable ntp.service
sudo systemctl status ntp.service
sudo systemctl status ntp.service
NTP-Daemon konfigurieren
sudo vi /etc/ntp.conf
Gesamten bestehenden Code durch folgenden ersetzen:
server 127.127.8.0 mode 5
# --- statischer Zeitversatz
# fudge 127.127.8.0 time1
# --- nur zur Kalibrierung
# server ptbtime1.ptb.de noselect
# server ptbtime2.ptb.de noselect
# server ptbtime3.ptb.de noselect
logconfig =all
driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
restrict -4 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
# --- statischer Zeitversatz
# fudge 127.127.8.0 time1
# --- nur zur Kalibrierung
# server ptbtime1.ptb.de noselect
# server ptbtime2.ptb.de noselect
# server ptbtime3.ptb.de noselect
logconfig =all
driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
restrict -4 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
Dienst prüfen
Systemmeldungen des NTP-Daemons.
watch -n 1 systemctl status ntp.service
NTP-Service starten
sudo systemctl restart ntp.service
Interne Parameter des NTP-Daemons mit Hinweisen über den Zustand.
watch -n 1 ntpq -c as -c cv -c rv localhost
stratum = Schicht des NTP-Servers unter Zeitnormal (Stratum 0 ist z.B. Atomuhr).
Kalibrieren
Mit Internet verbinden.
Die drei Zeitserver server ptbtime... in der Konfigurationsdatei (sudo vi /etc/ntp.conf) aktivieren und dann den NTP-Daemon neu starten. sudo systemctl restart ntp.service
Der Zeitversatz zwischen der lokalen Uhr und den drei Zeitservern wird protokolliert.
Mindestens 24h laufen lassen.
Messwerte extrahieren: cat /var/log/ntpstats/peerstats.JJJJMMTT.gz | gunzip | grep 192.52.103 | awk '{ print $5}' > timeoffset
Mittelwert bilden
Zum Ergebnis (in Sekunden) noch den bisher angenommenen Zeitversatz von 0,292 Sekunden hinzuzählen.
Diesen Wert in die Konfigurationsdatei (sudo vi /etc/ntp.conf) bei fudge eintragen und eben diesen Parameter aktivieren.
Die drei Zeitserver server ptbtime... wieder deaktivieren.
Internetverbindung kann wieder entfernt werden.
NTP-Daemon neu starten. sudo systemctl restart ntp.service
Tools
Zeit von NTP-Server abfragen:
ntpdate -q at.pool.ntp.org
Links
NTP ServerWikipedia - DCF77
Wikipedia - NTP
dcf77logs.de
Mein verwendetes Empfangsmodul von ELV
RaspberryPi als NTP-Server mit DCF77-Modul
DCF77 Sendeanlage auf Google-Maps