Nara-auto.ru

Автосервис NARA
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Синхронизация времени с NTP сервером в модемах Quectel M66 в приложениях с OpenCPU

Синхронизация времени с NTP сервером в модемах Quectel M66 в приложениях с OpenCPU

GSM модемы многих производителей обладают возможностью синхронизации времени как с сетью GSM оператора, так и с серверами точного времени по протоколу NTP. В этой статье поговорим о том, как это реализовано в модемах Quectel на примере модема M66 (в других моделях это работает аналогичным образом, лишь немного отличается в 3G модемах Quectel, где можно указывать какой часовой пояс тебя интересует).

Материал из Википедии

NTP (Network Time Protocol) — сетевой протокол для синхронизации внутренних часов компьютера с использованием с переменной латентностью.

Чтобы лучше понять, как данный функционал реализован в OpenCPU, а если быть точным в RIL (Radio Interface Layer), сперва немного окунемся в то, как это реализовано путем AT команд.

Команда:

позволяет синхронизировать локальное время через NTP. Где,
<server> — адрес сервера точного времени в виде строки. Может быть именем домена или IP адресом.
<port> — соответственно, порт сервера точного времени, обычно 123.

В ответ получаем:

где,
<result> — результат запроса времени:
0 Время синхронизировано
1 Ошибка синхронизации локального времени по неизвестной причине
2 Ошибка получения ответа сервера
3 TCP/IP стек в данный момент занят другим запросом
4 Не найден сервер NTP
5 Ошибка активации PDP context

По умолчанию документация предлагает использовать китайский сервер для синхронизации, но он конечно не доступен у нас, я обычно использую time1.google.com, вы можете использовать любой другой. Выглядит просто и, если вы работаете с модемом путем ввода AT команд, то это то, что вам нужно, чтобы получить точное время из интернета.

Ну ок, а что там с OpenCPU? В текущей версии SDK, а это к слову уже 2.4, есть два файла ril_ntp.c и ril_ntp.h. Именно в них присутствует необходимая функция запроса:

С параметрами все просто, адрес сервера, порт сервера, а вот последний это адрес callback-функции, которая вызывается после получения ответа на AT команду, запрос которой осуществляется внутри функции вот так:

Callback-функцию следует определить в своем приложении и передать ее адрес при запросе RIL_NTP_START . Внутри своей callback-функции надо проверять ответ вида +QNTP: <result>, примерно так:

Делать запрос к NTP серверу следует после регистрации в сети GPRS и активации соединения, но заметил один нюанс, если активировать соединение командой Ql_GPRS_Activate или Ql_GPRS_ActivateEx , то команда AT+QNTP возвращает всякий раз ошибку RIL_AT_FAILED . Побороть это можно активируя GPRS соединение в следующем порядке:

На этом все, других возможностей для работы с NTP OpenCPU RIL не предоставляет, можно также рассмотреть работу с Time API OpenCPU, но оставлю это на одну из следующих статей. А пока подписывайтесь на мой ВК, Твиттер и заходите в наш чат Telegram.

Также, если вас интересует какая-то тема, касательно работы с Quectel OpenCPU и вы хотели бы видеть статью о ней у меня в блоге, пишите в комментариях или чате, и я обязательно учту ваши пожелания.

Автоматическая синхронизация времени на компьютере Windows

Синхронизация времени – достаточно важная вещь. Без точного времени не работают сервисы обновлений, не функционируют некоторые сайты, мессенджеры и другие приложения. Настроить синхронизацию несложно, но требуется четкое соблюдение инструкции.

Читайте так же:
Регулировка клапанов на двигателе zs168fb

Принцип синхронизации времени

Синхронизация времени осуществляется при подключении компьютера к серверу, на котором указано точное время. Чаще всего, период обновления – 7 дней. Есть способы, с помощью которых можно укоротить промежуток синхронизацию и настроить другой сервер, не стандартный. Один из таких способов – настройка автоматического обновления.

Настройки автоматической синхронизации

В системе Windows 7, 8, 10 есть встроенные часы, которые расположены в правом нижнем углу экрана, на панели уведомлений. Эти часы уже настроены на автоматическое обновление времени, а сервером является “time.windows.com”. Бывают случаи, когда время, все же, не синхронизируется. Если пользователь столкнулся с такой проблемой, перейдем к ее решению.

