Fehlerhafte Zeitsynchronisation mit Hilfe eines GPS-Moduls

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    ich bin Neuling im Bereich Raspberry Pi und Python. Mein erstes Projekt besteht darin eine GPS-Modul mit dem Pi zu verbinden und die Uhrzeit zu synchronisieren.
    Dies funktioniert soweit auch, ich bekomme ein GPS-Signal angezeigt und auch die aktuelle Uhrzeit über NTP am Pi.
    Zu meinem Problem: Ist mein Pi längere Zeit ohne Strom (zum Beispiel über Nacht) synchronisiert sich die Zeit meines Pis nicht mit der GPS-Zeit, obwohl ich vollen GPS-Empfang habe.
    Bei der PPS- und TOFF- Ausgabe bei gpsmon steht beispielsweise < 1day.
    Ich müsste den Pi erst ans Netz nehmen, dass er sich von dort die ungefähre Zeit holt. Ist er dann für eine Stunde ohne Strom und ohne Netz, synchronisiert sich die Uhrzeit des Pi mit Hilfe des GPS-Moduls wieder von alleine.

    Ich freue mich über jeglich Hilfe und vielen Dank schon mal.

    RaspiGirl

  • Fehlerhafte Zeitsynchronisation mit Hilfe eines GPS-Moduls? Schau mal ob du hier fündig wirst!

  • Aus https://wiki.ubuntuusers.de/ntpd/

    unter dem Abschnitt: "Problembehebung"

    <Kopie>

    Eine weitere Problemquelle sind zu große Abweichungen zwischen lokaler und Internet-Zeit. Dann wird zuerst der ntp-Dienst beendet:

    Code
    sudo service ntp stop 

    Nun setzt man die Zeit manuell:

    Code
    sudo ntpd -q -g -x -n 

    Zum Schluss wird der ntp-Dienst wieder gestartet:

    Code
    sudo service ntp start 

    Wer besonders vorsichtig sein möchte startet den Rechner nach dieser Prozedur neu, da der auftretende "Zeitsprung" unvorhersehbare Konsequenzen haben kann.

    </Kopie>

    Ich meine, etwas von 1000 Sekunden gelesen zu haben, habe aber die Info nicht mehr wiedergefunden.
    Bei größeren Abweichungen weigert sich der NTP einfach. Nach dem Einsatz einer RealTimeClock war das Problem aber behoben.

    Am einfachsten wäre es für Dich, wenn Du zusätzlich eine RTC einsetzen würdest:

    I²C RTC - Real Time Clock für den Raspberry Pi

    Vielleicht hat Neueinsteiger ja noch eine Platine übrig.

    Vielleicht ist das auch noch lesenswert:

    https://www.meinberg.de/german/info/ntp.htm

    https://www.eecis.udel.edu/~mills/ntp/html/refclock.html#list

    https://www.satsignal.eu/ntp/Raspberry-Pi-NTP.html

    Das sind meine NTP-Einstellungen

    Und das ist eine Ausgabe, wenn man die oberste Zeile eintippt

    raspi02 und raspi12 sind 2 DCF77-NTP-Server die hier zum Test mitlaufen. Alle Uhren haben eine RTC.

    Ich hatte das Tutorial für GPS schon fertig, aber dann funktionierte ein zusätzliches Schmankerl nicht mehr.

    Daher blieb das erstmal zu Hause (und liegen).

    MfG

    Jürgen

  • Dann wird zuerst der ntp-Dienst beendet:

    Da ich ein Problem mit der Zeitsynchronisierung letztlich hatte, weiß ich, dass auf einem aktuellen Raspbian gar kein ntp(d) mehr installiert ist.

    Code
    pi@raspberrypi:~ $ sudo service ntp status
    Unit ntp.service could not be found.

    Die Synchronisation läuft über (Aufschrei!) systemd-timesyncd.

    Spoiler anzeigen

    pi@raspberrypi:~ $ timedatectl status

    Local time: Mo 2018-10-15 22:52:33 CEST

    Universal time: Mo 2018-10-15 20:52:33 UTC

    RTC time: n/a

    Time zone: Europe/Berlin (CEST, +0200)

    Network time on: yes

    NTP synchronized: yes

    RTC in local TZ: no

    Ist hier ganz gut erklärt.

    Grüße, STF

  • ich bekomme ein GPS-Signal angezeigt und auch die aktuelle Uhrzeit über NTP am Pi.

    Wenn ich das nicht gelesen hätte, hätte ich meine Finger von der Tastatur gelassen. Außerdem:

    Code
    sudo apt install ntp

    funktioniert immer noch.

    Wie will man sonst einen GPS-Empfänger einbinden?

    MfG

    Jürgen

    Der jetzt die Bettkarte stempelt

    Nachtrag: STF Interessanter Link, werde ich mir morgen etwas näher ansehen.

  • Jürgen Böhm heißt das dann, dass ich das nur mit einem RTC-Modul verwirklichen kann, da der Pi teilweise 10 Stunden stromlos ist? Oder gibt es doch eine andere Alternative das in den Einstellung zu hinterlegen, dass die Uhrzeit - egal welche Zeitdifferenz zwischen den 2 Uhrzeiten liegt - immer synchronisiert wird, sowie auch schon im Beitrag davor erwähnt?

    STF bei mir funktioniert das leider nicht, auch nach dem Eintragen der NTP-Server in /etc/systemd/timesyncd.conf steht hinter NTP synchronized immer noch no. Welche NTP-Server hast du hier eingetragen?

  • Ich habe hier einen RPi3B (ohneplus), der schafft es nicht, mit einem neu geflashten Image auf Anhieb die Zeit zu synchronisieren (gleiche Karte in einen anderen PI - geht!). Ein Phänomen, dem ich nicht auf die Spur komme. Das resultiert in Timeoutfehlern, die

    Code
    systemctl status systemd-timesyncd

    auch auswirft. Abhilfe war nur möglich, in dem ich auf ntp umgestellt habe. Erst dann gings. Allerdings ist es auch der Pi, dem ich die Auflösung meines PC Monitors, an dem er per HDMI - VGA Adapter hängt manuell mitteilen muss. Ein zweiter Pi3 und auch alle andern Pi schaffen das automagisch.

    Welche NTP-Server hast du hier eingetragen?

    Es funktioniert ja auf Anhieb mit denen, die da drin stehen - eigentlich. Wenn ich mal was eintrage, nehme ich die der PTB, also die hier.

  • Wie will man sonst einen GPS-Empfänger einbinden?

    Eine Frage: Hab ich das richtig herausgelesen: die Zeitsynchronisation über GPS funktioniert also nur, wenn man ntp verwendet? In dem Fall will ich doch "nur" die Zeit meines Pi stellen und nicht noch als ntp Server agieren.

  • Nur ganz kurz, such mal nach "ntpdate"

    Das könnteman in der rc.local automatisch starten lassen.

    Ich lese hier hin und wieder mit, aber mein Arbeitgeber bezahlt mich nicht für diese Hilfeleistungen.

    Sprich, ich kann auf eine entschprechende Ansage verzichten.

    MfG

    Jürgen

  • > Hab ich das richtig herausgelesen: die Zeitsynchronisation über GPS funktioniert also nur, wenn man ntp verwendet?

    Wer programmieren kann ist im Vorteil, weil er die ganzen Daemons nicht braucht.

    Aus Wikipedia:

    Code
    Recommended Minimum Sentence C (RMC)
    
    Jeder GNSS-Empfänger muss mindestens den Recommended Minimum Sentence C (empfohlener Mindestdatensatz C, RMC) Datensatz ausgeben können, maximal alle zwei Sekunden. Er folgt folgendem Aufbau:
    Seit NMEA In 2.3, wurden folgende Sätze um ein Feld erweitert (APB, BWC, BWR, GLL, RMA, RMB, RMC, VTG, WCV und XTE) das die Signalintegritätsinformation laut FAA darstellt. ("F" in untenstehender Tabelle)
    $GPRMC,162614,A,5230.5900,N,01322.3900,E,10.0,90.0,131006,1.2,E,A*13
    $GPRMC,HHMMSS,A,BBBB.BBBB,b,LLLLL.LLLL,l,GG.G,RR.R,DDMMYY,M.M,m,F*PP

    HHMMSS ist die UTC-Zeit als Text. Das zu decodieren ist noch recht einfach.

    Die Sommerzeit sorgt aber dafuer dass es nicht so einfach ist die aktuelle Zeit in Mitteleuropa zu bestimmen. Der Zeit-Offset haengt vom Datum (und der Zeit) ab...

  • So wie ich das jetzt sehe komme ich um das RTC-Modul nicht herum. Wie funktioniert dann das Zusammenspiel zwischen GPS-Modul und RTC-Modul? Bezieht der Pi, dann trotzdem die Zeit von GPS-Modul?

  • Pause...

    So wie ich das jetzt sehe komme ich um das RTC-Modul nicht herum.

    Doch, kommst Du, mit "ntpdate". Er muss so früh wie möglich gestartet werden aber erst nachdem das Netzwerk läuft.

    Ein passender Ort dazu ist rc.local. "ntpdate" holt von einem externen NTP-Server die Zeit und stellt die RPi-Uhr.

    Kann man mit "date" testen. Es geht nur darum, die 1000(?) Sekunden zu minimieren, damit der NTP-Server sich einschwingen kann.

    Solltest Du die RTC benutzen, so erkennt der NTP-Server sie an dem Eintrag in der /etc/ntp.conf.

    Er schaltet von allein auf die RTC wenn (noch) keine gültige Zeit(quelle) vorhanden ist und schaltet dann selbständig auf die

    nächstbessere Quelle um, siehe die Einstellungen in Beitrag #4.

    Das sind bei GPS ein paar Sekunden, mit DCF77 kann das schonmal ein paar Minuten dauern.

    Vielleicht bis heute Nachmittag.

    MfG

    Jürgen

  • Ich meine, etwas von 1000 Sekunden gelesen zu haben, habe aber die Info nicht mehr wiedergefunden.

    Steht so auch in der manpage für ntpd:

    Code
    -g     Normally, ntpd exits with a message to the system log if the offset exceeds the panic  threshold,  which is  1000 s by default.  This option allows the time to be set to any value without restriction; however, this can happen only once.  If the threshold is exceeded after that, ntpd will exit with  a  message  to the system log.  This option can be used with the -q and -x options.

    BTW: Die Option "-g" kann man auch in der "/etc/default/ntp" konfigurieren.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Wer programmieren kann ist im Vorteil, weil er die ganzen Daemons nicht braucht.

    OK, danke. Es ist also nur ein Weg über fertige Programme. Hatte ich mir eigentlich auch so gedacht: Uhrzeit lesen, Gültigkeit prüfen und dann Uhr stellen. Muss ich mal probieren.

  • Jürgen Böhm welche Einstellungen muss ich für ntpdate machen? Ich habe gelesen, dass man ntpdate und ntp nicht gemeinsam laufen lassen kann. Muss ich ntp dann abschalten? Gebe ich ntpdate nur in die command line ein, kommt die Meldung "no servers can be used, exiting" - was bedeutet das?

    Ich habe gelesen, dass ich auch "einfach" tinker panic 0 bei /etc/ntp.conf eintragen kann - dies funktioniert jedoch leider nicht.

    Des Weiteren habe ich mir jetzt auch ein RTC-Modul besorgt - leider finde ich kein i2c-Gerät, wenn ich den Befehl i2cdetect -y 1 eingebe...

  • Ich habe gelesen, dass man ntpdate und ntp nicht gemeinsam laufen lassen kann

    Stimmt, da war etwas, sorry ich habe das schon lange nicht mehr machen müssen.

    Aber Deine Frage war gut, ich habe endlich die Stelle wiedergefunden wo die Erklärung stand:

    https://wiki.hetzner.de/index.php/Uhrz…isieren_mit_NTP

    Abschnitt: Mit NTP die Zeit manuell synchronisieren.

    Es geht anscheinend auch ohne ntpdate, ich selbst habe es nur ein oder zweimal benutzt.

    Es war einfacher für den Moment die Zeit mit date zu setzen.

    Des Weiteren habe ich mir jetzt auch ein RTC-Modul besorgt

    Welches, ich hoffe nicht eins mit DS1307, mein Hinweis auf Neueinsteiger hatte schon seinen Sinn.

    Du hast hoffentlich auch den I2C-Bus mit raspi-config aktiviert?

    MfG

    Jürgen

  • Eigentlich sollte es bei jedem Neustart nach kurzem die aktuelle Zeit finden, dies funktioniert aber leider nicht immer - bin auch noch nicht dahinter gekommen, warum dies so ist.

    Evtl. hat die system unit für rc.local, nicht die für dein Script erforderlichen Abhängigkeiten.

    BTW: Statt:

    Code
    date -s '01/01/2014 00:01'

    im Script könntest Du auch fake-hwclock benutzen und für das stoppen und starten des ntpd, dessen service unit. Statt der rc.local könntest Du auch eine service unit für dein Script erstellen.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

Jetzt mitmachen!

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