nt übermitteln

Jan 24, 2020 7 Replies
Jump to replies (7)

Hallo zusammen,



ist nicht bei mir, sondern bei einem Mitarbeiter. Er hat auf einem ESP8266 einen lokalen Webnserver laufen, über den dieser seine Messdaten an ein Händi oder eben auch Schläptop ausgibt. Da die Uhr des ESP8266 hinreichend ungenau geht und eine zusätzliche Echtzeituhr vermieden werden soll, hatte ich die Idee, doch die Uhrzeit des abholenden Clients zu verwenden. Mein Mitarbeiter meinte, das gehe nicht. Wirklich?



Ich habe keinen Plan von HTML und ähnlichem, was man so auf der Serverseite treiben kann. Ist hier jemand, der das bestätigen kann?



Bitte keine Grundsatzdiskussionen über Zeitserver und Co. Das Teil soll nicht in Internet uns auch keine Dienste daraus in Anspruch nehmen. Das ist Vorgabe, dass der 8266 der Webserver stellt und man sich mit einem Client via Browser dran einklinkt. Nicht mehr und auch nicht weniger.



Vielen Dank



Marte


Am 24.01.20 um 23:18 schrieb Marte Schwarz:

Mein OpenWRT hat im Webinterface für die Uhrzeit eine Schaltfläche "Sync with browser", womit die Uhrzeit des Routers nach der des Systems mit dem Webbrowser gestellt wird, insofern sollte das schon irgendwie gehen.

Hanno

Am 24.01.2020 um 23:18 schrieb Marte Schwarz:

Ich arbeite auch nicht selber mit dem ESP8266, aber einer meiner Azubis. Er hatte gerade ein änliches Problem.

Der ESP kommuniziert bei uns mit einer My-SQL Datenbank auf einem Linux Server. Von dort bekommt er auch die Uhrzeit, also er bekommt auf Anfrage ein Datentelegramm mit der aktuellen Uhrzeit des Servers. Damit wird die interne Uhr des ESP synchronisiert.

Problem dabei ist, dass die interne Uhr des ESP wegläuft wenn die Netzverbindung ausfällt. Um das Problem zu lösen hat er dann eine Echtzeituhr eingebaut. Gibts als fertiges Modul mit I2C.

Ich auch nur minimal. Aber zumindest soviel um zu sagen, dass das was du willst durchaus machbar ist. Mein Azubi bekommt es jedenfalls hin.

Wir machen es anders rum, d.h. der ESP kommuniziert mit einem Server und der Client ruft eine Website auf, die auf dem Server liegt.

Auch auch bei eurem Konzept sollte der Client die Uhrzeit senden können.

Das ist ein ziemlich komplizierter Weg. Einfacher wäre gewesen das alte 'time' Protocol auf dem Server zu aktivieren. Dann reicht ein 'telnet <server> 37' und schon hat er die Zeit.

Gerrit

Hi Stefan,

So ähnlich wollten wir das auch, nur eben mit dem Unterschied, dass der ESP der Server ist.

Eben deswegen soll ja beim Abruf der Daten die Uhrzeit korrigiert werden. Das wird bei uns alle paar Tage sein. Die Abweichungen bis dahin sind nicht tragisch, aber sie sollte eben bei gelegenheit angepasst werden können. Möglicherweise kann man dann auf dem ESP einen Korrekturfaktor berechnen, der die Abweichungen kleiner werden läßt. So hatte ich das in den frühen 90ern beim 286-Rechner gemacht, dessen Echtzeituhr sehr ungenau war. Beim Start die Uhr nachgestellt, einen Korrekturwert berechnet und das immer wieder. nach ein paar Wochen lief das recht genau.

Bei uns ist das in erster Linie ein Platzproblem. Wir haben schon das kleinste ESP8266 Modul im Einsatz und das ist noch eher zu groß.

So herum ist es trivial, das steht in jedem zweiten Tutorial zum ESP, wie das geht.

Marte

Marte Schwarz schrieb:

Nein. Für eine im Browser geladene Webseite ist es (über Date.now()) trivial, Datum und Uhrzeit des Rechners zu erfahren, auf dem der Browser läuft. Ebenso einfach ist es für die Webseite (Stichwort XHR) eine HTTP-Anfrage beim Server für eine bestimmte URL mit beliebigen Parametern auszulösen, in diesem Fall eben mit dem Ergebnis von Date.now().

Wie der Server die Anfrage verarbeiten muss, um die Uhr zu stellen, hängt davon ab, wie Ihr den Webserver auf dem ESP8266 implementiert habt. Sicherlich wird der Server Callbacks anbieten, wenn eine bestimmte URL aufgerufen wird.

Dass man (wenn man keine weitere Absicherung einbaut) über diese URL Datum und Uhrzeit des Servers beliebig manipulieren kann, ist Dir sicher bewusst.

Christian

Hi Christian,

Vielen Dank, ich geb das mal so weiter. Klingt sehr konstruktiv.

Damit kann ich gut leben. Das Teil geht ja nicht in Internet. Es ist ein lokaler Sensor, der seine Daten an einen Client weitergibt, der sich mit ihm als Server verbindet und die html-Seite abruft, über die er konfiguriert werden kann und auf einer anderen Seite die Messwerte der Vergangenen Tage zur Verfügung stellt. Diese können dann heruntergeladen werden, stehen aber auch direkt im Browser bereits graphisch aufbereitet zur Verfügung. Schon aus Energieeinspargründen ist die WLAN-Einheit mitsamt Webserver nur dann aktiv, wenn man den Sensor (nach spätestens einer Woche Betrieb in die Ladeschale steckt (induktives Laden) und selbst dann auch nur in einem 15 Minuten Zeitfenster. Dabei hätte ich es gerne, dass der ESP die Uhrzeit vom Client ausliest udn übernimmt, ohne dass man weiter etwas unternehmen müsste. Der Client wird in 9x% aller Fälle ein Schlaufon sein, das in der Regel seine Uhrzeit aus dem Netz bezieht, also denkbar unwahrscheinlich, dass da etwas falsch läuft. Da außer den Messdaten auch keine Daten abzugreifen sind und die meisten Menschen mit den Daten auch nichts anzufangen wüssten, halte ich das Angriffs- und Manipulationsrisiko für überschaubar.

Marte

Marte Schwarz schrieb:

Schnell herunter getippte Minimalimplementierung:

formatting link
. Was fehlt: 1. Fehlerbehandlung: Die Antwort des Servers wird nicht ausgewertet. 2. Serverseitiger Code: Der Server muss beim Aufruf der timeset-URL seine Uhr stellen. (Natürlich stellt mein Server hier nicht seine Uhr um.)

Grüße Christian

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required