Начальный каркас: прошивка 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).
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user