mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie exakte Zeit-Synchronisation über WiFi?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Christian K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine Stoppuhr mit Groß-Display und Bedienterminal, beide sind 
über Wifi verbunden und selber gebaut.

A) Das Display wird nur über WiFi gesteuert. Im Display ist dafür ein 
Raspberry zuständig auf dem ein entsprechender WEB Server läuft. Über 
das Web Interface lässt sich alles erdenkliche einstellen, auch 
START/STOP.

B) Über das Bedienterminal (ESP8266) soll die Uhr elektronisch gestartet 
und gestoppt werden (über WiFi). Das Bedienterminal zeigt die Zeit auch 
auf seinem Display an.

Problem: Die Latenzen über die WiFi Verbindung schwanken stark und daher 
können die START/STOP Befehle nicht einfach als html Kommandos geschickt 
werden.

Eine Lösungsidee: Auf beiden Geräten läuft ein Timer mit ms Auflösung. 
Anstatt eines START Kommandos schickt das Terminal seinen ms Counter zum 
Startzeitpunkt zum Display, und beim STOP schickt es seinen ms Counter 
zum Stoppzeitpunkt. Das Display ermittelt mit seinem lokalen ms-Counter 
daraus die Anzeigewerte.

Damit zeigt das Groß-Display die korrekte Stop-Zeit an, aber durch die 
Wifi-Latenz läuft das Groß-Display dem Terminal-Display immer etwas 
hinterher.

Ich hätte jetzt gerne eine Idee, wie man die beiden ms-Timer im Display 
und Terminal synchronisieren kann, so das die auf dem Groß-Display und 
die auf dem Bedienterminal angezeigte Zeit exakt gleich ist.

Oder vielleicht eine andere Idee wie man die beiden Uhren über Wifi 
synchron laufe, starten und stoppen kann...

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Wifi ist Netzwerk, und im Netzwerk gibt es das dafür seit langem 
erprobte (S)NTP-Protokoll. Das kann Laufzeitunterschiede kompensieren, 
dafür ist es da.

Alle beteiligten Geräte (Dein Raspberry und Deine ESP8266-basierten 
Geräte) holen sich via (S)NTP die aktuelle Zeit von einem Zeitserver (im 
Internet u.a. pool.ntp.org, oder Deine Fritzbox ...).

Wenn das ganze autark laufen soll, ist der Raspberry Pi selbst der 
Zeitserver.

https://de.wikipedia.org/wiki/Network_Time_Protocol

Autor: georg (Gast)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Christian K. schrieb:
> Oder vielleicht eine andere Idee wie man die beiden Uhren über Wifi
> synchron laufe, starten und stoppen kann...

Wieso überhaupt? Nur die gestoppte Zeit ist wichig, und die wird vom 
Bedienterminal gemessen und nach dem Stopp-Befehl ans Display 
übertragen. Der Timer im Display dient nur dazu, die ablaufende Zeit 
fürs Publikum anzuzeigen, aber ob die vom Timer des Bedienterminals 
abweicht sieht ja niemand, solange die Abweichung nur einen Bruchteil 
einer Sekunde beträgt.

Auf jeden Fall: massgebend für die Zeitnahme kann nur ein Timer sein. 
Und wegen der manuellen Bedienung ist das eben der im Bedienterminal.

Georg

Autor: Boris O. (bohnsorg) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast dir ja einen ganz schönen Stapel an Protokollen für recht wenig 
Action angelacht. Wenn du wirklich die Hose weiterhin mit der Kneifzange 
anziehen musst, vergiss den folgenden Absatz.

Statt des hohen Aufwands bis in die obersten Schichten solltest du 
vielleicht auf etwas Kleineres umschwenken. Neben HTTP gibt es tief, 
tief darunter noch TCP. Auf derselben Ebene läuft UDP. Wenn es dir 
wirklich um Einfachheit und Echtzeit-Verhalten geht, nutze UDP direkt 
und schicke darüber deine Kommandos. UDP ist noch viel einfacher als 
TCP, geht im Heimnetzwerk garantiert nicht verloren und ist mit Perl 
oder Python machbar. Damit sparst du dir nicht nur die 
Verarbeitungsebenen, sondern entlastest auch den Prozessor wesentlich: 
nur noch ein einfaches Skript.

