DCF77 Uhr unter Jessie

L I V E Stammtisch ab 20:30 Uhr im Chat
  • 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

    Code
    sudo raspi-config
     5 Interfacing Options
     P6 Serial Nein


    Dann die UART wieder einschalten:

    Code
    sudo vi /boot/config.txt


    Am Ende einfügen (oder ändern):

    Code
    enable_uart=1


    NTP installieren

    Code
    sudo apt install ntp ntpdate
    Code
    sudo adduser ntp tty


    Und dann muss noch das Startscript geändert werden:

    Code
    sudo vi /etc/init.d/ntp


    Diese Zeilen auskommentieren:

    Code
    #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:

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


    Kommen wir zur Konfigurationsdatei vom NTP

    Code
    sudo vi /etc/ntp.conf


    Die Raute vor

    Code
    statsdir /var/log/ntpstats/

    entfernen.
    Alle Server so auskommentieren:

    Code
    #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:

    Code
    # 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:

    Code
    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
    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
    server ptbtime1.ptb.de noselect
    server ptbtime2.ptb.de noselect
    server ptbtime3.ptb.de noselect


    In der Datei:

    Code
    /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
    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:

    Code
    sh NTP-Fudgetime.sh


    Dann sollte in etwa so ein Ergebnis herauskommen:

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

    Code
    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, Link korrigiert.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!