Синхронизация времени по GPRS

Тема в разделе "Проводная и беспроводная связь", создана пользователем a1000, 25 мар 2017.

  1. a1000

    a1000 Гик

    Хочу сделать часы с синхронизацией по NTP. Что-бы устройство не было привязано к проводному интернету решил использовать GSM модуль NEOWAY M590. Я живу на Украине, по этому в качестве NTP сервера использую ntp.time.in.ua, в качестве мобильного оператора Киевстар. В теории для получения количества секунд, прошедших с 1 января 1900 года необходимо отправить пустой UDP пакет. Ну это теория а на практике, при отправке АТ команд через гипертерминал, получается следующее.
    1. Проверяем регистрацию модуля в сети
    at
    OK
    at+cops?
    +COPS: 0,0,"UA-KYIVSTAR"

    OK

    2. Устанавливаем GPRS соединение
    AT+CGDCONT=1,"IP","ab.kyivstar.net"
    OK
    AT+XGAUTH=1,1,"",""
    OK
    AT+CUSD=1,"*99#"
    OK
    AT+XISP=0
    OK
    at+xiic=1
    OK

    3. Проверяем получение IP
    at+xiic?
    +XIIC: 1, 10.252.4.186

    4.На всякий случай проверяем IP NTP сервера
    AT+DNS="ntp.time.in.ua"
    OK

    +DNS:62.149.0.30
    +DNS:OK

    5. Устанавливаем UDP соединение по IP 62.149.0.30 порт 123
    AT+UDPSETUP=1,62.149.0.30,123
    OK

    +UDPSETUP:1,OK

    6. Отправляю пустой UDP пакет
    at+udpsend=1,1
    >
    OK

    +UDPSEND:1,1

    А в ответ тишина.
    Кто в этом что-то понимает подскажите где тут лажа.
     
  2. rkit

    rkit Гуру

    Отправить отправил, а принимать кто будет?
     
  3. a1000

    a1000 Гик

    Подскажите как это сделать?
     
  4. a1000

    a1000 Гик

    Так на всякий случай, решение найдено.
    При установке UDP соединения нужно указывать порт 13.
    И ещё, сервер присылает в ответе не секунды а реальное текущее время

    +UDPRECV:1,26,Mon Mar 27 19:55:29 2017
     
  5. mcureenab

    mcureenab Гуру

    А не дешевле было GPS использовать. Пожалуй, самый точный источник времени для гражданского применения и бесплатно.
     
    sslobodyan нравится это.
  6. PatriotRR

    PatriotRR Нуб

    А у меня при указании всех известных портов (порт 123 - протокол UDP, 13 - DAYTIME, 37 - TIME - 37) - тишина... :( Может, есть у кого объяснение сего поведения NTP сервера?
     
  7. a1000

    a1000 Гик

    Как вариант, проверь наличие денег на счету. Я на такой мелочи прокололся. Долго не мог понять почему у меня запрос не проходит.
     
  8. PatriotRR

    PatriotRR Нуб

    Деньги есть, IP других NTP-серверов пробовал - глухо.

    А ещё NEOWAY с USSD не хочет дружить: например для проверки баланса пуляю AT+CUSD=1,"*111#",15, а в ответ ОК и всё.
     
  9. DIYMan

    DIYMan Гуру

    Всё он дружит. Просто настраивать предварительно надо, команда AT+CNMI, емнип.
     
  10. PatriotRR

    PatriotRR Нуб

    Перебрал возможные варианты вызова AT+CNMI - в ответ тишина. И от NTP, и на USSD-запрос...

    Уважаемый a1000. Приведите, пожалуйста, полный набор команд настройки модуля перед отправкой пустого пакета UDP.
     
  11. DIYMan

    DIYMan Гуру

    AT+CNMI=2,2 - устанавливает вывод полученного сразу в порт. Т.е. последовательность команд будет примерно такой, до запроса первого CUSD:

    Код (C++):

    AT+CNMI=2,2
    AT+CSCS="GSM"

    AT+CUSD=1,”*100#”,15
    У мну на Neoway нормально все CUSD работают, во всяком случае.
     
  12. PatriotRR

    PatriotRR Нуб

    DIYMan, спасибо! на USSD хоть белиберду, но начал отвечать. Но NTP молчит...
     
  13. a1000

    a1000 Гик

    У меня NEOWAY без специализированного USSD запроса нормально проверяет баланс.
    Clip2net_180213212032.png
     
  14. DIYMan

    DIYMan Гуру

    ATD - это просто ещё один способ отправить CUSD-запрос, есличо ;)
     
  15. a1000

    a1000 Гик

    Ага, но попробуйте так проверить баланс на Ai-Thinker A6.
     
  16. a1000

    a1000 Гик

    Вот скрин общения с модулем. Видно, что первый запрос не прошёл
    Clip2net_180213215123.png
     
  17. DIYMan

    DIYMan Гуру

    Ну этому товарищу вообще никто не указ :)
     
  18. PatriotRR

    PatriotRR Нуб

    Ну да Бог с ним, с USSD.

    У меня после нижеприведенного кода:
    OK

    +UDPSEND:1,1


    и таки тишина...

    Код (C++):
     // powerON
      digitalWrite(OnGSM_PIN, HIGH); while (!mySerial.find("+PBREADY"));

      mySerial.println("AT+CGDCONT=1,\"IP\",\"www.kyivstar.net\""); while (!mySerial.find("OK"));

      mySerial.println("AT+CUSD=1,\"*99#\""); while (!mySerial.find("OK"));

      mySerial.println("AT+XISP=0"); while (!mySerial.find("OK"));

      mySerial.println("at+xiic=1"); while (!mySerial.find("OK"));


      mySerial.println("AT+UDPSETUP=1,62.149.0.30,123"); while (!mySerial.find(",OK"));

      mySerial.println("at+udpsend=1,1"); while (!mySerial.find(">"));
      mySerial.println("");
     
    Последнее редактирование: 14 фев 2018
  19. a1000

    a1000 Гик

    PatriotRR! Я до программной реализации не дошёл, в своём проекте я применил синхронизацию по бесплатному GPS. У меня к вам вопрос - вы пробовали воспроизвести последовательность АТ команд вручную через терминальную программу?
     
  20. PatriotRR

    PatriotRR Нуб

    Да, я пробовал отправлять через Serial. Всё получается - и SMSки отправляю, получаю, и звоню, и через TCP на Народмон отсылаю, ответы получаю, и UDP подключаю, на NTP отправляю. Вот только от NTP ничего не приходит. Строки желанной вида хотя бы как у Вас
    я не получаю, в какой бы из портов не стучался.

    Можно, пишут, через сеть мобильную получать время. Точность её бы меня устроила. Вот только NEOWAY не поддерживает AT+CLTS. Да и неизвестно, Киевстар поддерживает ли эту функцию.
     
    Последнее редактирование: 14 фев 2018