Стандартные настройки

Для начала стоит воспользоваться стандартным функционалом:

  1. Перейти по пути “Пуск” – “Панель Управления”, в правом углу открывшегося окна найти пункт “Просмотр”, изменить значение на “Мелкие значки”, затем найти пункт “Дата и время”.Мелкие значки
  2. Откроются настройки времени. Их также можно вызвать по клику левой кнопкой мыши на календаре в строке уведомлений. В открывшемся подменю нужно выбрать “Изменение настроек даты и времени…”.Изменение настроек
  3. Далее, в открывшемся окне, перейти на вкладку “Время по Интернету”. На ней будет предоставлены сведения о существующем способе синхронизации и названии сервера (если она включена). Для изменения конфигурации нажать на “Изменить параметры…”.Изменить параметры
  4. Список серверов времени для синхронизации будет описан далее. Выбрать один из них, либо один из предоставленных по стандарту, кликнуть по кнопке “Обновить сейчас” и убедиться в том, что галочка напротив пункта “Синхронизировать с сервером времени в Интернете” активна. Нажать “ОК”.Установка сервера

Это позволит устанавливать время и дату на компьютере автоматически.

Командная строка

Следующий способ не помогает настроить синхронизацию, это просто команда, которая помогает провести операцию синхронизации вручную с целью ее ускорения:

Ввод команды

  1. Нажать комбинацию клавиш “WIN+R”, в поле открывшегося окна ввести “cmd” (возможно потребуются права администратора).
  2. Откроется командная строка. Ввести команду “w32tm /resync”.

Команда сработает, если включено автообновление времени.

SP TimeSync

Также можно воспользоваться сторонними приложениями:

  1. После того как программа была загружена и установлена, важно настроить ее на автозапуск при старте системы. Не обязательно в развернутом состоянии. Нужно отметить соответствующие пункты галочками.Запуск программы
  2. Перейти к вкладке “NTP клиент”, в пункте меню “Получать каждые…” указать интервал обновления.Ввод настроек
  3. Вернуться к вкладке “Время”, нажать на кнопку “Получить время”, затем “Задать время”. После этого системное значение будет изменено на значение из программы.Получение времени

Важно: программу нужно не закрывать, а сворачивать в трей, иначе обновления не произойдет.

Изменение времени обновления

Процедура связана с редактированием записей реестра с помощью стандартных возможностей системы:

  1. На клавиатуре одновременно нажать “WIN+R”, ввести в поле “regedit”.Окно Выполнить
  2. Перейти по следующему пути: HKEY_LOCAL_MACHINESYSTEMControlSet001servicesW32TimeTimeProvidersNtpClient.Путь в реестре
  3. Выбрать пункт “SpecialPollInterval”, кликнуть по нему дважды, переключиться на десятичную систему исчисления.Изменение параметра
  4. Определиться с интервалом, перевести его в секунды, внести значение в поле, нажать “ОК”.Ввод в секундах
Читайте так же:
Надо ли при замене форсунок регулировать

Популярные серверы

NTP-Servers

NTP-Servers

Самый распространенный сервер точного времени среди всех, имеет несколько адресов для синхронизации. Чтобы найти адреса, нужно в правой части сайта NTP-Servers кликнуть по кнопке “Серверы”.

NTP Pool Project

NTP Pool Project

После перехода на сайт NTP Pool Project выбрать сервер в правой части экрана, соответствующий региону.

Список адресов

Скопировать один из адресов и настроить время на ПК.

Time in UA

Time in UA

Сервер Time in UA специально для украинской аудитории. Все что нужно – перейти на сайт и выбрать один из адресов.

Как сделать сервер времени (NTP) на Arduino

GPS/GLONASS приёмник с UART GPS/GLONASS приёмник с UART

Модуль с часами реального времени DS1307 Модуль с часами реального времени DS1307

И, конечно же, нам понадобится модуль с сетевым интерфейсом или т.н. Ethernet-шилд. Этот модуль позволит подключить Arduino к локальной сети или к компьютеру по Ethernet.

Ethernet-шилд с микросхемой Wiznet W5100 Ethernet-шилд с микросхемой Wiznet W5100

