Systemzeit auf Raspi update

OP #7745229
Lesenswert?

Hallo,

die Systemzeit auf meinem Raspi läuft recht schnell weg, so 2min/Halbjahr. Der Raspi hängt an einer Fritzbox, die die richtige Zeit natürlich kennt. Ich muss also die Zeit auf dem Raspi mal ab und zu neu stellen. timedatectl ist mir ein wenig bekannt, damit scheints aber nicht zu gehen. Ich bin in Python unterwegs, vllt. kann man von dort direkt ntp anzapfen, ansonsten nehme ich auch gern das Linux Kommando.

THX Cheers Detlef

#7745243
Lesenswert?

Normalerweise installiert man den ntpd (ist im Paket ntpsec). Ohne stabiles Internet macht der aber keinen Spaß. Mit "rdate -anv pool.ntp.org" als root kann man die Systemzeit korrigieren, z.B. einmal am Tag. Der Aufruf funktioniert auf der Kommandozeile oder per cronjob oder auch mit Python. Für Python gibt es auch das Paket python-3-ntp.

Das -a bei rdate steht für adjust. Die Systemuhr wird dann nicht einfach verstellt, sondern rdate sagt dem Kernel um wie viel die Uhr falsch geht. Der Kernel lässt die dann um 0.05% schneller oder langsamer laufen bis die Zeit wieder stimmt. Wichtig ist, dass es keine Zeitsprünge gibt, vor allem nicht in die Vergangenheit.

#7747062
Lesenswert?

Also bei ntpd, openntpd und vermutlich auch chrony, dürfte der Gangfehler der Uhr automatisch ausgeglichen werden. Dafür muss sich der Raspberry PI regelmäßig synchronisieren. Das geht auch vernünftig gut direkt über das Internet. Wenn man ein paar Euro zur Verfügung hat, kann man auch einen GPS-Empfänger verwenden und PPS mit einem entsprechenden GPIO-Pin verbinden, so dass man das als PPS-Eingangsgerät verwenden kann. (keinesfalls versuchen die Sekunde per UART zu lesen!)

Von den billigen Hüllkurven DCF77-Empfängern würde ich abraten, die sind weniger genau als wenn man sich die Zeit aus dem Internet holt.

#7747196
Lesenswert?

Christian B. schrieb:

keinesfalls versuchen die Sekunde per UART zu lesen!

Weil? Es könnte ja funktionieren? Alles eine Frage der Filter, und das kann der originale ntpd ziemlich gut. Zum Vergleich Internet und ublox-6, auf dem Schreibtisch, per USB-UART:

1
     remote           refid    st t when poll reach  delay  offset jitter
2
=========================================================================
3
+212.18.3.19     212.18.1.106   2 u  187  256  377   4.695  -1.912  0.814
4
-90.187.112.137  237.17.204.95  2 u   29  256  377  21.408  -3.048  2.863
5
-144.91.116.85   79.133.44.146  2 u  141  256  377  13.571  -3.284  6.628
6
+78.47.56.71     17.253.14.253  2 u   82  256  377   7.497  -2.126  0.470
7
 192.9.200.43    (loop)         3 u   20   64  377   0.187  -1.426  0.233
8
*127.127.20.0    .GPS0.         1 l   38   64  377   0.000  -0.012  0.547

Axel G. schrieb:

systemctl status systemd-timesyncd.service Falls nicht vorhanden

Freuen ;) Und ntpsec installieren.

#7747199
Lesenswert?

Christian B. schrieb:

... Wenn man ein paar Euro zur Verfügung hat, kann man auch einen GPS-Empfänger verwenden und PPS mit einem entsprechenden GPIO-Pin verbinden, so dass man das als PPS-Eingangsgerät verwenden kann. (keinesfalls versuchen die Sekunde per UART zu lesen!)

Man sollte vor der Verwendung des PPS-Ausgangs zumindest einmal die Plausibilitaet des Signals pruefen. Ich habe hier ein GPS-Modul, dessen PPS-Ausgang mit Werten bis zu 100 µs jittert. :) Das UART Telegramm wurd bei dem wohl auch nicht besser sein.

