Zeitsynchronisation unter Linux mit DCF77 Funkuhr-Modul und ntpd

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Linux Systeme können über das Network Time Protocol (NTP) und den NTP-Dienst ntpd Zeitinformationen über das Internet beziehen und damit die lokale Systemzeit laufend aktuell halten. Hat ein System keinen Netzwerkzugriff, kann eine PC-Funkuhr mit USB-Schnittstelle zur Zeitsynchronisation verwendet werden. In diesem Artikel zeigen wir die Konfiguration einer solchen Funkuhr am Beispiel der Expert Mouse Clock USB II 0107 unter Ubuntu 16.04 mit Linux Kernel 4.4 auf einem LES v3.

Hardware Installation und Ausrichtung der Antenne

PC-Funkuhr Expert Mouse Clock USB II 0107

Das Funkuhr-Modul wird direkt mit einem USB-Port des Linux Systems verbunden. Sobald das Modul Strom über die USB Schnittstelle erhält, beginnt es unabhängig vom Rechner die Bits des DCF77 Funksignals[1] auf Langwelle abzuholen (77,5 kHz).

Für einen bestmöglichen Empfang sind folgende Dinge zu beachten:

  • Elektrosmog wie nahestehende Netzteile/Röhrenmonitore/Elektromotoren, aber auch andere elektrische Geräte oder Metallplatten stören das Funk-/Langwellen Signal teilweise erheblich. Das Funkuhr-Modul sollte daher nicht in der Nähe solcher Geräte sein.
  • Die räumliche Ausrichtung des Moduls zum Sender ist sehr wichtig. Das Modul empfängt über die eingebaute Ferritantenne langwellige Signale von der Sendeanlage Mainflingen.[2] Eine horizontale und rechtwinklige Ausrichtung zum Senderort sehr empfehlenswert.[3] Damit wird am Modul die bestmögliche Signalstärke erreicht.
  • Status des Betriebs-LED: Blinkt das Betriebs-LED auf dem Modul unregelmäßig schnell, ist die Funkverbindung gestört. In diesem Fall ist keine Zeitsynchronisation möglich. Im ordnungsgemäßen Betrieb blinkt die LED langsam im Sekundentakt abwechselnd rot und grün.

Zeitserver NTP Daemon einrichten

Der ntp Daemon unterstützt zahlreiche Funkuhr-Module, darunter auch das im Test eingesetzte Expert Mouse Clock USB II 0107 Modul.

Der NTP Deamon wird unter Ubuntu via apt installiert:

sudo apt install ntp

Damit das Modul vom NTP Deamon angesprochen wird, muss die Konfigurationsdatei /etc/ntp.conf folgendermaßen angepasst werden (z.B. via nano /etc/ntp.conf):

driftfile /var/lib/ntp/ntp.drift
server 127.127.8.0 mode 19 prefer
logfile /var/log/ntp
logconfig =all

Bei der vermeintliche Netzwerkadresse 127.127.8.0 handelt sich nicht um eine IP-Adresse, sondern um eine hinterlegte PseudoIP. Der erste Teil "127.127.8" verweist auf den generischen Referenztreiber.[4] Der hintere Teil ".0" bezieht sich auf das Gerät, unter der das Funkuhr-Modul angesprochen wird (/dev/refclock-0).

Udev Regel einrichten

Um für das Funkuhr-Modul beim Systemstart die Gerätedatei /dev/refclock-0 automatisch zu erstellen, ist eine udev Regel erforderlich. Zum Einrichten der Regel ist die USB ProductID erforderlich, die mittels lsub abgefragt werden kann:

tk@testsystem:~$ lsusb
[...]
Bus 001 Device 004: ID 0403:e88a Future Technology Devices International, Ltd Expert mouseCLOCK USB II
[...]
tk@testsystem:~$ 

Nun kann im im Ordner /etc/udev/rules.d/ die entsprechende Regel (z.B. via sudo nano /etc/udev/rules.d/05-DCF77.rules) mit folgendem Inhalt angelegt werden:

KERNEL=="ttyUSB*", ATTRS{idProduct}=="e88a", SYMLINK+="refclock-0"

Dadurch wird für das USB Gerät mit der ProductID e88a ein symbolischer Link /dev/refclock-0 erstellt.