В качестве альтернативы можно использовать Wi-Fi модуль, разумеется. Лишь бы ваши устройства, время на которых необходимо синхронизировать с сервером времени, находились в одной локальной сети с сервером времени на Arduino.

Теперь соединим все наши части воедино. Для этого сначала соберём «бутерброд» из Arduino и сетевого шилда, который выполнен в виде мезонинной платы. Далее подключим модуль часов DS1307 к выводам A4 и A5, а это шина I2C, как мы помним. Следовательно, пин A4 – это SDA, пин A5 – SCL. Приёмник сигналов ГНСС необходимо подключить к UART. Для этого можно подключить его к стандартным выводам RX и TX Arduino (пины 0 и 1, соответственно). Но тогда мы не сможем одновременно работать с приёмником и отлаживаться с выводом отладочных сообщений в последовательный порт. Поэтому рекомендую реализовать программный UART с помощью штатной библиотеки SoftwareSerial. Для этого подключим GPS приёмник к любым цифровым выводам (кроме 0 и 1), например, к 10 и 11.

Общий вид NTP сервера на Arduino Общий вид NTP сервера на Arduino

Не забудем питание и землю, разумеется. И модуль часов, и приёмник питаются одним напряжением, равным 5 вольтам.

2 Скетч NTP сервера для Arduino

Напишем скетч для Arduino, в котором реализуем функциональность сервера времени с поддержкой протокола NTP и с минимальным использованием сторонних библиотек.

Формат пакета NMEA с данными о времени Формат пакета NMEA с данными о времени

В конце статьи приложена программа для тестирования связи с NTP сервером.

Скетч сервера времени NTP и Arduino (разворачивается)

Проверка NMEA пакетов осуществляется в функции decodeTime().

Несколько слов о функции dec2hex(). В ней несколько извращённо число переводится из десятичного представления в 16-ное. Точнее, так. Модуль часов показывает время в виде, например, 16:52:08. Но здесь каждое из этих чисел не десятичное, а 16-ное. То есть, в действительности это время в RTC хранится так: 0x16:0x52:0x08. А с GPS-приёмника мы получаем время в десятичном формате. И чтобы записать те же 16 часов в модуль RTC, нужно преобразовать десятичное 16 в шестнадцатеричное 0x16, что является десятичным 22. А полное время 0x16:0x52:0x08 будет в десятичном представлении 22:82:08. Хм, 82 минуты, странно, да? 🙂 Но такое уж надо сделать преобразование, чтобы модуль часов реального времени запомнил правильное время.

3 Программа для тестирования NTP сервера на Arduino

В приложении к статье имеется архив с программой тестирования NTP .

Читайте так же:
Таблица регулировок топливных насосов

Главное окно программы тестирования NTP/SNTP Главное окно программы тестирования NTP/SNTP

Всё, что требуется для проверки NTP сервера – это ввести адрес сервера и нажать кнопку «Отправить запрос». Соответственно, нужно знать адрес вашего NTP сервера на Arduino. Можно выбрать сервер из списка предложенных в меню («Выбрать сервер»).

Программа также позволяет запустить локальный NTP сервер . Время она будет брать из операционной системы. Данная возможность пригодится для каких-то отладочных целей.

Проблема при синхронизации времени с ntp-серверами

1683163,
У буфлу многие порты закрыты, пишите заявление в СЦ с указанием портов и ресурсов, но есть вероятность, что только со статикой вам откроют порты.

8 лет на сайте
пользователь #842236

Да, такая проблема имела/имеет место быть. Столкнулся месяца 3 назад. Техподдержка слушала с открытыми от удивления глазами. Отключился.

13 лет на сайте
пользователь #126602

Указывайте пул А не конкретный сервер Из пула выбирается всегда лучший Для беларуси это by.pool.ntp.org
Все подробности и как это работает на http://www.pool.ntp.org/ru/
Сорри не прочитал всю историю .
Гады если честно, даже время заблокировали =)

10 лет на сайте
пользователь #348873

1683163, ну ещё как вариант заснифать wireshark’ом и посмотреть, что получится. По итогу уже будет видно кого или что пинать.

12 лет на сайте
пользователь #193994

До недавнего времени (буквально неделю назад) на Белтелекоме был заблокирован исходящий порт ntp для всех абонентов кроме статики (если ничего не путаю). Т.е. все устройства, что работающие как клиент-сервер должны были получать точное время. Но к сожалению вин по умолчанию работает как сервер-сервер.

