Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Espruino - JavaScript прошивка и USB модуль", создана пользователем Delanet, 12 май 2017.

Метки:
  1. Delanet

    Delanet Новичок

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

    Юрий Ботов Moderator Команда форума

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

    Delanet Новичок

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

    recosh Новичок

    Сообщения:
    9
    Симпатии:
    0
    Delanet, замените функцию кодом:

    Код (Javascript):
    1. var r;
    2.   var http = require("http");
    3.   http.get("http://www.espruino.com", function(res) {
    4.       console.log(res);
    5.     r=res;
    6.     setTime(Date.parse(r.headers.Date)/1000);
    7.     d= new Date();
    8.     console.log(d,d.toString());
    9.     res.on('data', function(data) {
    10.     });
    11.  
    12.   });
    Ну или перепишите это под локальный сервер и добавьте вконце колбэк
     

Поделиться этой страницей