Forum: PC-Programmierung Mal fix die Zeit abfragen?


von Christian J. (Gast)


Lesenswert?

Hallo,

Ich möchte nicht mit NTP Server herum wirbeln, sondern einfach nur mal 
eben per HTTP Request die lokale Uhrzeit aus dem Netz abfragen als 
String. Eigentlich steht die doch im HTML Response Header drin, oder?

HTTP/1.1 200 OK
Server: openresty
Date: Sat, 19 Jan 2019 00:13:14 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1232
Connection: close

Kann man sich darauf verlassen, dass diese Folge immer so da steht in 
der gleichen Reihenfolge? Oder ist das bei jedem Server anders?

Ist für mich alles Neuland, sorry.....

Gruss,
Christian
1
/* Sende den HTTP GET request */
2
    client.println(MakeHTTPRequest());
3
    client.println();
4
5
  /*  Der Server antwortet mit diesem Header 
6
    HTTP/1.1 200 OK
7
    Server: openresty
8
    Date: Sat, 19 Jan 2019 00:13:14 GMT
9
    Content-Type: application/json; charset=utf-8
10
    Content-Length: 1232
11
    Connection: close
12
  */
13
14
  /* Pruefe die erste Zeile auf die OK Meldung */
15
  String line = client.readStringUntil('\n');
16
    if (line != F("HTTP/1.1 200 OK\r")) {
17
    debug(F("Unerwartete Antwort vom Host: "));
18
    debugln(line);
19
    client.stop();
20
    return 0;
21
    }
22
23
  /* Zeitstempel finden */  
24
  if (!client.find("Date: "))
25
    return 0;
26
  
27
  /* Hole den String mit der aktuellen Zeit */
28
  line = client.readStringUntil('\n');
29
  DateStampNow = line;  
30
  
31
  /* Suche die Leerzeile zum Content, Header überlesen */
32
  if (!client.find("\r\n\r\n")) {
33
        client.stop();
34
    return 0;
35
  }

von Irgendwer (Gast)


Lesenswert?

https://tools.ietf.org/html/rfc2616#page-20
Verlassen kannst du dich hier eigentlich auf garnichts. Noch nicht 
einmal darauf jeder erdenkliche Server sich an eine der in der Spec 
möglichen Varianten hält (und noch weniger darauf das die Locale Zeit 
der Server auch wirklich genau ist, die richtige Zeitzoneneinstellung 
ist usw.)

von Stefan (Gast)


Lesenswert?

tlsdate

sourcen sollten verfügbar sein

Stefan

von Christian J. (Gast)


Lesenswert?

Nach allen RFCxxx reicht es zumindest den ersten : zu suchen und dann 2 
zurück zu gehen, vorher auf GMT zu prüfen.....

Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format

von Christian J. (Gast)


Lesenswert?

Stefan schrieb:
> tlsdate
>
> sourcen sollten verfügbar sein

Mal einen Blick auf den Umfang geworfen? Ich dachte da so mehr an 20 
Zeilen Code..... läuft ja auf dem ESP 8266....

https://github.com/ioerror/tlsdate

von ztp (Gast)


Lesenswert?

... und obendrein: TLS<>secure :-)

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Vier Buchstaben: sntp

von Rolf M. (rmagnus)


Lesenswert?

Christian J. schrieb:
> läuft ja auf dem ESP 8266....

Warum postest du dann im Unterform PC-Programmierung?

von Christian J. (Gast)


Lesenswert?

Rolf M. schrieb:
> Warum postest du dann im Unterform PC-Programmierung?

Weil ich darüber nachgedacht habe :-) Es geht nur um Software, völlig 
egal worauf die läuft. Also da wo über "Programmierung" gesprochen wird.

von Stefan (Gast)


Lesenswert?

Christian J. schrieb:
> Mal einen Blick auf den Umfang geworfen? Ich dachte da so mehr an 20
> Zeilen Code..... läuft ja auf dem ESP 8266....

na dann wissen wir das ja jetzt auch ...
Trotzdem sollten die Sourcen alle Deine Fragen beantworten da sich ja 
schonmal jemand Gedanken gemacht hat

Stefan

von Michael U. (amiga)


Lesenswert?

Hallo,

Christian J. schrieb:
> Mal einen Blick auf den Umfang geworfen? Ich dachte da so mehr an 20
> Zeilen Code..... läuft ja auf dem ESP 8266....

mit ESP8266 bist Du hier ewas falsch...
Da ist von Hause aus die POSIX time lib dabei.
1
#include <time.h>
2
...
3
setup(){
4
// Start Time service.
5
  configTime(timezone * 3600, 0, "pool.ntp.org", "time.nist.gov");
6
  setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 0);          // Zeitzone MEZ setzen
7
8
  time_t now = time(nullptr);
9
  Serial.println(ctime(&now));
10
}
11
// oder eben die timeinfo Struktur füllen:
12
  time_t now = time(nullptr);
13
  struct tm * timeinfo;
14
  timeinfo = localtime(&now);
15
    Serial.printf("%02d:%02d:%02d",timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
16
    Serial.println();  
17
}
20 Zeilen für die Geschichte bekomme ich nicht so recht hin, sind nur 8 
Zeilen geworden... WiFi habe ich mal weggelassen...

default wird alle Stunde die Zeit vom NTP geholt, sonst läuft die Uhr 
eben frei. Die routinen sind intern sehr gut kompensiert was Laufzeiten 
anderer Software angeht, sie läuft damit mit der Genauigkeit des 
ESP-Systemtaktes vom Quarz.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von Christian J. (Gast)


Lesenswert?

Michael U. schrieb:
> mit ESP8266 bist Du hier ewas falsch...
> Da ist von Hause aus die POSIX time lib dabei.

Naja.... unter Linux auf PC ist das auch einfacher. Bin aber schon 
zufrieden, ich kriege die Uhrzeit aus einem HP Header recht genau heraus 
und da ich ja eh nur für mich schreibe muss da auch nichts kompatibel 
sein. Klappt alles schon prima.

von Michael U. (amiga)


Lesenswert?

Hallo,

Christian J. schrieb:
> Naja.... unter Linux auf PC ist das auch einfacher.

bin zwar nicht der Linux-Freak, aber Linux benutzt doch auch die POSIX 
Time Lib?

Gruß aus Berlin
Michael

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.