• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Как отследить окончание синхронизации по Wifi.setSNTP() ?

Delanet

New member
Экспериментируя с модулем NodeMCU LoLin V3, прошитым Espruino v1.92, в части синхронизации с NTP серверами, столкнулся с такой проблемой - асинхронная команда Wifi.setSNTP() выполняется хорошо, но я не понимаю, как можно определить точно момент окончания синхронизации? В документации к Wifi.setSNTP() ничего не сказано об этом.
 

Юрий Ботов

Moderator
Команда форума
Опрашивайте в основном цикле Date.now.valueOf сравнивайте с предыдущим если оно резко (>1000000) скакнуло вверх - значит отработало SNTP...
Сначала оно будет показывать миллисекунды от старта, после скачка миллисекунды после 1.1.1970 что ну очень сильно больше. Не думаю что вам нужна большая точность...
 

Delanet

New member
Спасибо за ответ, Юрий. Точность бы не помешала, чтобы не использовать внешний RTC.
Первоначальный скачок при старте устройства отследить не сложно. Вся трудность в последующих синхронизациях, поэтому и спросил.
Использую библиотеку "Cron". После синхронизации возникает разница между синхронизированным временем и временем работающего cron-а как раз на величину нестабильности. Соответственно приходится перезапускать все задачи cron-а. В принципе, это тоже можно отследить через дополнительные проверки. К сожалению, дискретность cron-а как минимум минута, значит рассогласование может достигать этой величины в худшем случае.
И так набегает масса костылей, а память-то не резиновая :(
 

recosh

New member
Delanet, замените функцию кодом:

JavaScript:
var r;
  var http = require("http");
  http.get("http://www.espruino.com", function(res) {
      console.log(res);
    r=res;
    setTime(Date.parse(r.headers.Date)/1000);
    d= new Date();
    console.log(d,d.toString());
    res.on('data', function(data) {
    });

  });
Ну или перепишите это под локальный сервер и добавьте вконце колбэк
 
Сверху Снизу