Systemzeit stündlich synchronisieren

Ich hole beim Start des ESP32 die aktuelle Uhrzeit von einem NTP-Server. Diese speichere ich dann auf einem RTC-Modul. Wenn WiFi mal weg ist, habe ich trotzdem immer die Uhrzeit.
Jetzt soll die Zeit des ESP jede Stunde synchronisiert werden (über NTP wenn verfügbar, sonst RTC).

Verwendete Bibliotheken:

#include "TimeLib.h"  //by Paul Stoffregen, not included in the Arduino IDE !!!
#include "Timezone.h" //by Jack Christensen, not included in the Arduino IDE !!!

Die Funktion wird im loop alle 10 Minuten aufgerufen:

void synchronize_timers() {
  time_t current_time = now();
  if (minutes(current_time) < 6) {
    setTimeStatus(timeNotSet);
  }
  get_time();
  ....
}

Dadurch wird die Zeit erneut von NTP bzw RTC geholt.

Wenn jetzt aber die aktuelle Zeit 22:57 ist, erfolgt der nächste Aufruf von synchronize_timers() 23:07, also wird der Zustand: minutes(current_time) < 6 nie erreicht.

Kann man so etwas komfortabler gestalten?

freddy64:
Wenn jetzt aber ...

Hä? Du schreibst von 10 Minuten, im Sketch steht 6 Minuten ...

Was genau möchtest Du?

Gruß

Gregor

setSyncInterval(interval);
Alles schön und gut, funktioniert aber nur wenn auch
setSyncProvider(getTimeFunction);
gesetzt ist.

Meine Function get_time() holt die Zeit, je nach dem was verfügbar ist.
NTP füttert RTC und liefert dann die RTC-Zeit.

Also müsste es so gehen:
setSyncProvider(get_time);
setSyncInterval(3600);

Dann habe ich jede Stunde die aktuelle Zeit im System und kann mir das:
if (minutes(current_time) < 6) {
setTimeStatus(timeNotSet);
}
ersparen. Macht ja jetzt die TimeLib.

Hi

Wenn Du die Zeit alle Stunde korrigieren musst, brauchst Du keine RTC - Da sollte fast auch ein NE555 ausreichend sein ...

... oder man leistet sich vom fC eine RTC, Die im JAHR nur wenige Sekunden falsch geht - hat man sich den ganzen Traffic auch gespart und kann, wenn man denn will, 1x im Monat mitten in der Nacht schauen, ob's ne frische Uhrzeit brauch.

MfG

PS: RTC aka DS3231

Ich denke, er wollte damit erklären, dass er bei Vorhandensein von NTP daraus die RTC "nachstellt" und dann daraus das setSyncProvider beliefert.
Das ist vom Ablauf her sinnvoll, auch wenn die RTC es nicht nötig hätte. Es ergibt sich daraus aber ein sinnvoller Weg, der auch dann funktioniert, wenn mal NTP nicht da ist (hoffe ich, da i8ch den Code nicht kenne).
Man könnte noch die sync-Zeit auf 4 Stunden hoch setzen.

Gruß Tommy