GPS-Uhr & NTP-Server auf einem ESP32-P4

OP Persönliche Seite #8060043
Lesenswert?

Moin,

ich habe gerade den aktuellen Stand meines derzeitigen Projektes auf github.com geladen und dachte, dass es vielleicht auch etwas für hier ist, um darüber zu diskutieren etc.:

https://github.com/boerge42/GPS-Clock-NTP-Server

Es handelt sich um eine Uhr auf einem ESP32, welche die Uhrzeit über ein GPS-Modul erhält. Da durch die Auswertung des PPS-Signals, das ebenfalls vom GPS-Modul generiert wird, eine recht genaue Synchronisation der Uhrzeit erfolgt, ist daraus auch ein kleiner NTP-Server (theoretisch Stratum 1) entstanden (deshalb auch ein ESP32-P4-ETH als Grundlage).

Die Ausgabe von Datum/Uhrzeit auf einem OLED (siehe Anhang) ist nicht sonderlich innovativ. Im Vordergrund standen da andere Informationen, die platzsparend und kompakt angezeigt werden sollten...

Ich würde mich freuen, wenn eine kleine und gewinnbringende Diskussion entsteht. Coole Ideen und Anregungen sind willkommen!

Uwe

Angehängte Dateien:
OP Persönliche Seite #8060141
Lesenswert?

Manfred P. schrieb:

Aber nur in der Nacht während eines Traumes.

Bauform B. schrieb:

Nun, es gibt viele Theorien... eigentlich sieht es doch so aus: NIST = 0, Satellit = 1, GPS-Empfänger = 2, ESP = 3. Nur wegen GPS != NTP bekommen alle einen Bonus? Aber auch mit Bonus gibt es maximal eine 2.

Naja, die Vergabe des Stratum ist eigentlich recht eindeutig geregelt und keine Ermessensfrage. Vielleicht nochmal nachlesen?

...vielleicht kommt diese Skepsis am "Stratum 1" auch von der Annahme, dass ein selbstgebauter NTP-Server nicht ausreichend genau/stabil ist? Ich behaupte mal, dass meine Implementierung schon mal nicht ganz so schlecht ist. Verbesserungen sind immer möglich und u.a. darüber wollte ich gern hier diskutieren.

Uwe

: Bearbeitet durch User
Gast #8060163
Lesenswert?

Uwe B. schrieb:

Ich würde mich freuen, wenn eine kleine und gewinnbringende Diskussion entsteht. Coole Ideen und Anregungen sind willkommen!

Uwe, -

meine Kommentare:

  • Verlinke/Kopiere den Quellcode der verwendeten Bibliotheken (oder den verwendeten Stand) in der von Dir verwendeten Version. Bibliotheken werden weiter entwickelt und manchmal sind breaking-Changes nicht zu vermeiden. Und dann kann Dein Code nicht mehr kompiliert werden.

  • Hinweis auf die verwendete Arduino-Version.

  • Kommentare sind auf deutsch.

  • Schaltplan fehlt. Ein PDFchen ist manchmal sehr hilfreich.

  • Sehr schoenes Bildchen ueber das Zusammenspiel der Tasks und der Queues und Interrupts bei RTOS.

  • Verwendete Lizenz fehlt.

Das ganze Projekt ist eigentlich ein sehr schoenes Beispiel warum Arduino so erfolgreich war. Mal sehen, wie sich die Zusammenarbeit community <-> Qualcomm in den naechsten Jahren entwickelt.

OP Persönliche Seite #8060449
Lesenswert?

Hallo Thomas,

danke für die Hinweise/Anmerkungen...

Thomas W. schrieb:

  • Verlinke/Kopiere den Quellcode der verwendeten Bibliotheken (oder den verwendeten Stand) in der von Dir verwendeten Version. Bibliotheken werden weiter entwickelt und manchmal sind breaking-Changes nicht zu vermeiden. Und dann kann Dein Code nicht mehr kompiliert werden.

  • Hinweis auf die verwendete Arduino-Version.

...ich habe jetzt im Quelltext-Kopf entsprechende Informationen als Kommentar hinterlegt

  • Schaltplan fehlt. Ein PDFchen ist manchmal sehr hilfreich.