Autor: Christian K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
georg schrieb:
> Wieso überhaupt? Nur die gestoppte Zeit ist wichig, und die wird vom
> Bedienterminal gemessen und nach dem Stopp-Befehl ans Display
> übertragen.

Das hat was mit Psychologie zu tun...

Am Bedienterminal sitzen misstrauische Zeitnehmer, die verlieren das 
Vertrauen in die Uhr wenn die Anzeigen nicht übereinstimmen.

Boris O. schrieb:
> Du hast dir ja einen ganz schönen Stapel an Protokollen für recht wenig
> Action angelacht.

Bisher wurde die Uhr über Handy-Browser bedient und auf längeren 
Strecken mit nur einer Sekunde Auflösung eingesetzt. Jetzt kommt das 
elektronische Starten- und Stoppen dazu und die Auflösung muss 1/100'tel 
Sekunde sein.

Aber UDP werde ich mir mal anschauen, die Genauigkeit muss ja auch nur 
so gut sein dass man es nicht sieht...

Autor: Christian K. (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Wifi ist Netzwerk, und im Netzwerk gibt es das dafür seit langem
> erprobte (S)NTP-Protokoll.

Laut Wiki:
NTPv4 kann die lokale Zeit eines Systems über das öffentliche Internet 
mit einer Genauigkeit von 10 Millisekunden halten, in lokalen Netzwerken 
sind unter idealen Bedingungen sogar Genauigkeiten von 200 Mikrosekunden 
und besser möglich.

Das scheint ja tatsächlich brauchbar, da die Systeme nicht im Internet 
sind, müsste dann der raspberry der NTP "Stratum 0" Server sein. Das 
schaue ich mir auf jeden Fall mal näher an. Danke

Autor: Checker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Völlig falsches Konzept.
das ist doch dann klar das sowas passiert.

Wieso eine Stoppuhr die korrekte "absolute Zeit anzeigen" soll ist eh 
etwas rätselhaft.


Was funktioniert; habe ich gebaut,:


Eine "Steuerzentrale" mit NTP Zeit (Dein Raspi)

In der Anzeige sitzt ein kleiner Controller welcher die Anzeige regelt 
und dieser bekommt via WIFI (UDP/TCP) einfach serielle Strings in denen 
die Daten zur Anzeige stehen.
Das sind dann ein paar Byte und Du hast keine sichtbaren Differenzen...

Autor: Christian K. (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Ich habe mir jetzt NTP angeschaut und ich denke das wird es. Den NTP 
server auf dem RPI habe ich schon entsprechend eingerichtet, SNTP client 
open source software für ESP8266 gibt es auch.

Dazu werde ich die Start/Stop Zeit vom Terminal an das Display schicken 
und das Display wird mit seiner lokalen Zeit in 1/100'tel Sekunden die 
Zeit dazwischen anzeigen.

Danke für die ganzen Vorschläge!

Autor: georg (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Christian K. schrieb:
> Am Bedienterminal sitzen misstrauische Zeitnehmer, die verlieren das
> Vertrauen in die Uhr wenn die Anzeigen nicht übereinstimmen

Und du glaubst ernsthaft, die sehen einen Zeitunterschied von einigen 
Millisekunden? Und das noch wenn sie zwischen Terminal und Display hin- 
und herschauen müssen? Das ist doch reine Theorie und völlig 
unrealistisch.

Es müsste schon jemand mit einer Kamera eine Aufnahme machen, auf der 
beides zu sehen ist, aber wer soll ausser dir so bescheuert sein?

Georg

Autor: whiterabbitschlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wifi ist dem Thema voellig unangemessen.

Da koennte Mann auch versuchen Atomuhren ueber GSM zu synchronisieren...

6 setzen.

Autor: whiterabbitschlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.:

ntpd: sending query to 192.53.103.103
ntpd: reply from 192.53.103.103: offset:-3.798570 delay:0.692222 status:0x24 strat:1 refid:0x00425450 rootdelay:0.000000 reach:0x01
ntpd: sending query to 192.53.103.103
ntpd: reply from 192.53.103.103: offset:-4.115222 delay:0.072047 status:0x24 strat:1 refid:0x00425450 rootdelay:0.000000 reach:0x03
ntpd: sending query to 192.53.103.103
ntpd: reply from 192.53.103.103: offset:-5.116167 delay:2.214129 status:0x24 strat:1 refid:0x00425450 rootdelay:0.000000 reach:0x07
ntpd: sending query to 192.53.103.103
ntpd: reply from 192.53.103.103: offset:-4.101902 delay:0.275046 status:0x24 strat:1 refid:0x00425450 rootdelay:0.000000 reach:0x0f
ntpd: sending query to 192.53.103.103
ntpd: reply from 192.53.103.103: offset:-5.660306 delay:3.377152 status:0x24 strat:1 refid:0x00425450 rootdelay:0.000000 reach:0x1f
ntpd: sending query to 192.53.103.103
ntpd: reply from 192.53.103.103: offset:-4.108971 delay:0.283374 status:0x24 strat:1 refid:0x00425450 rootdelay:0.000000 reach:0x3f
ntpd: setting time to 2018-05-27 18:45:35.107592 (offset -4.108971s)


Autor: MIG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nagel im Kopp!

Autor: Info (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian K. schrieb:
> SNTP client
> open source software für ESP8266 gibt es auch.

Aufpassen: die meisten machen kein echtes NTP ("Rücksprache" mit 
Laufzeitschätzung) sondern holen nur ein paarmal die Zeit. Bei mir 15 s 
Fehler.
Wenn du eine Bibliothek hast, die es richtig macht, sag bitte Bescheid.

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Info schrieb:
> Aufpassen: die meisten machen kein echtes NTP

Das "S" in SNTP steht für "simple" NTP, wie der eingangs verlinkte 
Wikipedia-Artikel auch erklärt.

Autor: Peter D. (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian K. schrieb:
> Am Bedienterminal sitzen misstrauische Zeitnehmer, die verlieren das
> Vertrauen in die Uhr wenn die Anzeigen nicht übereinstimmen.

Du glaubst doch nicht ernsthaft, daß jemand 10ms Unterschied erkennen 
kann und nach dem Stop stimmen doch die Zeiten. Man sollte nicht 
Probleme suchen, wo gar keine sind.

Außerdem, welche Updaterate erlaubt überhaupt das Großdisplay?
Ich würde für ergonomisches Ablesen nur alle 100ms updaten und während 
der Messung in der 10ms-Stelle eine "8" anzeigen.

Autor: Info (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. F. schrieb:
> Das "S" in SNTP steht für "simple" NTP, wie der eingangs verlinkte
> Wikipedia-Artikel auch erklärt.

Aufpassen: die meisten machen kein echtes SNTP.

Autor: Stefanus F. (Firma: Äppel) (stefanus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal angenommen, du hast Uhren die exakt synchron laufen. Im WLAN sind 
Latenzen von einigen 100ms durchaus üblich, es sind sogar mehrere 
Sekunden möglich.

Wie willst du das Start/Stop Signal so schnell übermitteln, dass niemand 
die Latenz bemerkt? Wenn eine Uhr 200ms zu spät startet oder zu spät 
stoppt, wird man das deutlich sehen. Auch wenn die Angezeigte Zeit 
trotzdem stimmt. Meinst du so eine Anzeige weckt Vertrauen? Bei mir 
jedenfalls nicht.

Ich nehme an, es geht um einen Ort, an dem sich viele Menschen aufhalten 
werden. Viele Smartphones, die das Funknetz mit WLAN und Bluetooth 
zumüllen.

: Bearbeitet durch User
Autor: oszi40 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefanus F. schrieb:
> die das Funknetz mit WLAN und Bluetooth zumüllen.

Evtl. ist auf 5 GHz nicht so viel los, aber die erreichbare Entfernung 
geringer. Man sollte das mal gründlicher testen. Allerdings ist es ein 
Unterschied, ob man auf einer einsamen Insel oder einer gut besuchten 
Computermesse sich befindet.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.