Zeitsynchronisation Mit DCF-77 Empfänger
Die Zeit kann über einen DCF-77 Empfänger von der Atomuhr aus Meinberg bei Frankfurt geholt werden.
Der Empfänger selbst kann entweder fertig gekauft oder mit Elektronikteilen von Conrad selbst gebaut werden.
Mein Gebauter Empfänger hat zwei LEDs. Die rote zeigt an dass die Stromversorgung, über USB, da ist.
Die Grüne LED blinkt im Sekundentakt wenn ein Signal der Atomuhr vorhanden ist.
Conrad Stückliste
PC-Funkuhrmodul Teileliste mit Conrad-Artikelnr.
Anzahl | Beschreibung | Artikel-Nr | Preis/Stck | Preis ges. |
---|---|---|---|---|
1 | DCF77-Modul von Conrad-Elektronik | 641138 | 10,21 | 10,21 |
1 | RS-232 Buchse, Sub-D 9-polig | 742082-62 | 0,52 | 0,52 |
1 | passende Haube dazu | 716028-62 | 1,25 | 1,25 |
1 | IC MAX232 | 152295-62 | 1,47 | 1,47 |
2 | Dioden 1N4148 | 162280-62 | 0,04 | 0,08 |
1 | Z-Diode 5,1 Volt | 160276-62 | 0,3 | 0,3 |
1 | LEDs Low Current (2mA) rot | 146005-62 | 0,19 | 0,19 |
1 | LEDs Low Current (2mA) grün | 146030-62 | 0,19 | 0,19 |
1 | Widerstand 1 kΩ | 405256-62 | 0,09 | 0,09 |
2 | Widerstände 4,7 kΩ | 405337-62 | 0,09 | 0,18 |
5 | Kondensatoren Tantal (Elkos gehen auch) 10 μF / 35V | 472484-62 | 0,18 | 0,9 |
1 | Elektrolytkondensator 100 μF / 35V | 472514-62 | 0,21 | 0,21 |
1 | Folienkondensator 100nF | 459977-62 | 0,45 | 0,45 |
1 | Lochrasterplatine | 528404-62 | 0,63 | 0,63 |
1 | Gehäuse | 520521-62 | 2,71 | 2,71 |
Gesamt Preise | 18,53 | 19,38 |
Schaltung
Software
Unter Linux kann mit dem NTP Daemon die Zeit des Funkuhrmoduls empfangen und konvertiert werden.
NTP
Folgende Softwarepakete müssen installiert werden:
apt-get install ntp ntpdate refclock
In der /etc/ntp.conf
dann noch die folgenden Zeilen anpassen:
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp.log # Enable this if you want statistics to be logged. 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 # You do need to talk to an NTP server or two (or three). #server ntp.ubuntu.com server 127.127.8.0 mode 5 prefer server 127.127.1.0 fudge 127.127.1.0 stratum 10 # Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for # details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions> # might also be helpful. # # Note that "restrict" applies to both servers and clients, so a configuration # that might be intended to block requests from certain clients could also end # up blocking replies from your own upstream servers. # By default, exchange time with everybody, but don't allow configuration. restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery # Local users may interrogate the ntp server more closely. restrict 127.0.0.1 restrict ::1 # Clients from this (example!) subnet have unlimited access, but only if # cryptographically authenticated. #restrict 192.168.123.0 mask 255.255.255.0 notrust # If you want to provide time to your local subnet, change the next line. # (Again, the address is an example only.) #broadcast 192.168.123.255 # If you want to listen to time broadcasts on your local subnet, de-comment the # next lines. Please do this only if you trust everybody on the network! #disable auth #broadcastclient
Udev Rules
Damit der Eintrag server 127.127.8.0 mode 5 prefer
auch funktioniert, muss ein Link auf /dev/ttyS0
(COM-Port 1) gesetzt werden.
ln -s /dev/ttyS0 /dev/refclock-0
Dieser Link sollte auch nach einem Reboot noch da sein. Dies ist er aber nicht wenn wir nicht die UDEV-Rules bearbeiten:
Also die Datei (evtl. noch nicht vorhanden) /etc/udev/ruldes.d/75-refclock.rules
öffnen und folgende Zeile einfügen:
KERNEL=="ttyS0",SYMLINK+="refclock-0",MODE="0777"
Apparmor
Zitat Wikipedia
AppArmor (Application Armor, auf deutsch etwa Programm-Schutz/Rüstung) ist eine freie Sicherheitssoftware für Linux, mit der Programmen einzeln bestimmte Rechte zugeteilt oder entzogen werden können. Es ist eine Erweiterung für Linux, die Mandatory Access Control (MAC) implementiert.
Damit AppArmor nun den Zugriff auf refclock-0
also auf ttyS0
nicht blockiert, obwohl in den UDEV-Rules steht MODE=„0777“
, muss
dass Profil des AppArmor für den NTP-Daemon angepasst werden.
Dafür fügt man am Ende (vor der geschweiften Klammer) in die Datei /etc/apparmor.d/usr.sbin.ntpd
folgendes hinzu:
/dev/ttyS0 rwl, /dev/refclock-0 rwl,
Test
Nun kann der NTP-Daemon mit dem Befehl service ntp restart
neugestartet werden.
Unter /var/log
findet man den Statistikordner ntpstats
und die Datei ntp.log
.
Im Verzeichniss /var/lib/ntp/
findet man die Datei ntp.drift
.
NTP-Stats
Im Statistikverzeichniss befinden sich die loop
und peer
Statistiken
NTP-Drift
Im Libverzeichniss kann man mit der Driftdatei schauen wie die lokale Zeit vom Empfängermodul abdriftet.
NTP-Log
Im Logverzeichniss sieht man in der Logdatei was der NTP-Daemon gemacht hat.
Hier eine Ausgabe:
11 May 09:24:00 ntpd[2162]: ntpd exiting on signal 15 11 May 09:24:55 ntpd[2297]: parse: convert_rawdcf: INCOMPLETE DATA - time code only has 51 bits 11 May 09:24:55 ntpd[2297]: PARSE receiver #0: interval for following error message class is at least 00:01:00 11 May 09:24:55 ntpd[2297]: PARSE receiver #0: FAILED TIMECODE: "----#----#--#-#R--M-S1--8---P---8--P-2-8------2---" (check receiver configuration / wiring) 11 May 09:25:58 ntpd[2297]: synchronized to GENERIC(0), stratum 0 11 May 09:27:03 ntpd[2297]: time reset +64.490872 s 11 May 09:27:03 ntpd[2297]: kernel time sync status change 2001 11 May 09:27:04 ntpd[2297]: parse: convert_rawdcf: INCOMPLETE DATA - time code only has 4 bits 11 May 09:27:04 ntpd[2297]: PARSE receiver #0: interval for following error message class is at least 00:01:00 11 May 09:27:04 ntpd[2297]: PARSE receiver #0: FAILED TIMECODE: "--#" (check receiver configuration / wiring) 11 May 09:28:00 ntpd[2297]: parse: convert_rawdcf: INCOMPLETE DATA - time code only has 55 bits 11 May 09:29:03 ntpd[2297]: synchronized to GENERIC(0), stratum 0
Man sieht dass in der 1. Zeile der Neustart des Daemon angezeigt wird.
Danach erhält der NTP die Signale des Empfängers.
Das INCOMPLETE DATA
ist soweit ok, denn das Funkuhrmodul bracht ca. 1 Minute bis es die korrekte Zeit liefert.
Zum Schluss sieht man das die Zeit synchronisiert wurde.
Man kann mit dem Befehl date
kontrollieren ob die richtige Zeit im System vorhanden ist.
timesyncd
Quelle: https://wiki.archlinux.org/title/systemd-timesyncd
Timesyncd ist ein anderer Zeitdienst-Daemon unter Linux.
Zeitserver
Der Zeitserver wird in dieser Datei Konfiguriert /etc/systemd/timesyncd.conf
.
[Time] #NTP= ntp1.domain.tld ntp2.domain.tld ... #FallbackNTP=ntp3.domain.tld ntp4.domain.tld ... #RootDistanceMaxSec=5 #PollIntervalMinSec=32 #PollIntervalMaxSec=2048
Gestartet wird Timesync mit dem Befehl systemctl start systemd-timesyncd.service
, oder einfach einschalten per timedatectl set-ntp true
Diese Befehle zeigen die aktuellen Einstellungen und Laufzeitdaten:
timedatectl show-timesync --all timedatectl status ntpq -p timedatectl timesync-status
timedatectl
besitzt aktuell keinen Parameter zum erzwingen der Synchronisierung der Uhrzeit.
Wenn timesyncd lange braucht um sich zu synchronisieren, kann man den NTP-Dienst deaktivieren und erneut aktivieren um dies zu beschleunigen.
timedatectl set-net false timedatectl set-net true
Zeitzone
Die Zeitzone wird mit folgendem Befehl konfiguriert.
timedatectl set-timezone <ZEITZONE>
So listet man verfügbare Zeitzonen auf
timedatectl list-timezones
NTP Commands
ntpq -p ntpq -c rv
LEAP
Quelle: https://www.eecis.udel.edu/~mills/ntp/html/decode.html
Folgende Leap-Codes gibt es.
Code | Message | Description |
---|---|---|
0 | leap_none | normal synchronized state |
1 | leap_add_sec | insert second after 23:59:59 of the current day |
2 | leap_del_sec | delete second 23:59:59 of the current day |
3 | leap_alarm | never synchronized |