Mal fix die Zeit abfragen?

Gast #5701586
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
  }
Gast #5701599
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
#5704403
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
Gast #5704411
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.

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