Hallo, ich benutzte die NTPClient library von Fabrice Weinberg wie in den Beispielen beschrieben. Es gibt keine Fehlermeldungen aber die Funktionen geben mir immer den 01.01.1970 / 00:00 Uhr (Unix epoch) zurück plus/minus den Timezone Offset, den ich einstelle. Ich vermute mal, dass das der default ist, wenn er nix vom Zeitserver kriegt? Ich habe es mit verschiedenen pool-URLs versucht, wobei das standard "pool.ntp.org" ja funktionieren sollte, auch direkt mit aufgelöster IP-Adresse, immer das selbe Ergebnis. Dabei zählen die Sekunden durchaus hoch, wobei ich aber annehme, dass das innerhalb der Lib lokal passiert. Ich habe mal mit der pinger library getestet, dass ausgehender Verkehr übers Gateway und DNS-Lookup grundsätzlich funktionieren. Kennt wer dieses Verhalten oder hat vielleicht noch Hinweise, wo ich schauen könnte? Besten Dank!
Hallo, kannst du Code zeigen, der nicht funktioniert?
Lara G. schrieb: > Kennt wer dieses Verhalten oder hat vielleicht noch Hinweise Dein NTP-Client hat ganz offensichtlich keine Verbindung zum NTP-Server. Überprüfen: * default-Route (normalerweise die IP deines Routers) * DNS-Server
Harry L. schrieb: > Lara G. schrieb: >> Kennt wer dieses Verhalten oder hat vielleicht noch Hinweise > > Dein NTP-Client hat ganz offensichtlich keine Verbindung zum NTP-Server. > > Überprüfen: > * default-Route (normalerweise die IP deines Routers) > * DNS-Server Hab ich, scheint kein Problem zu sein, hab sogar mal einen anderen DNS Server am Router eingestellt. Und gerade eben hab ich mal den Code aus Post #4 ausprobiert und der funktioniert einwandfrei, auch mit dem Pool den ich benutze: https://forum.arduino.cc/t/esp32-cannot-connect-to-ntp-server-with-fixed-ip/591181/4
Nachtschwärmer schrieb: > Hallo, > > kannst du Code zeigen, der nicht funktioniert?
1 | #include <NTPClient.h> |
2 | #include <WiFiUdp.h> |
3 | |
4 | WiFiUDP ntpUDP; |
5 | NTPClient timeClient(ntpUDP, "pool.ntp.org"); |
6 | |
7 | |
8 | String weekDays[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; |
9 | |
10 | String months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"}; |
11 | |
12 | void NTP_setup() |
13 | {
|
14 | timeClient.begin(); |
15 | timeClient.setTimeOffset(3600); |
16 | }
|
17 | |
18 | String NTP_getDateTime() |
19 | {
|
20 | timeClient.update(); |
21 | |
22 | time_t epochTime = timeClient.getEpochTime(); |
23 | Serial.print("Epoch Time: "); |
24 | Serial.println(epochTime); |
25 | |
26 | String formattedTime = timeClient.getFormattedTime(); |
27 | Serial.print("Formatted Time: "); |
28 | Serial.println(formattedTime); |
29 | |
30 | int currentHour = timeClient.getHours(); |
31 | Serial.print("Hour: "); |
32 | Serial.println(currentHour); |
33 | |
34 | int currentMinute = timeClient.getMinutes(); |
35 | Serial.print("Minutes: "); |
36 | Serial.println(currentMinute); |
37 | |
38 | int currentSecond = timeClient.getSeconds(); |
39 | Serial.print("Seconds: "); |
40 | Serial.println(currentSecond); |
41 | |
42 | String weekDay = weekDays[timeClient.getDay()]; |
43 | Serial.print("Week Day: "); |
44 | Serial.println(weekDay); |
45 | |
46 | struct tm *ptm = gmtime((time_t *)&epochTime); |
47 | |
48 | int monthDay = ptm->tm_mday; |
49 | Serial.print("Month day: "); |
50 | Serial.println(monthDay); |
51 | |
52 | int currentMonth = ptm->tm_mon + 1; |
53 | Serial.print("Month: "); |
54 | Serial.println(currentMonth); |
55 | |
56 | String currentMonthName = months[currentMonth - 1]; |
57 | Serial.print("Month name: "); |
58 | Serial.println(currentMonthName); |
59 | |
60 | int currentYear = ptm->tm_year + 1900; |
61 | Serial.print("Year: "); |
62 | Serial.println(currentYear); |
63 | |
64 | String currentDate = String(currentYear) + "-" + String(currentMonth) + "-" + String(monthDay); |
65 | Serial.print("Current date: "); |
66 | Serial.println(currentDate); |
67 | |
68 | Serial.println(""); |
69 | |
70 | return timeClient.getFormattedTime(); |
71 | }
|
Bitte die Nebeneffekte in NTP_getDateTime() zu entschuldigen :).
Beitrag #7230673 wurde von einem Moderator gelöscht.
Zenci schrieb im Beitrag #7230673: > Mach das: >
1 | > String NTP_getDateTime() |
2 | > { |
3 | > timeClient.update(); |
4 | > |
> NICHT. > > Sonst synct der jedesmal. NOGO! mach das so: >
1 | > String NTP_getDateTime() |
2 | > { |
3 | > String formattedTime = timeClient.getFormattedTime(); |
4 | > |
Es funktioniert! Vielen Dank! Bin mir allerdings nicht sicher, dass ich meinen Fehler richtig verstanden habe. Also timeClient.update() wandert in die NTP_setup Funktion. NTP_setup wird zum Anwendungsstart aufgerufen, NTP_getDateTime wird aus einem callback handler eines Webservers heraus aufgerufen. Liegt da der wesentliche Unterschied?
Beitrag #7230711 wurde von einem Moderator gelöscht.
Vergiss die pseudo NTP Bibliotheken, NTP ist im SDK schon drin, mit TZ. Irgendwo gibt's ein Beispiel.
just the tip schrieb: > Vergiss die pseudo NTP Bibliotheken, NTP ist im SDK schon drin, mit TZ. > Irgendwo gibt's ein Beispiel. Wo hast du das gesehen? Schön wäre es, wenn ich gleich vernünftige Zeitzonenunterstützung bekäme. Ohne Zugriff auf eine aktuell gehaltene tz DB stell ich mir das schwierig/wackelig vor.
Hallo, die Posix-Timelib ist schon sehr lange im SDK.
1 | #include <time.h> |
2 | ... |
3 | #define MY_NTP_SERVER "at.pool.ntp.org" |
4 | #define MY_TZ "CET-1CEST,M3.5.0/02,M10.5.0/03" |
5 | |
6 | setup() |
7 | { |
8 | configTime(MY_TZ, MY_NTP_SERVER);... |
9 | } |
Habe gerade zufällig noch eine recht gute Zusammenfassung gefunden: https://werner.rothschopf.net/201802_arduino_esp8266_ntp.htm Gruß aus Berlin Michael
:
Bearbeitet durch User
Großartig! Frage mich, wieso meine Suche mich immer wieder auf diese blöde Lib geführt hat, wenn das Gute so nah liegt. Vielen Dank für den Hinweis!
Ich hatte auch mal- vor ueber einem Jahr - mit einem ESP8266 und einem fertigem LCD eine NTP-Clock gebaut: https://lehwalder.wordpress.com/2021/06/02/solderless-esp8266-ntp-lcd-clock/
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.