ok, nicht so umfangreich/kompliziert, aber ich habe ein kleines Bildchen in die README eingebunden (der Anbieter, des verwendeten Zeichenprogramms hat sich mit einem präsenten Wasserzeichen verewigt...)

  • Verwendete Lizenz fehlt.

...habe ich bisher noch nie bei meinen Projekten gemacht, aber warum nicht; zu mindesten muss man bei der Auswahl der Lizenz mal darüber nachdenken, was für einen "go"/"no go" ist... und habe eine passende ausgewählt.

Uwe

: Bearbeitet durch User
OP Persönliche Seite #8060458
Lesenswert?

...aber mal was inhaltliches:

Welche Vorschläge habt ihr, um "meinen" NTP-Server mit anderen Servern zu vergleichen?

ntpdate -q <IP> --> kenne ich.

Mich interessiert aber z.B., ob mein Server tatsächlich synchron zu anderen NTP-Servern ist. Dazu müsste man eigentlich ein paar Server "gleichzeitig" abfragen bzw. den entsprechenden Zeitversatz ins Ergebnis einberechnen. Hat jemand eine Idee?

Danke Uwe

#8060474
Lesenswert?

Uwe B. schrieb:

Mich interessiert aber z.B., ob mein Server tatsächlich synchron zu anderen NTP-Servern ist. Dazu müsste man eigentlich ein paar Server "gleichzeitig" abfragen bzw. den entsprechenden Zeitversatz ins Ergebnis einberechnen.

Auf einem RPi oder einen normalen PC mit Debian reicht "apt install ntpsec". Dann läuft der "offizielle" ntpd und fragt ca. ein Dutzend Server im Internet ab. Nach ein einer halben Stunde (oder so) bekommt man mit "ntpq -pn" so eine Liste:

1
     remote           refid      st t when poll reach   delay   offset  jitter
2
==============================================================================
3
+212.18.3.19     212.18.1.106     2 u  175  256  377    4.627    2.870   2.398
4
-90.187.112.137  237.17.204.95    2 u  218  256  377   20.901   -2.089   2.222
5
-5.45.97.204     195.145.119.188  2 u  164  256  377   17.170   -2.183   3.293
6
+78.47.56.71     129.134.28.123   2 u   52  256  377    7.675   -0.538   2.761

Dann hängt man den ESP32 ins gleiche Netz und trägt seine IP-Adresse in /etc/ntpsec/ntp.conf ein, nach den "pool"-Zeilen, ungefähr so: "server 192.168.1.42". Anschließend taucht der ESP gleichberechtigt in der ntpq-Liste auf. Sein jitter müsste eigentlich deutlich kleiner sein als hier bei meinem DSL-Internet.

Edit: die Liste ist gekürzt und ausgerechnet die Zeile mit dem * fehlt jetzt :(

: Bearbeitet durch User
#8060550
Lesenswert?

Uwe B. schrieb:

ok, nicht so umfangreich/kompliziert, aber ich habe ein kleines Bildchen in die README eingebunden (der Anbieter, des verwendeten Zeichenprogramms hat sich mit einem präsenten Wasserzeichen verewigt...)

Das ist leider kein Schaltplan, das sind nur ein paar bunte Striche.

Bei einem Schaltplan wären die Signale beschriftet, so daß man sich nicht die Anschlussbelegungen aller beteiligten Platinen raussuchen und nachsehen muss.

Schließlich könnte jemand ja auch auf die Idee kommen, das ganze mit einer anderen ESP32-Platine nachzubauen.

Fass' das jetzt aber bitte nicht als kompletten Verriss Deines Projektes auf - die Idee an sich finde ich reizvoll.

#8060557
Lesenswert?

Bauform B. schrieb:

Nach ein einer halben Stunde (oder so) bekommt man mit "ntpq -pn" so eine Liste: remote refid st t when poll reach delay offset jitter ... +212.18.3.19 212.18.1.106 2 u 175 256 377 4.627 2.870 2.398

Was sind denn das für unvollständige Angaben? So simple Dinge wie "delay" oder "jitter" sind Zeitangaben, die als physikalische Größen auch einer Einheit bedürfen.

Das sollte eigentlich jedem, der nicht nur lernt, seinen Namen zu tanzen, in der Schule eingetrichtert worden sein.

#8060568
Lesenswert?

Harald K. schrieb:

Das ist leider kein Schaltplan, das sind nur ein paar bunte Striche.

Bei einem Schaltplan wären die Signale beschriftet, so daß man sich nicht die Anschlussbelegungen aller beteiligten Platinen raussuchen und nachsehen muss.

Formal hast du natürlich Recht, aber für die Zielgruppe ist dieses bunte Bild optimal. Und speziell dieses hier ist doch wirklich gut. Man könnte natürlich auch in so einem Bild die Signalnamen dran schreiben. Aber bei RX und TX hilft dir das auch nicht viel :)