Von den billigen Hüllkurven DCF77-Empfängern würde ich abraten, die sind weniger genau als wenn man sich die Zeit aus dem Internet holt.

Es gibt auch bessere, die ueber einen laengeren Zeitraum per Korrelation zu einer genaueren Schaetzung kommen. In Zeiten von G.P.S. lohnt sich der Aufwand aber nicht mehr wirklich.

Jeder kann sich heute fuer wenige Euro einen

ublox

ins Haus holen. Ein Platz am, oder noch besser vor dem Fenster, sollte man ihm aber schon goennen.

#7747210
Lesenswert?

Motopick schrieb:

Ich habe hier ein GPS-Modul, dessen PPS-Ausgang mit Werten bis zu 100 µs jittert. :)

Der 1PPS Ausgang liefert, wie der Name schon sagt, nur einen Puls pro Sekunde und dessen Jitter sollte unter 100 Nanosekunden liegen.

Was meinst du mit "Werten"?

Motopick schrieb:

Das UART Telegramm wurd bei dem wohl auch nicht besser sein.

Der Zeitpunkt zu dem das UART Telegramm kommt (welches), ist "irgendwann". Für Synchronisation im Sub-Sekundenbereich ist das ungeeignet, i.e. nicht spezififiert. 100us entspricht bei üblichen 9600Bd etwa der Bitdauer der seriellen Übertragung.

Persönliche Seite #7747339
Lesenswert?

Bauform B. schrieb:

Axel G. schrieb:

systemctl status systemd-timesyncd.service Falls nicht vorhanden

Freuen ;) Und ntpsec installieren.

Wenn man gerne bastelt, ja. Debian Standard ist seit bookworm der systemd Dienst.

Benötigt man über die systemd Statusausgabe hinaus noch mehr Informationen:

1
root@v7:~# timedatectl timesync-status
2
       Server: 2a01:4f8:200:1307::10 (2.debian.pool.ntp.org)
3
Poll interval: 17min 4s (min: 32s; max 34min 8s)
4
         Leap: normal
5
      Version: 4
6
      Stratum: 2
7
    Reference: E8E39FE7
8
    Precision: 4us (-18)
9
Root distance: 4.196ms (max: 5s)
10
       Offset: +8.308ms
11
        Delay: 2.762ms
12
       Jitter: 3.236ms
13
 Packet count: 6
14
    Frequency: +26,717ppm
#7747937
Lesenswert?

Wenn du die aktuelle Zeit aus der FritzBox holen möchtest, schau mal ob dieses bash-script funktioniert:

https://github.com/jhubig/FritzBoxShell

Falls ja, kannst die sie so auslesen (zB Änderung in der Funktion Deviceinfo):

1
location="/upnp/control/time"
2
uri="urn:dslforum-org:service:Time:1"
3
action='GetInfo'
4
readout | awk -F "[T+]" '/NewCurrentLocalTime/{print $3}'

und setzen mit: hwclock

#7748036
Lesenswert?

sMario M. schrieb:

https://www.mattcrampton.com/blog/query_an_ntp_server_from_python/

Na da würde ich in Python lieber ntplib verwenden

1
sudo apt install python3-ntplib

edit: habe ich gerade auf meinem Rechner gefunden (stammt nicht von mir)

1
#!/bin/python3
2

3
import ntplib
4
from datetime import datetime, timezone
5
c = ntplib.NTPClient()
6
# Provide the respective ntp server ip in below function
7
response = c.request('de.pool.ntp.org', version=3)
8
response.offset
9
print (datetime.fromtimestamp(response.tx_time, timezone.utc))
#7748075
Lesenswert?

Bauform B. schrieb:

Aber rein für die Uhrzeit scheint es mir ein wenig übertrieben...

Naja, ich habe die Aussage:

„Der Raspi hängt an einer Fritzbox, die die richtige Zeit natürlich kennt”

so verstanden, dass die Zeit aus der FritzBox geholt werden soll, also händische Aktualisierung per hwclock und nicht als Zeitserver oder mit ntp (macht die FB selber).

Gut, nur für die Uhrzeit ists ein wenig übertrieben, das script bietet aber soviel mehr...

Anrufliste, FB Reboot, akt. IP, Wlan Ein/Aus...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren