Forum: Mikrocontroller und Digitale Elektronik NTP Uhr geht 2 stunden zurück


von nilo (Gast)


Lesenswert?

Hi,

Kann mir jemand sagen warum bei diesem Beispielcode die Uhr 2 Stunden 
zurück geht?
1
 #include <NTPClient.h>
2
// change next line to use with another board/shield
3
#include <ESP8266WiFi.h>
4
//#include <WiFi.h> // for WiFi shield
5
//#include <WiFi101.h> // for WiFi 101 shield or MKR1000
6
#include <WiFiUdp.h>
7
8
const char *ssid     = "FRITZ!Box 7490";
9
const char *password = "oYYo8885";
10
11
WiFiUDP ntpUDP;
12
13
// By default 'pool.ntp.org' is used with 60 seconds update interval and
14
// no offset
15
NTPClient timeClient(ntpUDP);
16
17
// You can specify the time server pool and the offset, (in seconds)
18
// additionaly you can specify the update interval (in milliseconds).
19
// NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
20
21
void setup(){
22
  Serial.begin(115200);
23
  WiFi.begin(ssid, password);
24
25
  while ( WiFi.status() != WL_CONNECTED ) {
26
    delay ( 500 );
27
    Serial.print ( "." );
28
  }
29
30
  timeClient.begin();
31
}
32
33
void loop() {
34
  timeClient.update();
35
36
  Serial.println(timeClient.getFormattedTime());
37
38
  delay(1000);
39
}

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


Lesenswert?

Lokale Zeitzone + Sommerzeit = 2 Stunden vor GMT.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

NTP liefert UTC

von leo (Gast)


Lesenswert?

nilo schrieb:
> Kann mir jemand sagen warum bei diesem Beispielcode die Uhr 2 Stunden
> zurück geht?

Google mal: ntpclient arduino timezone

Wir haben grad MESZ (+2 UTC)

leo

von nilo (Gast)


Lesenswert?

Hi,

Okay entweder bin ich zu blöd dafür das zu suchen oder es gibt 
nichts(wohl eher ersteres)

von Theor (Gast)


Lesenswert?

nilo schrieb:
> Hi,
>
> Okay entweder bin ich zu blöd dafür das zu suchen oder es gibt
> nichts(wohl eher ersteres)

Nein. Die Antworten sind weder so noch so zu verstehen.

Mit der Bemerkung über "UTC" bzw. "MESZ (UTC +2) will man Dir vielmehr 
zu verstehen geben, dass es sich hier nicht um einen Fehler im Programm 
handelt.
Vielmehr hast Du einfach nur nicht berücksichtig, dass ein NTP-Server 
die UTC-Zeit liefert und nicht die lokale Zeit. Du brauchst also nur 
zwischen (wann war das? Mai?) und Oktober 2 Stunden zu addieren und 
ansonsten 1 Stunde um auf die lokale Zeit in Deutschland (und einigen 
anderen Ländern) zu kommen.

Voilà und der Frosch ist gegessen. :-)

Falls Du etwas mehr darüber wissen willst, lies einfach was über 
Zeitzonen und Sommer- bzw. Winterzeit.

von Joachim B. (jar)


Lesenswert?

Theor schrieb:
> Du brauchst also nur
> zwischen (wann war das? Mai?) und Oktober 2 Stunden zu addieren

ist aber gefährlich zur Umstellung MEZ (Zeitzone +1)

pünktlich um 3 Uhr wird auf 2 Uhr umgestellt, es wird wieder 3 und wer 
da wieder umstellt ....... :)

: Bearbeitet durch User
von nilo (Gast)


Lesenswert?

Aber dann passt die zeit doch bei der Nächsten Umstellung wieder nicht 
oder ?

wollten die diesen blödsinn nicht abschaffen ?

von Axel S. (a-za-z0-9)


Lesenswert?

nilo schrieb:
> Aber dann passt die zeit doch bei der Nächsten Umstellung wieder nicht
> oder ?

Oder

Die Zeit paßt immer. Es ist halt UTC. Daß du Sonderlocken willst, 
interessiert den NTP Client nicht die Bohne. Und wenn du unfähig bist, 
deine lokale Zeitzone herauszubekommen und von UTC dahin umzurechnen, 
dann ist das ganz allein dein Problem.

von frequent guest (Gast)


Lesenswert?

Schau Dir https://github.com/JChristensen/Timezone an, das sollte 
helfen.

von Michael U. (amiga)


Lesenswert?

Hallo,

