NTP - Variablen übernehmen

Hallo,
ich habe das fertige Sketch zu NTP vom ESP32 library genommen. Das funktioniert soweit auch - die Zeitabfrage passt.
Wie bekomme ich die einzelnen Werte für zB H, M und S in eigene Variablen, damit ich das weiterverwenden kann. (zur Hochrechnung der Zeit mit der Laufzeit des ESP - man soll den NTP Server lt Info nicht dauernd abfragen)

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("No time available (yet)");
    return;
  }
  //Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");  // %A = Tag mit Namen - zB Montag
  Serial.print("ZEITABFRAGE: ");
  Serial.println(&timeinfo, "%B %d %Y %H:%M:%S");
  
  } // end void

Serial Monitor ergibt:

January 09 2024 00:54:07

Der gesamte Sketch aus dem ESP library:

#include <WiFi.h>
#include "time.h"
#include "sntp.h"

const char* ssid       = "YOUR_SSID";
const char* password   = "YOUR_PASS";

const char* ntpServer1 = "pool.ntp.org";
const char* ntpServer2 = "time.nist.gov";
const long  gmtOffset_sec = 3600;
const int   daylightOffset_sec = 3600;

const char* time_zone = "CET-1CEST,M3.5.0,M10.5.0/3";  // TimeZone rule for Europe/Rome including daylight adjustment rules (optional)

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("No time available (yet)");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

// Callback function (get's called when time adjusts via NTP)
void timeavailable(struct timeval *t)
{
  Serial.println("Got time adjustment from NTP!");
  printLocalTime();
}

void setup()
{
  Serial.begin(115200);

  // set notification call-back function
  sntp_set_time_sync_notification_cb( timeavailable );

  /**
   * NTP server address could be aquired via DHCP,
   *
   * NOTE: This call should be made BEFORE esp32 aquires IP address via DHCP,
   * otherwise SNTP option 42 would be rejected by default.
   * NOTE: configTime() function call if made AFTER DHCP-client run
   * will OVERRIDE aquired NTP server address
   */
  sntp_servermode_dhcp(1);    // (optional)

  /**
   * This will set configured ntp servers and constant TimeZone/daylightOffset
   * should be OK if your time zone does not need to adjust daylightOffset twice a year,
   * in such a case time adjustment won't be handled automagicaly.
   */
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer1, ntpServer2);

  /**
   * A more convenient approach to handle TimeZones with daylightOffset 
   * would be to specify a environmnet variable with TimeZone definition including daylight adjustmnet rules.
   * A list of rules for your zone could be obtained from https://github.com/esp8266/Arduino/blob/master/cores/esp8266/TZ.h
   */
  //configTzTime(time_zone, ntpServer1, ntpServer2);

  //connect to WiFi
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");

}

void loop()
{
  delay(5000);
  printLocalTime();     // it will take some time to sync time :)
}

Bei dir also

int meineSec = timeinfo.tm_sec;

als Beispiel.

Wenn du als Quelle deinen Router nutzt, sollte es keine Begrenzung geben.

Was willst da "manuell" hochrechnen?!?
Mit NTP wird die interne Zeit gestellt.
Mit localtime_r holst du dir die Zeit aus der internen ESP32 Zeit.
Der NTP Interval läuft in seinem Standard-Interval (solange du nicht daran drehst - im Stunden-Rhythmus).

Da hab ich ein paar Infos zum NTP am ESP32:
https://werner.rothschopf.net/microcontroller/202103_arduino_esp32_ntp_en.htm

welche ESP Core Version hast du in Verwendung?

1 Like

super - Danke.

Du meinst ich soll als NTP Server einfach die IP meines Routers eingeben ?

Danke für die Klarstellung
Einen ESP32-WROOM-32

ich fragte danach welche ESP32 Core Version du verwendest ...
2.0.was?

Bei mir reicht die DNS meiner FritzBox.

"fritz.box"
1 Like

Ok, das meinst du
es ist 2.0.11

Hallo
Nicht alle Router haben einen NTP Server integriert. Da musst du mal in der Doku zu deinem Router nachsehen

Die Fritzbox kann das , es kann aber abgeschaltet sein.

1 Like

das ist es - funktioniert gut mit der fritzbox
Danke

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