Какую AT-команду нужно отправить модему, чтобы получить время?

11

Я использую SIM800E . Я хочу знать, какую AT-команду нужно отправить модему, чтобы получить время? Этот модем имеет RTC. Но мне нужно установить его автоматически через вышку сотовой связи. Башня может отправить время модему по запросу с помощью команды AT. Я видел во многих телефонах, что время обновляется во время передач.

В руководстве нет этой информации.

gpuguy
источник
1
В соответствии с этим документом по проектированию аппаратного обеспечения вам необходимо получить «Руководство по эксплуатации SIM800E AT» - отдельный документ.
RedGrittyBrick
Тогда на практике, как простые не мультимедийные телефоны обновляют местоположение?
gpuguy
3
NITZ является необязательной частью стандартов GSM, поддерживается не всеми операторами и может быть точным с точностью до нескольких минут.
RedGrittyBrick
3
Я считаю, что это на тему, потому что это касается использования встроенного модуля GSM для связи M2M. Почему это сообщение не по теме, и следующие четыре сообщения были разрешены: пример 1 2 3 4
tcrosley

Ответы:

7

Я использовал следующую команду:

AT+CCLK?

который возвращает дату и время, например:

+CCLK: "00/01/12,05:44:53+00" 

успешно в продуктах с использованием трех различных модулей ячейки: Enfora, Telit и Sierra. Тот факт, что он использует символ + после AT, подразумевает, что это обычная (в отличие от проприетарной) команда, и она должна быть доступна на большинстве, если не на всех модулях ячейки. (Собственные команды используют специфический для поставщика символ после AT, например AT $, AT%, AT! И т. Д.)

Как я уже упоминал в комментарии, если вы не можете получить время с помощью этой команды (например, она возвращает все 0), тогда другой способ - подключиться к сети и отключить сервер с помощью команды HTTP.

For example, the following HTTP request:
HEAD /index.html HTTP/1.1\r\n
Host: www.somehost.com\r\n;
\r\n

где somehost - это либо ваш собственный сервер, либо Google.com и т. д. Это также предполагает, что index.html является главной страницей сайта (а не для Google).

Он вернет заголовок как:

HTTP/1.x 200 OK  
Transfer-Encoding: (something)  
Date: Fri, 13 Nov 2013 04:36:25 GMT
(lots more stuff)

Насколько я знаю, все серверы обязаны возвращать время по Гринвичу в своих заголовках.

tcrosley
источник
1
Некоторые материалы, которые я прочитал, предполагают, что значение, возвращаемое + CCLK, может быть от встроенных часов (RTC), а не от сети GSM (вышка).
RedGrittyBrick
1
Я также прочитал описанную команду, однако я использовал ее в нескольких разных продуктах, используя три разных модуля ячейки за последние пять лет или около того, и она работала почти везде в США, а также в Европе и Азии. Было несколько перевозчиков, например, один в Германии, где он не работал (вернул все 0); Я связался с ними и мне сказали, что они не поддерживают обновления времени по сети. Поэтому я написал код для выполнения HTTP-запроса 1.1 и получения свободного времени от сервера.
tcrosley
1
Я думаю, что HTTP-запрос мог бы быть лучше написан, так HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nкак я чувствую, что /он менее склонен к 404-м, и что HTTP 1.0 лучше отражает наше (с точки зрения устройства) незнание HTTP. Кроме того, точка с запятой выглядит как опечатка. Кроме этого, дата - GMT / UTC по спецификации ( см. Также ).
1
Этот ответ является информативным, но заслуживает обновления, касающегося проблемы встроенного RTC и сетевого времени.
5

Прежде всего, NITZ плохо поддерживается во многих сетях (можно сказать, COST-CUTTING). Я бы не стал на это полагаться, поскольку его использует каждая десятая сеть, особенно в отдаленных местах.

Во-вторых, команда + CCLK предназначена для внутреннего RTC модема. Некоторые модемы имеют средства для обновления этих часов из сети. Полагаться на это рискованно.

Вышеуказанный HTTP-запрос является неполным, т.е. он не работает. Раньше я знал, как это сделать, поэтому вернется обратно, когда это работает.

Тот факт, что он использует символ + после AT, подразумевает, что это обычная (в отличие от проприетарной) команда, и она должна быть доступна на большинстве, если не на всех модулях ячейки. (Собственные команды используют специфический для поставщика символ после AT, например AT $, AT%, AT! И т. Д.)

Это не совсем правда. Есть проприетарные команды модема, которые следуют соглашению AT +. Например, AT + WOPEN является проприетарной командой Sierra.

Есть определенный набор команд, которые одинаковы независимо от модема. Они определены в документах 3GPP. Собственные команды обычно определяются в руководствах пользователя поставщика и четко помечаются как проприетарные.

s0nic2k
источник
4

AT + CLTS = 1 (получить местное время) AT & W (сохранить конфигурацию)

Выключите модем и включите модем (перезагрузите компьютер для получения местного времени из сети)

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

AT + CCLK?

Это работает для меня, я использую SIM800 GSM модем, прочитайте описания AT-команд для получения дополнительной информации

Сумит Дубей
источник
@ s0nic2k ответ подтвердил, это не будет работать, как вы ожидаете.
Ali80
3

PuTTY:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

+CTZU: "15/05/06,17:25:42",-12,0

Работает отлично, после этого вам нужно проанализировать результат и поместить в clk, потому что это не происходит автоматически. (по крайней мере, в моем Cinterion)

