@ivliz,
В Portal и я нарезвился вдоволь с получением времени и даты и получил множество проблем именно с этой функцией...
Мои скромные выводы, которые могут не совпадать с замыслом "программистов" по этому поводу:
1. если использовать стандартные библиотеки от Fabrice Weinberg либо Stefan Staub, то в режиме автономной точки доступа либо при отсутствии интернета при запуске они "завешивают" всю ESP нахрен при попытке достучаться до сервера ntp.
2. если использовать библиотеку GyverNTP, то без инета возможно использование, а время можно задавать самому, часовой пояс указывать так: GyverNTP ntp(gmt); // часовой пояс в часах (например Иерусалим это 2)
3. Мне необходимо было указать для умного дома срабатывание по дням недели. Вроде обычная функция uint8_t dayWeek(); // получить день недели (пн.. вс = 1.. 7), но почему-то это поделие получает дату не как время, с обновлением по указанному периоду, а "долбит" сервер своими запросами постоянно, что тоже со временем "завешивает" ESP.
4. Получение времени из браузера - это тоже очень плохая идея, требующая от страдальца периодического обновления страницы в браузере и обязательного доступа в инет прибора, который этот браузер открывает.
Итого, самым оптимальным и безглючным оказалось получение времени через сервер Telegram, что я и рекомендую. Ведь всё равно понадобится звуковое оповещение событий в реальном времени (безальтернативный вариант, если не юзаете Blynk), интерактивное управление из меню без всяких приложений, дублирование сервера MQTT на случай отказа, так что включать в проект Telegram - просто обязательно.
Итого:
// Это Telegram1 вначале______________________
#include <FastBot.h>
FastBot bot;
//________________________________________________
// Это Telegram1 в setup
bot.setToken(mem.TelegramBOTID);
#define CHAT_ID (mem.TelegramID1)
//-----------------------------------------------------------------------------
// подключаем функцию-обработчик после завершения void setup()
bot.setChatID(CHAT_ID);
bot.sendMessage("Привет!", CHAT_ID); // отправить сообщение, чтобы получить время startUnix = bot.getUnix(); // запомнили }
bot.attach(newMsg);
startUnix = bot.getUnix(); // получение времени при соединении с сервером и при получении любого сообщения
в void loop() :
// получаем времечко и дату из телеги
// FB_Time t = bot.getTime(2);
FB_Time t = bot.getTime(mem.TimePoyas);
realtime = t.timeString();
d = t.dateString();
Всё, время и даты получены без гемороя! Легко и просто, да ещё и систему не завешивает, если вдруг не может достучаться до сервера.
Для экспериментов рекомендую обратиться к классу gh::Timer, см.
https://github.com/GyverLibs/GyverHub/wiki, но это уже, скорей, для удовлетворения мазохистских устремлений личного организма.