Mit einem normalen Schaltplan müsste der Anwender auch die Anschlussbelegung raussuchen, nur in der umgekehrten Richtung. Und manchmal sind die Pin-Nummern nicht eindeutig, dank WiringPi (oder wer hat das verbrochen?).

Hab' ich jetzt gerade Arduino in Schutz genommen? So kenne ich mich garnicht ;)

Harald K. schrieb:

Fass' das jetzt aber bitte nicht als kompletten Verriss Deines Projektes auf - die Idee an sich finde ich reizvoll.

Unterschreib! Das Projekt spielt auf jeden Fall in einer anderen Liga.

#8060667
Lesenswert?

Bauform B. schrieb:

Das Format hat sich ein Professor¹ ausgedacht, gewöhnliche Schüler können da nicht mitreden.

Auch für den sollte es ein Leichtes sein, in den Spaltenüberschriften ein "delay/ms", "jitter/ms" oder in welche Einheit auch immer die Größen angegeben werden, unterzubringen, damit man nicht erst sonst wo recherchieren muss, um die Bedeutung der Zahlen zu erfahren.

: Bearbeitet durch User
OP Persönliche Seite #8060787
Lesenswert?

Moin,

Jens M. schrieb:

Aber dann wäre die geheime Linuxelite ja keine verschworene geheime Linuxelite mehr....

Was bedeutet denn das +/- vorn, und st, t, when, poll und reach sind auch unerklärlich.

RTFM bzw. befrage eine der zahlreichen KIs...

Und natürlich fehlt die Einschätzung wie sich die ESP-Maschine schlägt...

kommt demnächst, wenn ich ein entsprechendes Python-Script, auf Basis ntplib, "vorzeigewürdig" habe!

Grüße Uwe

#8060795
Lesenswert?

GPS-Uhr ist natürlich interessant, sofern GPS zuverlässiger als DCF77 funktioniert, man sollte trotzdem die Plausibilität aller Empfänger gründlich prüfen und gegen Spoofing sichern, nachdem man so hört, was alles gefälscht wird. Durch Schaden wird man klüger. Ein kaputtes DCF-Impulstelegramm hat mir schon viel Ärger eingebracht.

#8060887
Lesenswert?

Lu schrieb:

GPS-Uhr ist natürlich interessant, sofern GPS zuverlässiger als DCF77 funktioniert

GPS ist weltweit verfügbar und erheblich genauer, sofern die Antenne die Satelliten halbwegs vernünftig sieht.

Von ordentlich implementiertem Spoofing ist DCF77 genauso betroffen wie GPS. Nur stehen bei DCF77-Spoofing die Chancen ungleich besser, dass es unattraktiv ist, weil sich kaum jemand dafür interessieren würde.

: Bearbeitet durch User
#8060888
Lesenswert?

Schon einmal überlegt wie groß/aufwändig eine Anlage zum Spoofing/Jamming im Langwellenbereich sein müsste, zumindest wenn es um mehr als nur einen kleinen Bereich geht?

Andere haben sich dazu bereits Gedanken gemacht, z.B. bei GNSS versus LORAN.

: Bearbeitet durch User
OP Persönliche Seite #8063239
Lesenswert?

Jens M. schrieb:

Und natürlich fehlt die Einschätzung wie sich die ESP-Maschine schlägt...

Uwe B. schrieb:

kommt demnächst, wenn ich ein entsprechendes Python-Script, auf Basis ntplib, "vorzeigewürdig" habe!

mittlerweile gibt es dieses "geheimnisvolle" Python-Script (siehe Anhänge)... 10.1.149 --> ist der ESP32-NTP-Server, um den es hier geht timepi --> ist ein RPi (Zero 2W), ebenfalls mit GPS-Modul/PPS/Chrony etc. fritz.box --> ist der (eingeschaltete) Zeitserver meines Internet-Routers ...der Rest der NTP-Server ist selbstsprechend ;-)...