died74
источник
6
Было бы полезно, если бы вы могли объяснить на английском языке, что это делает и почему это решение вопроса.
Дэвид
@ Дэвид Оставайтесь с нами, мы работаем над переводом в чате.
Ник Алексеев
2
Вариант для SIM800H, который работал для меня: используйте AT + CLTS = 1 вместо AT + CTZU = 1 (так как CTZU не поддерживается). Тогда вы получите незапрошенное сообщение, например * PSUTTZ: 2017,1,30,20,17,28, «- 20», 0 при перерегистрации
Мэтт Томас,
2

Используйте команду AT + CIPGSMLOC. Хорошо работает в модулях SIMCOM.

Эта команда требует подключения службы GPRS перед ее использованием. Поэтому сначала подключите услугу GPRS, используя соответствующую последовательность команд, а затем используйте эту команду для получения даты и времени из сети GSM.

Для подключения услуги GPRS:

CMD:AT+CGATT=1 CMD:AT+SAPBR=3,1,"Contype","GPRS" CMD:AT+SAPBR=3,1,"APN","" CMD:AT+SAPBR=3,1,"USER","" CMD:AT+SAPBR=3,1,"PWD","" CMD:AT+SAPBR=1,1 CMD:AT+SAPBR=2,1 /* to confirm that GPRS is attached. will show IP if attached */

Затем используйте команду GSM Location:

AT+CIPGSMLOC=1,1

Эта команда требует значительного времени (несколько секунд) для получения информации из сети, поэтому дайте функции выполнения команды правильное время ожидания.

Эта команда также возвращает местоположение BTS, к которому подключен модуль. Таким образом, вы также можете получить примерно точное местоположение модуля GSM.

Обратитесь к этому руководству за дополнительной информацией: (работает так же для SIM800)

SIM900_GSM Location AT Command Manual_V1.00

Также обратите внимание, что команда AT + CLBS не совпадает с этой командой. Это может не работать в некоторых регионах. (Я не был в состоянии использовать это!). Но AT + CIPGSMLOC всегда работает.

MDR
источник
Я получаю +CIPGSMLOC: 302<\r><\n> в ответ
Ali80
1
@ Ali80 Пополните счет SIM-карты. Это может произойти, если ваша сим-карта имеет кредит, но долгое время не заряжалась. Вы можете протестировать и с другой симкартой.
MDR
да, я могу подтвердить, что этот метод работает, моя сим-карта имела кредит, но был ограничен доступ к некоторым тарифным планам.
Ali80
1

NITZ, как указывает RedGrittyBrick, является ответом. Однако это сообщение отправляется только сетью, обычно при присоединении к сети. Некоторые перевозчики отправляют, некоторые нет. Там нет стандартного способа запросить это.

pjc50
источник
1

Вот последовательность AT-команд для определения времени сотовой сети. Она работала в моем GSM-модуле UBLOX LEON G-200 .

GSM_Send_Modem_Command("AT+COPS=2\r\n");//de register
GSM_Send_Modem_Command("AT+CTZU=1\r\n");//automatic time zone update is enabled
GSM_Send_Modem_Command("AT+COPS=0\r\n");// register to network
GSM_Send_Modem_Command("AT+CCLK?\r\n");// gets the clock of the MT
Myanju
источник
1

сначала отправьте эти две команды
AT + CLTS = 1; & W

AT + CFUN = 1,1, а чем AT + CLTS? Проверь, получаешь ли ты этот ответ + clts: 1
и чем посылаешь эту команду AT + CCLK?

Сухард Бекал
источник
Добро пожаловать в EE.SE. Используйте две метки (``) вокруг фрагментов кода в своих сообщениях или используйте {}кнопку на панели инструментов редактора для блоков кода, как и в других ответах. Это даст серый фон и шрифт фиксированной ширины, позволяя легко увидеть, где начинается и заканчивается ваш код.
Транзистор
0

Я успешно использовал NITZ во время инициализации и CCLK, когда я хочу прочитать внутренний RTC. ОДНАКО может пройти минута или две, прежде чем модем RTC будет установлен из сети. Стоит сохранить флаг, чтобы указать, действительно ли время действительно.

MC
источник
0

Я разработал прошивку для U-Blox LTE. Там я использовал AT + CCLK? получить текущее местное время от модема.

Это дает время в следующем формате. Не то чтобы это синхронизированная команда.

+CCLK: "00/01/01,05:44:53+00" (might get unsynchronized time if the modem time is not sync with the system time)

Поэтому перед регистрацией была отправлена ​​следующая AT-команда для синхронизации времени с сетью.

AT+CTZU=1\r\n

Итак, моя последовательность команд:

AT+CTZU=1\r\n
AT+CREG=1\r\n (to subscribe for the network registration updates)
AT+CCLK?\r\n (The Time Zone information is provided after the network registration, if the network supports the time
zone information)

Дополнительная логика для обеспечения правильного времени:

Он сравнивает дату с 70/01/01 или 00/01/01 (в нашем случае это время, которое мы получаем, если модем имеет недопустимое время). И если он недействителен, он периодически пытается каждую минуту, пока не получит правильное время. После нескольких попыток прекратить отправку CCLK? и полагаться на другие источники времени.

Примечание. NITZ пока поддерживается в ограниченном количестве стран ( https://en.wikipedia.org/wiki/NITZ ).

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

В моем случае у нас есть модуль GPS, поэтому я получаю обновления времени через данные GNSS.

Кроме того, что здесь не актуально, но считается полезным для синхронизации времени.

Мы запускаем Chrony Deamon для обновления системного времени (ручные команды включены). Таким образом, оба обновления времени извлекаются, и хрони решает правильное время и обновляет системное время.

SajithP
источник