Для командной строки
w32tm /config /manualpeerlist:NTP_server_IP_Address,0x8 /syncfromflags:MANUAL
net stop w32time
net start w32time
w32tm /resync

Для правки реестра
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpServer
If the value of the Enabled entry in this subkey is 1, Windows Time uses symmetric active mode. Otherwise, Windows Time uses client mode.
The 0x8 setting that is referenced in the command in the "Resolution" section sets Windows Time to use client mode.
The valid settings for the mode used with the /manualpeerlist switch include the following:
0x01 — use special poll interval SpecialInterval
0x02 — UseAsFallbackOnly
0x04 — send request as SymmetricActive mode
0x08 — send request as Client mode

ПС Возможно понадобиться в будущем.

7 лет на сайте
пользователь #1089074

Karvo:

До недавнего времени (буквально неделю назад) на Белтелекоме был заблокирован исходящий порт ntp для всех абонентов кроме статики (если ничего не путаю).

Не согласен. У меня маршрутизатор успешно синхронизировался, хотя в винде бывали косяки. Если бы порт был блокирован, маршрутизатор бы тоже не мог синхронизироваться.

10 лет на сайте
пользователь #438374

Нашел решение этой проблемы. У меня на модеме PON-4 решилось так:
1.Заходим в настройки модема через 192.168.100.1
2. Далее заполняем все как на скрине.

3. Идем в настройки синхронизации и в качестве сервера указываем http://www.belgim.by
жмем обновить и радуемся)

если в качестве сервера указать не belgim.by то время не будет синхронизироваться, будьте внимательны. После перезагрузки модема все настройки синхронизации времени сбрасываются.

10 лет на сайте
пользователь #404663

Читайте так же:
Как регулировать карбюратор на бензопиле патриот 457

tatem большое тебе спасибо!

13 лет на сайте
пользователь #126602

Как не прискорбно, но должен быть открыт UDP port 123 на всех маршиках до источника времени !
Вот с сайта http://support.ntp.org/bin/view/Support/TroubleshootingNTP
"The first thing to do is to make sure that UDP port 123 is open on all firewalls between you and the remote time servers that you wish to synchronize to"
байфлаевцы может поэтому и квадратные глаза делают . Например порт закрыт дальше у ОАЦ или как там они при президенте.
Белгим же между байфлаем и вами поэтому работает, ОАЦ дальше — пограничный за бугор. Вот такая петрушка может быть.

8 лет на сайте
пользователь #725958

tatem:

Нашел решение этой проблемы. У меня на модеме PON-4 решилось так:

Для Huawei Echol ife HG8245A этот способ тоже работает.
1.

Получается, что в настройках синхронизации времени Windows нужно указывать то сервер, который прописан в настройках модема.
Сам я давно не пользуюсь синхронизацией времени встроенной в Windows, а использую программульку AlfaClock, она заменяет стандартные часы в трее

имеет больше возможностей и синхронизирует время не зависимо от настроек в Windows или в модеме.
Проблем с синхронизацией в ней никогда не было и нет после замены модема на PON.

12 лет на сайте
пользователь #184230

PeterA:

Для Huawei Echol ife HG8245A этот способ тоже работает.

Ничего не работает

12 лет на сайте
пользователь #198970

Пришлось поставить
https://www.meinbergglobal.com/english/sw/ntp.htm
и что, характерно, работает в отличии от ntp мелкософта. Что они такое БТК делают что именно MS отсыхает понятия не имею, но это просто #####ц товарищи.

12 лет на сайте
пользователь #198970

Ошибался я, не работает, забыл из VPN выйти.
Что удалось понять из общения с коллегами.
1) Проблемы есть не у всех абонентов.
2) ntp инициирует соединение на 123 порт на ntp server, на машине клиента также пытается открыть порт 123 на прием. Туда пакеты уходят без проблем, а вот на приём ZERO. Я так понимаю что вероятно на на моей внешней айпишке 123 порт закрыт, из-за этого проблемы.

UPD проверил на TCP порт 123 открыт снаружи. Возможно блокируется именно ntp трафик или UDP пакеты.
UPD2 проверил снаружи 123 порт udp принимает также. WTF с ntp?

