Auf Empfehlung wollte ich die esp time core Library verwenden um vom ntp die aktuelle Zeit unter Berücksichtigung der Sommer-/Winterzeit zu erhalten. Aber irgendwie verstehe ich nicht alles, daher hier ein paar Fragen. Vielleicht ist jemand so nett und kann mir weiter helfen.
Zunächst hier der von mir verwendete Code:
/*
NTP TZ DST - bare minimum
NetWork Time Protocol - Time Zone - Daylight Saving Time
Our target for this MINI sketch is:
- get the SNTP request running
- set the timezone
- (implicit) respect daylight saving time
- how to "read" time to be printed to Serial.Monitor
This example is a stripped down version of the NTP-TZ-DST (v2)
and works for ESP8266 core 2.7.4
by noiasca
2020-09-22
*/
#ifndef STASSID
#define STASSID "<ssid>" // set your SSID
#define STAPSK "<passwort>" // set your wifi password
#endif
/* Configuration of NTP */
#define MY_NTP_SERVER "gmx.org"
#define MY_TZ "CET-1CEST,M3.5.0/02,M10.5.0/03" // https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
/* Necessary Includes */
#include <ESP8266WiFi.h> // we need wifi to get internet access
#include <time.h> // time() ctime()
/* Globals */
time_t now; // this is the epoch
tm tm; // the structure tm holds time information in a more convient way
void showTime() {
time(&now); // read the current time
localtime_r(&now, &tm); // update the structure tm with the current time
Serial.print("year:");
Serial.print(tm.tm_year + 1900); // years since 1900
Serial.print("\tmonth:");
Serial.print(tm.tm_mon + 1); // January = 0 (!)
Serial.print("\tday:");
Serial.print(tm.tm_mday); // day of month
Serial.print("\thour:");
Serial.print(tm.tm_hour); // hours since midnight 0-23
Serial.print("\tmin:");
Serial.print(tm.tm_min); // minutes after the hour 0-59
Serial.print("\tsec:");
Serial.print(tm.tm_sec); // seconds after the minute 0-61*
Serial.print("\twday");
Serial.print(tm.tm_wday); // days since Sunday 0-6
if (tm.tm_isdst == 1) // Daylight Saving Time flag
Serial.print("\tDST");
else
Serial.print("\tstandard");
Serial.println();
}
void setup() {
Serial.begin(115200);
Serial.println("\nNTP TZ DST - bare minimum");
// start network
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPSK);
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print ( "." );
}
Serial.println("\nWiFi connected");
// by default, the NTP will be started after 60 secs
strcpy(MY_NTP_SERVER, line.c_str());
configTime(MY_TZ, MY_NTP_SERVER);
}
void loop() {
showTime();
delay(1000); // dirty delay
}
Der Code funktioniert einwandfrei.
Bei mir wird die ntp zeit nur einmal beim einschalten der Uhr geholt. Wie kann ich verhindern das die Zeit alle 60 Minuten (default) geholt wird?
angenommen der ntp server ist aus irgendeinem Grund nicht erreichbar und die Zeit kann nicht geholt werden. Wie frage ich ab ob das holen der Zeit vom ntp erfolgreich war?
kann man eine callback prozedur definieren die beim automatischen aktualisieren der zeit ausgeführt wird? So das zb eine LED Leuchtet wenn die Zeit vom ntp geholt wird.
Was muss ich wie defnieren wenn ich keine Sommer-/Winterzeitumstellung für europa nutzen möchte?
Wie kann ich (für Testzwecke) ein bestimmtes Datum anstatt der ntp Zeit verwenden? Ich müsste glaube ich now eine bestimmte Zeit/Datum zuweisen aber wie?
modi0:
1)
Bei mir wird die ntp zeit nur einmal beim einschalten der Uhr geholt. Wie kann ich verhindern das die Zeit alle 60 Minuten (default) geholt wird?
angenommen der ntp server ist aus irgendeinem Grund nicht erreichbar und die Zeit kann nicht geholt werden. Wie frage ich ab ob das holen der Zeit vom ntp erfolgreich war?
kann man eine callback prozedur definieren die beim automatischen aktualisieren der zeit ausgeführt wird? So das zb eine LED Leuchtet wenn die Zeit vom ntp geholt wird.
Was muss ich wie defnieren wenn ich keine Sommer-/Winterzeitumstellung für europa nutzen möchte?
Wie kann ich (für Testzwecke) ein bestimmtes Datum anstatt der ntp Zeit verwenden? Ich müsste glaube ich now eine bestimmte Zeit/Datum zuweisen aber wie?
Also müsste ich einfach eine sehr hohe Stundenzahl definieren? Finde ich irgendwie etwas Nachteilhaft dass man das nicht ganz unterbinden kann. Stört mich im aktuellen Fall aber nicht.
Diese Liste kenne ich. Aber welchen Eintrag muss ich nehmen wenn ich keine Sommer-/Winterzeitumstellung für Europa möchte?
zu 5
sntp_real_timestamp = 0 // dein Datum einstellen
void showTime() {
time(&now); // read the current time
localtime_r(&now, &tm); // update the structure tm with the current time
...
In diesem Fall, wie bekomme ich in now ein bestimmtes Datum? z.B. 21.10.2021 12:12:12
Eigentlich ging ich davon aus das time(&now); die aktuelle Zeit vom Server holt. Aber scheinbar holt configTime(MY_TZ, MY_NTP_SERVER); die Zeit vom ntp.
Angenommen ich möchte per Button die zeit manuell vom ntp holen. muss ich dann in der button routine einfach die zeile configTime(MY_TZ, MY_NTP_SERVER); aufrufen? oder geht das auch anders...
Wo finde ich eigentlich Hintergrundinformationen zu time.h und coredecls.h ? Durch studieren der Dateien ist es schwierig für einen Laien herauszufinden was es alles für Funktionen und Möglichkeiten gibt.
Diese Liste kenne ich. Aber welchen Eintrag muss ich nehmen wenn ich keine Sommer-/Winterzeitumstellung für Europa möchte?
<-01>1
In diesem Fall, wie bekomme ich in now ein bestimmtes Datum? z.B. 21.10.2021 12:12:12
Datum in einen Timestamp umrechnen.
sntp_real_timestamp = 0 // den Timestamp anstelle 0 einfügen.
Eigentlich ging ich davon aus das time(&now); die aktuelle Zeit vom Server holt. Aber scheinbar holt configTime(MY_TZ, MY_NTP_SERVER); die Zeit vom ntp.
config = Konfiguriert
Angenommen ich möchte per Button die zeit manuell vom ntp holen. muss ich dann in der button routine einfach die zeile configTime(MY_TZ, MY_NTP_SERVER); aufrufen? oder geht das auch anders...
Darüber habe ich mir noch keine Gedanken gemacht, wozu auch was manuell machen wenns doch automatisch geht.
Wo finde ich eigentlich Hintergrundinformationen zu time.h und coredecls.h ? Durch studieren der Dateien ist es schwierig für einen Laien herauszufinden was es alles für Funktionen und Möglichkeiten gibt.
Denkst du ich Laie habe das anders gemacht?
Ne Doku habe ich keine gefunden.
Nicht zu vergessen, Werner Rothschopf hat mir geholfen manches zu verstehen!
Woher weißt du das? Ich meine, welche Logik steckt dahinter und wo kann man das nachlesen?
Quote
Wo finde ich eigentlich Hintergrundinformationen zu time.h und coredecls.h ? Durch studieren der Dateien ist es schwierig für einen Laien herauszufinden was es alles für Funktionen und Möglichkeiten gibt.
Denkst du ich Laie habe das anders gemacht?
Dann aber eher mit einfachen code anfangen und je mehr man versteht bei der Analyse umso eher kann man dann auch komplexen code analysieren. Da ich noch ganz am Anfang stehe, ist der Code dieser librarys für mich noch ziemlich unverständlich.
Danke für deine Hilfe. Sollte ich noch Fragen haben, melde ich mich