Aber eigentlich stellt sich doch die Frage, was mit "...Und natürlich fehlt die Einschätzung wie sich die ESP-Maschine schlägt..." gemeint ist!

Liefert die ESP-Kiste die richtige Zeit? Vermutlich, wenn man sich den "offset" der lokalen Zeit zu den einzelnen NTP-Servern ansieht. "Vermutlich", die Tendenz stimmt und wir bewegen uns bei allen Servern im einstelligen Millisekunden-Bereich. Es sind jeweils nur "Einmal-Messungen" und das Ergebnis "NTP-Zeit" ist stark abhängig von den Latenzen im Übertragungsweg Request/NTP-Server/Answer. Ok, man könnte den Jitter messen, vermutlich wird man dabei feststellen --> passt, wenn man keinen "groben" Fehler bei der Synchronisation der Uhr auf dem NTP-Servers gemacht hat. (Zu dem Punkt experimentiere ich gerade noch etwas am Regler-Verhalten in task_adjtime (siehe auch TODO.md im Repository...). Ideen sind herzlich willkommen!)

Spannender ist doch eigentlich die Frage: Was sind denn nun wirklich die Qualitätsmerkmale eines Stratum-1-NTP-Servers? Ideen/Meinungen?

Grüße Uwe

PS.: Precision, root_delay, root_dispersion könnten es sein, werden aber bei mir mit, zur Hardware passenden, Werten hart gesetzt. Ok, "root_dispersion" könnte man noch in Abhängigkeit des vorhandenen/ausbleibenden PPS-Signals berechnen...

Angehängte Dateien:
: Bearbeitet durch User
#8063250
Lesenswert?

Uwe B. schrieb:

Spannender ist doch eigentlich die Frage: Was sind denn nun wirklich die Qualitätsmerkmale eines Stratum-1-NTP-Servers?

Wohl wahr.

Es gibt diverse Hochschulen und Universitäten, die für ihre Zeitserver Stratum 1 behaupten, ebenso Telekom.

Die Tabelle unter https://www.hullen.de/helmut/filebox/DCF77/ntpsrvr.html scheint noch zu passen, deren Verfasser ist schon lange beerdigt.

Um Zeiten zu vergleichen, nutze ich "NTP Monitor" vom Dave Taylor aus GB. Es ist leider zu befürchten, dass auch der nicht mir in unserer Welt ist. Lässt sich nicht direkt verlinken: http://www.satsignal.net/ wähle "David's Page" klicke "Software" wähle "Net Tools"

Das läuft hier auch unter Win10.

Angehängte Dateien:
#8063311
Lesenswert?

Bacchus, Wotan, Odin und Hermes?

Uwe B. schrieb:

Aber eigentlich stellt sich doch die Frage, was mit "...Und natürlich fehlt die Einschätzung wie sich die ESP-Maschine schlägt..." gemeint ist!

Na, genau was du gemacht hast, mit einer Einschätzung für Deppen wie mich. Ich lese, das dein ESP eine zum Router vergleichbare Qualität/Genauigkeit liefert, was mich ein wenig grübeln lässt. Einerseits ist die Fritze Stratum 4 (warum eigentlich? An einen vernünftigen Server a la ptbtime1.ptb.de gehängt wäre sie 2), aber andersrum ist der ESP für solcherlei Präzisionsanwendungen gar nicht geeignet bzw. gedacht. Aber das Ergebnis dürfte dennoch für 99,999% aller Nutzer ausreichend sein. Danke also für's teilen!

Uwe B. schrieb:

Was sind denn nun wirklich die Qualitätsmerkmale eines Stratum-1-NTP-Servers?

Das ist doch reichlich ausführlich dokumentiert... Aber ob deine Interpretation einer direkten Anbindung an eine Primärzeitquelle allgemein anerkannt ist? Ich würde darunter verstehen, das der Prozessor seinen Puls direkt von einem Normal bekommt. Du hast mehrere Satelliten und die unbekannte, undokumentierte & unbeeinflussbare Software im GPS-Modul sowie ein binary blob von Espressif mit ebenfalls nur erahnbaren Funktionen & Timings dazwischen, das ist in meinen Augen nicht mehr direkt. Ja, GPS wird benutzt um 10MHz via PPS genau abzugleichen, aber das ist m.E. relativ, also "eine Sekunde dauert 1000,000ms" und nicht "Beim nächsten Puls ist es 8 Uhrrr 41 Minuhten 55,000 Sekunden - blip". Viele Leute nehmen GPS für Uhren (also ist es für menschliche Anzeige genau genug) statt DCF, aber ist es offiziell mit einer spezifizierten Genauigkeit an einem Ort verfügbar? Das wäre mir neu... Aber ich lerne gerne dazu.

