Wie NTPClient timeClient ntp-server später im Setup teil definieren?

Ich habe eine Uhr Programmiert. Funktioniert auch. Allerdings habe ich eine config.txt Datei auf den spiffs liegen, die im Setup teil gelesen wird. Darin steht auch der ntp Server zu dem verbunden werden soll um die aktuellen Zeitangaben zu holen. Wie kann ich den ntp-server im Setup teil des Programms für den timeclient definieren bzw. ändern?

Hier der Code vom der verwendeten library: GitHub - arduino-libraries/NTPClient: Connect to a NTP server

#include <NTPClient.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char *ssid     = "<SSID>";
const char *password = "<PASSWORD>";
#define NTP_SERVER "de.pool.ntp.org"
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, NTP_SERVER , GTMOffset * 60 * 60, 60 * 60 * 1000);
// You can specify the time server pool and the offset, (in seconds)
// additionaly you can specify the update interval (in milliseconds).
// NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
void setup(){
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
    Serial.print ( "." );
  }
// Hier würde ich gerne einen anderen NTP Server für den timeClient definieren.
  timeClient.begin();
}
void loop() {
  timeClient.update();
  Serial.println(timeClient.getFormattedTime());
  delay(1000);
}

de.pool.ntp.org wird oben definiert aber es kann sein das ich nachträglich im setup teil einen anderen ntp-server einstellen möchte (zb der aus der config.txt). Wie kann ich das verwirklichen?

Indem Du anstelle von "de.pool.ntp.org" ein char-Array verwendest.
z.B. (Länge anpassen)

char ntpServer[20] = "de.pool.ntp.org"; // 19 Nutzzeichen
....
strcpy(ntpServer, andererServer);

anderer Server ist der, den Du aus Deiner Datei liest.

Gruß Tommy

Funktioniert einwandfrei. Danke für die schnelle Hilfe.

String line = f.readStringUntil('\n');
strcpy(NTP_SERVER, line.c_str());

Ok, danke für die Rückmeldung.

Gruß Tommy

modi0:
de.pool.ntp.org wird oben definiert aber es kann sein das ich nachträglich im setup teil einen anderen ntp-server einstellen möchte ..

Darf man Fragen für was man das gebrauchen kann.

Steckt da ein Sinn dahinter oder ist das nur zum üben?

darf ich einfach in den Raum werfen, dass du am ESP8266 keine externe Library für NTP brauchst, dass das der ESP Core alles out of the box könnte? Sogar mit Sommerzeit/Winterzeit?

Nachzulesen bei Fips oder bei mir ESP8266 NTP Abfrage mit Sommerzeit / Winterzeit (NodeMCU, Wemos D1)

Habe nun das gleiche Problem mit folgendem Code für die Zeitzone:

TimeChangeRule CEST = { "CEST", Last, Sun, Mar, 2, 120 };     // Central European Summer Time begin
TimeChangeRule CET = { "CET ", Last, Sun, Oct, 3, 60 };       // Central European Standard Time begin
Timezone CE(CEST, CET);

Und zwar kann man in den Optionen der Uhr die Sommerzeitumstellung deaktivieren (falls sie mal abgeschafft wird). Dachte mir, dass ich das am einfachsten mit Timezone CE(CET, CET); realisiere. Aber das müsste ich wieder im Setup teil machen und somit ist CE dann nicht global. Gibt es dafür auch eine Lösung?

Darf man Fragen für was man das gebrauchen kann.

Steckt da ein Sinn dahinter oder ist das nur zum üben?

Man kann in den Optionen der Uhr den ntp Server ändern. Mir war nicht klar wie ich diese Änderung ausführe. Oder was meinst du?

darf ich einfach in den Raum werfen, dass du am ESP8266 keine externe Library für NTP brauchst, dass das der ESP Core alles out of the box könnte? Sogar mit Sommerzeit/Winterzeit?

Nachzulesen bei Fips oder bei mir ESP8266 NTP Abfrage mit Sommerzeit / Winterzeit (NodeMCU, Wemos D1)

Danke für die Info. Werde ich das nächste mal berücksichtigen. Habe mir den Link gespeichert. Aber jetzt bau ich deswegen nicht alles extra wieder um. Bin eigentlich fertig wenn ich das Problem gelöst habe.
Habe einiges dazu gelernt mit diesem Projekt und darum geht es mir auch.

modi0:
Aber jetzt bau ich deswegen nicht alles extra wieder um. Bin eigentlich fertig wenn ich das Problem gelöst habe.

Schade, es ist eigentlich ganz einfach!

Die library die ich derzeit verwende ist eigentlich auch einfach.
Das was du verlinkt hast, sieht auch einfach aus. Werde es auf jeden Fall beim nächsten mal verwenden.

Finde es aber auch wichtig Probleme zu lösen, davon lernt man ja schließlich auch. Ein derartiges Problem könnte jederzeit wieder auftreten. Daher wüsste ich gerne wie man es löst.

Hier nochmal das Problem:
Habe nun das gleiche Problem mit folgendem Code für die Zeitzone:

TimeChangeRule CEST = { "CEST", Last, Sun, Mar, 2, 120 };     // Central European Summer Time begin
TimeChangeRule CET = { "CET ", Last, Sun, Oct, 3, 60 };       // Central European Standard Time begin
Timezone CE(CEST, CET);

Und zwar kann man in den Optionen der Uhr die Sommerzeitumstellung deaktivieren (falls sie mal abgeschafft wird). Dachte mir, dass ich das am einfachsten mit Timezone CE(CET, CET); realisiere. Aber das müsste ich wieder im Setup teil machen und somit ist CE dann nicht global. Gibt es dafür auch eine Lösung?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.