das ESP8266 SDK bringt die komplette Posix-Timelib mit, auch in der 
ArduinoIDE.
1
#include <ESP8266WiFi.h>
2
#include <time.h>
3
4
#define WIFI_SSID "xxxxxxxxxx"
5
#define WIFI_PASSWORD "xxxxxxxxxx"
6
7
//######################################################################
8
9
void setup()
10
{
11
  Serial.begin(115200);
12
  Serial.println("\r\nReset");
13
14
// Start WiFi
15
  WiFi.mode(WIFI_STA);
16
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
17
18
  Serial.print("Wifi connect.");
19
  while (WiFi.status() != WL_CONNECTED)
20
  {
21
    delay(500);
22
    Serial.print(".");
23
  }
24
  Serial.println("OK");
25
  Serial.print("IP: ");
26
  Serial.println(WiFi.localIP());
27
28
// Start Time service.
29
  configTime(0, 0, "pool.ntp.org", "time.nist.gov");
30
  setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 0);          // Zeitzone MEZ setzen
31
32
  Serial.println("\nWaiting for time");
33
34
  while (!time(nullptr)) // vorsichtshalber auf die Initialisierund der Lib warten
35
  {
36
    Serial.print(".");
37
    delay(500);
38
  }
39
  Serial.println("OK");
40
  delay (1000); // Es kann einen Moment dauern, bis man die erste NTP-Zeit hat, solange bekommt man noch eine ungültige Zeit
41
  
42
  time_t now = time(nullptr);
43
  Serial.println(ctime(&now));
44
}
45
46
//----------------------------------------------------------------------
47
48
void loop()
49
{ 
50
  static byte old_sekunde = 99; 
51
  
52
  time_t now = time(nullptr);
53
  struct tm * timeinfo;
54
  timeinfo = localtime(&now);
55
56
  if (old_sekunde != timeinfo->tm_sec)
57
  {    
58
    Serial.printf("%02d:%02d:%02d",timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
59
    Serial.println();  
60
    old_sekunde = timeinfo->tm_sec;
61
  }
62
}

Die Ausgabe in der loop() ist nur als Besipiel, näheres zur posix-timlib 
findet man in Netz.

Gruß aus Berlin
Michael

von Urlauber (Gast)


Lesenswert?

nilo schrieb:
> Kann mir jemand sagen warum bei diesem Beispielcode die Uhr 2 Stunden
> zurück geht?

Komisch, hier auf Island liefert das Programm die richtige Zeit.

von Manfred (Gast)


Lesenswert?

Urlauber schrieb:
> Komisch, hier auf Island liefert das Programm die richtige Zeit.

Kasper, sehr hilfreich - die Zeitzone von Island ist UTC / GMT, 
Sommerzeit gibt es dort nicht.

nilo schrieb:
> warum bei diesem Beispielcode die Uhr 2 Stunden zurück geht?

Befasse Dich aus folgendem Beispiel:
Michael U. schrieb:
1
setenv("TZ", "CET-1CEST,M3.5.0,M10.5.0/3", 0);  // Zeitzone MEZ setzen

mit der variable "setenv" und suche nach, wie die vergleichbare Funktion 
in Deinem Beispiel heisst, dazu gibt es sogar einen Kommentar in Deinem 
Quelltext.

Kopieren und Verstehen, zwei Gegensätze treffen aufeinander :-(

von Thomas E. (thomase)


Lesenswert?

Manfred schrieb:
> Kasper, sehr hilfreich - die Zeitzone von Island ist UTC / GMT,
> Sommerzeit gibt es dort nicht.

Boahh. Und ich dachte, das hätte was mit dem Eyjafjallajökull zu tun.

von Axel S. (a-za-z0-9)


Lesenswert?

Manfred schrieb:
> Urlauber schrieb:
>> Komisch, hier auf Island liefert das Programm die richtige Zeit.
>
> Kasper, sehr hilfreich - die Zeitzone von Island ist UTC / GMT,
> Sommerzeit gibt es dort nicht.

Cool. Endlich hat einer den Witz erklärt.
Dann kann ich jetzt beruhigt ins Bett gehen.

von Info (Gast)


Lesenswert?

Michael U. schrieb:
> das ESP8266 SDK bringt die komplette Posix-Timelib mit, auch in der
> ArduinoIDE.

Super, danke!
Damit sind endlich die ganzen unvollständigen "NTP"-Implementierungen 
hinfällig (ohne Laufzeitkorrektur). Leider weiß davon fast niemand. Und 
selbst, als ich danach gesucht habe, fand ich nur wenig Infos dazu.

von Info (Gast)


Lesenswert?


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.