Files
home_automatization_control…/growbox/time_sync.cpp
T
cacto a645737927 Начальный каркас: прошивка ESP32 для зоны "Гроубокс"
Реализованы sensor-1 (DHT22, телеметрия temperature/humidity) и
реле-актуаторы light-1/pump-1/fan-1 (turn_on/turn_off/set_level) по
протоколу MQTT платформы home_automatization (devices/{id}/telemetry|commands|ack).
2026-08-11 18:46:37 +05:00

48 lines
1.2 KiB
C++

#include "time_sync.h"
#include <time.h>
static bool timeReady = false;
void timeSyncBegin() {
// UTC, без летнего времени — платформа хранит и парсит время в UTC.
configTime(0, 0, "pool.ntp.org", "time.nist.gov");
Serial.print("[time] syncing via NTP");
time_t now = time(nullptr);
unsigned long start = millis();
// 8 * 3600 — грубая нижняя граница правдоподобного unix-времени,
// пока NTP не ответит time() возвращает эпоху около 0.
while (now < 8 * 3600 && millis() - start < 15000) {
delay(250);
Serial.print(".");
now = time(nullptr);
}
Serial.println();
timeReady = now >= 8 * 3600;
if (timeReady) {
Serial.println("[time] synced");
} else {
Serial.println("[time] sync timed out, will retry in background");
}
}
bool timeSyncIsReady() {
if (!timeReady) {
time_t now = time(nullptr);
timeReady = now >= 8 * 3600;
}
return timeReady;
}
String nowRFC3339() {
time_t now = time(nullptr);
struct tm tmStruct;
gmtime_r(&now, &tmStruct);
char buf[21];
strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", &tmStruct);
return String(buf);
}