Nachdem ich Code für den ESP8266 publiziert habe (klick), der einen NTP Zeitserver abfragt, sind immer wieder Anfragen gekommen. Die NTP Abfrage liefert UTC Zeit und die Fragesteller wollten eine Umrechnung auf lokale Zeit inklusive automatischer Sommer/Winterzeit Umstellung.
Ich es jetzt endlich mal geschafft aus einem noch nicht publizierten Projekt ein Demoprogramm für die Fragestellung zu bauen.
Der Demo-Code basiert auf dem Webserver Beispiel. Für die Uhrzeit Funktionalität werden drei Komponenten benutzt:
1. Der NTP Code aus dem o.g. Beispiel.
2. Die timelib Bibliothek von M. Margolis. Diese kann über die Arduino IDE installiert werden.
3. Die Timezone Bibliothek von J. Christensen. Diese muss manuell installiert werden; die Bibliothek gibt es hier: https://github.com/JChristensen/Timezone
Die Programmlogik:
In der timelib Bibliothek kann man einen sogenannten Sync-Provider definieren. Diese Funktion gibt die aktuelle Uhrzeit zurück. Weiterhin wird definiert, wie oft die Uhrzeit synchronisiert werden soll. Wir setzen das Intervall auf täglich (86400 Sekunden). In der Funktion wird die Zeit von einem NTP Server abgefragt. Die timelib Bibliothek ist damit auf UTC gesetzt.
Wenn die Webseite aufgerufen wird, wird die Zeit mit Hilfe der timezone Bibliothek umgerechnet. Die Funktionen der timelib können genutzt werden, um die umgerechnete Zeit in ein lesbares Format umzuwandeln.
Der ESP8266 Webserver ist per http://localtime/ erreichbar, wenn der Router lokale Netzwerknamen unterstützt (@Vodafone: Eure Easyboxen sollten das so langsam mal lernen – AVM kann’s doch auch). Ansonsten die IP aus dem seriellen Log nehmen.
Hier gibt es den Code: ESP_NTP_LocalTime_Demo
Viel Erfolg!