Durch das Aufrufen von sudo udevadm trigger ist der Link dann vorhanden:

$ ls /dev/r*
/dev/random  /dev/refclock-0  /dev/rfkill  /dev/rtc  /dev/rtc0

AppArmor konfigurieren

AppArmor Konfiguration

Damit der NTP Daemon auf die /dev/refclock-0 gebundene serielle USB TTY Schnittstelle zugreifen darf, muss AppArmor entsprechend konfiguriert werden.

Mittels sudo nano /etc/apparmor.d/tunables/ntpd ist folgender Eintrag zu setzen (andere Devices sind auzukommentieren):

@{NTPD_DEVICE}="/dev/ttyUSB*"

Anschließend empfiehlt es sich, einen Reboot des Systems durchzuführen, um die korrekte Funktionsweise nach einem Neustart zu überprüfen.

Überprüfung der Funktion des DCF77 Moduls

Mit folgendem Kommando kann die Funktion des Moduls überprüft werden:

ntpq -c cv -c rv

Beispielausgabe nach kurzer Laufzeit:

associd=0 status=0020 2 events, clk_unspec,
device="RAW DCF77 CODE (Expert mouseCLOCK USB v2.0)",
timecode="---#-#-#-#####---D--S12--1--P1----2p1--8-2-241--8----81---P",
poll=4, noreply=0, badformat=1, baddata=0, fudgetime1=425.000, stratum=0,
refid=DCFa, flags=0,
refclock_time="df5a4d5e.00000000  Sat, Sep 29 2018 19:13:34.000",
refclock_status="DST; TIME CODE; (LEAP INDICATION; CALLBIT)",
refclock_format="RAW DCF77 Timecode",
refclock_states="*NOMINAL: 00:01:35 (42.98%); BAD FORMAT: 00:02:06 (57.01%); running time: 00:03:41"
associd=0 status=c218 leap_alarm, sync_lf_radio, 1 event, no_sys_peer,
version="ntpd 4.2.8p4@1.3265-o Fri Jul  6 20:10:51 UTC 2018 (1)",
processor="x86_64", system="Linux/4.4.0-135-generic", leap=11, stratum=1,
precision=-22, rootdelay=0.000, rootdisp=453.861, refid=DCFa,
reftime=df5a4d41.5497ee34  Sat, Sep 29 2018 21:13:05.330,
clock=df5a4d5f.07b18724  Sat, Sep 29 2018 21:13:35.030, peer=11255, tc=6,
mintc=3, offset=0.000000, frequency=0.000, sys_jitter=8.319076,
clk_jitter=5.563, clk_wander=0.000

Im obigen Beispiel braucht das Modul in schlechter Empfangslage mehrere Minuten um eine vollständige Zeitsynchronisation durchführen zu können. Erkennbar ist die schlechte Empfangslage in folgender Zeile:

refclock_states="*NOMINAL: 00:01:35 (42.98%); BAD FORMAT: 00:02:06 (57.01%); running time: 00:03:41"

Der folgende Screenshot zeigt die Ausgabe mit optimaler Ausrichtung der integrierten Ferritantenne (NOMINAL 99,32%, BAD 0,67% bei ca. 13 Stunden Laufzeit):

BesterEmpfangV3.jpg

Einzelnachweise

  1. DCF77 (de.wikipedia.org)
  2. Sendeanlagen in Mainflingen (de.wikipedia.org)
  3. Ausbreitung DCF77 Signalt (Datei:Dcf weite.jpg) (de.wikipedia.org)
  4. Generic Reference Driver (doc.ntp.org)


Foto Wilfried Seifert.jpg

Autor: Wilfried Seifert

Wilfried Seifert, tätig in der Abteilung Systems Engineering bei Thomas-Krenn, ist in seinem Arbeitsbereich für die System-/Prototypenentwicklung sowie Softwaredeployment / Rollout zuständig. LPIC 3 zertifiziert, beschäftigt sich u.a. mit Aufbau / Programmierung Embedded Systemen.


Das könnte Sie auch interessieren

AER Multiple Corrected error received 0000:00:1c.4
Predictable Network Interface Names
Rpm und dpkg Kommandos