Von diesem Standpunkt her wundert mich aber, wie genau deine ESP-Kiste ggü. offiziellen Zeitservern ist, zumindest wenn ich die Tabelle richtig deute. Das Teil ist mindestens so gut wie ein beliebiger Router mit beliebigem NTP-Upstream. Respekt!

: Bearbeitet durch User
OP Persönliche Seite #8063340
Lesenswert?

Jens M. schrieb:

Einerseits ist die Fritze Stratum 4 (warum eigentlich? An einen vernünftigen Server a la ptbtime1.ptb.de gehängt wäre sie 2)

hat mich auch gerade gewundert, und habe mal nachgesehen...: es war 2.europe.pool.ntp.org (o.ä.) konfiguriert. Ich habe jetzt de.pool.ntp.org eingestellt.

Jetzt fällt aber was anderes lustiges auf, siehe Anhang:

  • de.pool.ntp.org sagt, er wäre Stratum 2 --> ok, mag sein...
  • mein Router meint, er wäre auch Stratum 2 --> nö, er müsste dann Stratum 3 sein!

Grüße Uwe

Angehängte Dateien:
: Bearbeitet durch User
#8066361
Lesenswert?

Frank D. schrieb:

Gähn, das ist ja mal ganz was neues.

So einen Beitrag kannst Du Dir sparen! Solche Leute wie Du sind die Totengräber jeglicher Initiativen, die der Allgemeinheit zugute kommen. Schäm Dich!

An den TO: vielen Dank, daß Du Deine ARBEIT mit uns teilst! Ohne Leute wie Dich wäre der Spaß an unserem Hobby oder beim Einen oder Anderen auch an dieser Arbeit nicht so groß!

Es bedankt sich kormorix

OP Persönliche Seite #8075257
Lesenswert?

Moin,

um vielleicht die Diskussion wieder ein wenig anzustoßen, hier ein paar Neuigkeiten:

Jens M. schrieb:

was mich ein wenig grübeln lässt. Einerseits ist die Fritze Stratum 4 (warum eigentlich? An einen vernünftigen Server a la ptbtime1.ptb.de gehängt wäre sie 2), aber andersrum ist der ESP für solcherlei Präzisionsanwendungen gar nicht geeignet bzw. gedacht. Aber das Ergebnis dürfte dennoch für 99,999% aller Nutzer ausreichend sein.

untermauere das bitte mit konkreten Zahlen! ...:

  • PPS-Signal: Jitter im einstelligen Nano-Sekunden-Bereich
  • RTC-Abweichung, ESP32-P4 lt. Datenblatt, ca, 10ppm

Uwe

: Bearbeitet durch User
#8083451
Lesenswert?

Dieter S. schrieb:

Schon einmal überlegt wie groß/aufwändig eine Anlage zum Spoofing/Jamming im Langwellenbereich sein müsste, zumindest wenn es um mehr als nur einen kleinen Bereich geht?

Schon einmal überlegt, wie aufwändig eine Anlage zum Spoofing/Jamming im L1-Band sein müsste, zumindest wenn es um mehr als nur einen kleinen Bereich geht?

Nicht jeder hat einen Satelliten zur Verfügung, mit dem ein größeren Teil der Erdoberfläche im 1,5GHz-Bereich beleuchtet werden kann.

Denkst du manchmal darüber nach, was du für Kommentare von dir gibst?

#8083459
Lesenswert?

Und wieder mal zeigt einer der üblichen Schwätzer dass er keine Ahnung hat, aber davon viel.

Hilfreiche Information für diejenigen die sich für GNSS Jamming interessieren ist z.B. der regelmäßig stattfindende Jammertest:

https://www.nordicgeodeticcommission.com/wp-content/uploads/2025/09/15_Jammertest_AMS.pdf

https://rntfnd.org/wp-content/uploads/Jammertest-2023-information.pdf

Man beachte die Ausgansleistung der Jammer und die Reichweite.

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