6 лет на сайте
пользователь #1755373

13 лет на сайте
пользователь #126602

123 порт должен быть открыт в обиоих направлениях по всей цепочке от вас до сервера времени в обе стороны
123 привелегилированный порт , все что ниже 1000 порта !

Для нормальной работы клиента винды необходимо два открытых 123 порта на стороне клиента и на стороне сервера !
Лень искать где-то я тут давал ссылку на faq от ntp.org Там однозначно указано порты должны быть открыты с двух сторон.
Before you begin, don’t forget to open the default UDP 123 port (in- and outbound) on your firewall.
Так уж устроена служба w32time у мелких через которую вы синхронизируете часы на компе!
В линуксе ntpdate с апараметром -u Открывает входящий порт выше 1000ного (unprivileged) и успешно синхронизирует !
-u
Direct ntpdate to use an unprivileged port for outgoing packets. This is most useful when behind a firewall that blocks incoming traffic to privileged ports, and you want to synchronize with hosts beyond the firewall. Note that the -d option always uses unprivileged ports.
Любое соединение в интернете предполагает два открытых порта , другое дело что вы открываете у себя допустим 10500 порт и 80 удаленный при при запросе www
А вот виндовый ntp клиент упёртый и открывает у себя 123 порт и обращается на 123 порт .

Читайте так же:
Автоматическая регулировка светового пучка фар

12 лет на сайте
пользователь #184230

У меня, как только сменили ADSL на оптику, синхронизация времени работала без проблем. Но всего 2 или 4 дня (точнее не помню) с момента подключения, после ни в какую.

Пример настройки локального NTP сервера для работы с устройствами NetPing

Для синхронизации времени устройства NetPing используют протокол NTP. При помощи этого протокола все устройства в сети корректируют своё время по указанному серверу. Устройства NetPing, подключенные к Internet, могут использовать публичный NTP сервер, как рекомендовано в статье. Если доступа к сети Internet нет, то можно настроить локальный NTP сервер. Таким сервером может являться любой компьютер с ОС Windows с настроенной службой W32TimeСлужба времени Windows»). Данная служба не имеет графического интерфейса и настраивается либо через командную строку либо путём правки ключей реестра.

Инструкция по настройке сервера NTP на ОС Windows 7/8/2008/2012

Рассмотрим настройку службы времени через редактирование реестра. Настройка происходит одинаково для версий Windows 7/8, Windows Server 2008, Windows Server 2012.

Для данной настройки необходимо обладать правами администратора ОС Windows

Открываем редактор реестра либо через диалоговое окно «Выполнить», вызванное комбинацией клавиш «Win» + «R», либо через форму поиска, где набираем «regedit».

Пример настройки локального NTP сервера для работы с устройствами NetPing

В открывшемся редакторе в левом древовидном меню открываем «ветвь» «HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesW32TimeTimeProvidersNtpServer», где ищем ключ с названием «Enable». Нажимаем правой кнопкой мыши и выбираем «Изменить». Меняем значение ключа с на 1.

Пример настройки локального NTP сервера для работы с устройствами NetPing

Изменив данный параметр, мы указали, что данный компьютер выступает в роли сервера NTP. Компьютер одновременно остаётся клиентом и может синхронизировать своё время по другим серверам в Internet или локальной сети. Если вы хотите, чтобы в качестве источника данных выступали внутренние аппаратные часы, то измените значение параметра ключа AnnounceFlags на 5 в ветке « HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeConfig ».

Пример настройки локального NTP сервера для работы с устройствами NetPing

Для вступления изменений в силу нам необходимо перезапустить службу. Доступ к службам осуществляется через «Панель управления» из меню «Пуск» -> «Панель управления» -> «Администрирование» -> «Службы». Также она находится в форме поиска при вводе «services.msc». В появившемся списке служб находим интересующую нас «Служба времени Windows» и через меню, вызванное правой кнопкой мыши, выбираем пункт «Перезапустить».

Пример настройки локального NTP сервера для работы с устройствами NetPing

Для использования компьютера в качестве сетевого сервера времени для всех устройств локальной сети необходимо разрешить в настройках межсетевого экрана входящий и исходящий трафик по протоколу UDP на порт 123 .

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector