DCF77 Uhr unter Jessie

  • Einleitung
    (Zurück zum Inhaltsverzeichnis)
    Anlaß war dieser Artikel in der Raspberry Geek
    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

    Code
    1. sudo raspi-config
    2. 5 Interfacing Options
    3. P6 Serial Nein


    Dann die UART wieder einschalten:

    Code
    1. sudo vi /boot/config.txt


    Am Ende einfügen (oder ändern):

    Code
    1. enable_uart=1


    NTP installieren

    Code
    1. sudo apt install ntp ntpdate


    Code
    1. sudo adduser ntp tty


    Und dann muss noch das Startscript geändert werden:

    Code
    1. sudo vi /etc/init.d/ntp


    Diese Zeilen auskommentieren:

    Code
    1. #if [ -e /var/lib/ntp/ntp.conf.dhcp ]; then
    2. # NTPD_OPTS="$NTPD_OPTS -c /var/lib/ntp/ntp.conf.dhcp"
    3. #fi


    Dafür diese Zeilen einfügen:

    Code
    1. if [ ! -L /dev/refclock-0 ]; then
    2. ln -s /dev/ttyAMA0 /dev/refclock-0
    3. fi


    Kommen wir zur Konfigurationsdatei vom NTP

    Code
    1. sudo vi /etc/ntp.conf


    Die Raute vor

    Code
    1. statsdir /var/log/ntpstats/

    entfernen.
    Alle Server so auskommentieren:

    Code
    1. #server 0.debian.pool.ntp.org iburst
    2. #server 1.debian.pool.ntp.org iburst
    3. #server 2.debian.pool.ntp.org iburst
    4. #server 3.debian.pool.ntp.org iburst


    und durch folgende Einträge ersetzen:

    Code
    1. # DCF77 Pollin
    2. server 127.127.8.0 mode 5 minpoll 6 maxpoll 6 iburst prefer
    3. fudge 127.127.8.0 refid DCF
    4. 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:

    Code
    1. tail -f -n 100 /var/log/syslog | grep ntpd


    folgendes 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:

    Code
    1. watch -n 1 ntpq -c as -c cv -c rv -p 127.0.0.1


    Heraus kommt dann so etwas:


    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:

    Code
    1. server ptbtime1.ptb.de noselect
    2. server ptbtime2.ptb.de noselect
    3. server ptbtime3.ptb.de noselect


    In der Datei:

    Code
    1. /var/log/ntpstats/peerstats


    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.

    Code
    1. echo "This script will calculate the mean offset if you provided some noselect ntp-servers in your ntp.conf"
    2. echo "If you did not provide any noselect ntp servers, this script will fail. It will also fail if those servers are not reachable."
    3. echo
    4. echo "Your current fudge time is:"
    5. ntpq -c cv | grep fudgetime1 | cut -d" " -f 5
    6. echo
    7. echo "The mean offset (compared to the 'noselect' ntp-servers in your ntp.conf) is:"
    8. cat /var/log/ntpstats/peerstats | grep -v 127.127.8 | cut -d" " -f 5 | awk '{a+=$1} END{print a/NR " " NR}'
    9. echo
    10. echo "Add up those values, divide them by 1000, and add this line to your ntp.conf:"


    Aurufen kann man es mit:

    Code
    1. sh NTP-Fudgetime.sh


    Dann sollte in etwa so ein Ergebnis herauskommen:

    Code
    1. This script will calculate the mean offset if you provided some noselect ntp-servers in your ntp.conf
    2. If you did not provide any noselect ntp servers, this script will fail. It will also fail if those servers are not reachable.
    3. Your current fudge time is:
    4. fudgetime1=292.000,
    5. The mean offset (compared to the 'noselect' ntp-servers in your ntp.conf) is:
    6. 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:

    Code
    1. fudge 127.127.8.0 time1 0.732746 refid DCF


    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

    Jahrelang wurde gesagt: Das geht nicht, das gibt es nicht und das war schon immer so.
    Und dann kam einer, der wußte das nicht, und hat es dann einfach gemaccht.

    Meine Projekte

    Avatar


    Edited 3 times, last by Jürgen Böhm ().