¿Qué comando AT se debe enviar al módem para obtener tiempo?

11

Estoy usando SIM800E . ¿Quiero saber qué comando AT se debe enviar al módem para obtener tiempo? Este módem tiene un RTC. Pero necesito configurarlo automáticamente a través de la torre celular. La torre puede enviar la hora al módem cuando se solicita mediante un comando AT. He visto en muchos teléfonos que el tiempo se actualiza durante las transferencias.

El manual no tiene esta información.

gpuguy
fuente
1
De acuerdo con ese documento de diseño de hardware, debe obtener el "Manual de comando SIM800E AT", un documento separado.
RedGrittyBrick
Entonces, en la práctica, ¿cómo los teléfonos no multimedia actualizan la ubicación?
gpuguy
3
NITZ es una parte opcional de los estándares GSM, no es compatible con todos los operadores y es posible que no sea preciso por más de unos minutos.
RedGrittyBrick
3
Creo que esto es un tema porque se refiere al uso de un módulo GSM integrado para comunicaciones M2M. ¿Por qué esta publicación está fuera de tema, y ​​se permitieron las siguientes cuatro publicaciones: ejemplo 1 2 3 4
tcrosley

Respuestas:

7

He usado el siguiente comando:

AT+CCLK?

que devuelve la fecha y la hora, como:

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

exitosamente en productos que usan tres módulos de celdas diferentes: Enfora, Telit y Sierra. El hecho de que use un carácter + después del AT implica que es un comando común (a diferencia del propietario), y debería estar disponible en la mayoría, si no en todos, los módulos de celda. (Los comandos propietarios usan un carácter específico del proveedor después del AT, como AT $, AT%, AT! Etc.)

Como mencioné en un comentario, si no puede obtener el tiempo usando este comando (por ejemplo, devuelve todos los 0), entonces otra forma es conectarse a la red y obtener el tiempo libre de un servidor usando un comando HTTP.

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

donde somehost es su propio servidor o Google.com, etc. Esto también supone que index.html es la página principal del sitio (no es el caso de Google).

Devolverá un encabezado como:

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

Hasta donde yo sé, todos los servidores están obligados a devolver el tiempo GMT en sus encabezados.

tcrosley
fuente
1
Algunas cosas que leí sugirieron que el valor devuelto por + CCLK puede ser del reloj integrado (RTC), no de la red GSM (torre).
RedGrittyBrick
1
También he leído el comando descrito de esa manera, sin embargo, lo he estado usando en varios productos diferentes usando tres módulos de celda diferentes durante los últimos cinco años más o menos, y ha funcionado en casi todas partes en los EE. UU. Y también en Europa y Asia. Ha habido algunos operadores, por ejemplo uno en Alemania, donde no funcionó (devolvió todos los 0); Me puse en contacto con ellos y me dijeron que no admitían actualizaciones de tiempo a través de la red. Entonces escribí código para hacer una solicitud HTTP 1.1 y tomar el tiempo libre de un servidor.
tcrosley
1
Creo que la solicitud HTTP podría escribirse mejor ya HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nque creo que /es menos propenso a los 404 y que HTTP 1.0 representa mejor nuestra ignorancia (en cuanto a dispositivos) de HTTP. Además, el punto y coma parece un error tipográfico. Aparte de eso, la fecha es GMT / UTC por especificación ( ver también ).
1
Esta respuesta es informativa, pero merece una actualización con respecto al problema de tiempo de red y RTC integrado.
5

Primero que nada, NITZ es pobremente soportado en muchas redes (puede decir COST-CUTTING). No confiaría en él en absoluto, ya que 1 de cada 10 redes lo usa, especialmente en lugares remotos.

En segundo lugar, el comando + CCLK es para el RTC interno del módem. Algunos módems tienen facilidades para actualizar este reloj desde la red. Confiar en esto es arriesgado.

La solicitud HTTP anterior está incompleta, es decir, no funciona. Solía ​​saber cómo hacer esto, así que volveré cuando funcione.

El hecho de que use un carácter + después del AT implica que es un comando común (a diferencia del propietario), y debería estar disponible en la mayoría, si no en todos, los módulos de celda. (Los comandos propietarios usan un carácter específico del proveedor después del AT, como AT $, AT%, AT! Etc.)

Esto no es enteramente verdad. Hay comandos de módem patentados que siguen la convención AT +. Por ejemplo, AT + WOPEN es un comando propietario de Sierra.

Hay un cierto conjunto de comandos que son iguales independientemente del módem. Estos se definen en los documentos 3GPP. Los comandos propietarios generalmente se definen en los manuales de usuario del proveedor y se marcan claramente como propietarios.

s0nic2k
fuente
4

AT + CLTS = 1 (Obtener sello de hora local) AT&W (Guardar configuración)

Apague el módem y encienda el módem (reinicie para obtener la hora local desde la red)

La próxima vez que se inicie el módem, debería poder obtener la hora local por red y se puede leer enviando

AT + CCLK?

Esto funcionó para mí, estoy usando el módem GSM SIM800, lea las descripciones de los comandos AT para obtener más información

Sumit Dubey
fuente
La respuesta de @ s0nic2k se confirmó, esto NO funcionaría como cabría esperar.
Ali80
3

Masilla:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

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

Funciona perfectamente, después de eso, debe analizar el resultado y colocarlo en clk porque esto no sucede automáticamente. (al menos en mi Cinterion)

murió74
fuente
66
Sería útil si pudiera explicar, en inglés, qué hace esto y por qué es una solución a la pregunta.
David
@David Estén atentos, estamos trabajando en una traducción en el chat.
Nick Alexeev
2
Variante para SIM800H que funcionó para mí: use AT + CLTS = 1 en lugar de AT + CTZU = 1 (ya que CTZU no es compatible). Entonces recibirá un mensaje no solicitado como * PSUTTZ: 2017,1,30,20,17,28, "- 20", 0 cuando vuelva a registrarse
Matt Thomas
2

Utilice el comando AT + CIPGSMLOC. Funciona bien en módulos SIMCOM.

Este comando necesita el servicio GPRS adjunto antes de usarlo. Entonces, primero conecte el servicio GPRS usando la secuencia de comandos apropiada y luego use este comando para obtener la fecha y hora de la red GSM.

Para adjuntar el servicio 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 */

Luego use el comando de ubicación GSM:

AT+CIPGSMLOC=1,1

Este comando necesita un tiempo considerable (unos segundos) para obtener la información de la red, por lo que debe agotar el tiempo de espera de la función de ejecución del comando.

Este comando también devuelve la ubicación BTS a la que está conectado el módulo. Por lo tanto, también puede obtener una ubicación más o menos precisa del módulo GSM.

Consulte este manual para obtener más información: (funciona de la misma manera para SIM800)

SIM900_GSM Location AT Command Manual_V1.00

También tenga en cuenta que el comando AT + CLBS no es el mismo que este comando. Es posible que no funcione en algunas regiones. (¡No he podido usarlo!). Pero el AT + CIPGSMLOC siempre funciona.

MDR
fuente
Recibo +CIPGSMLOC: 302<\r><\n> respuesta
Ali80
1
@ Ali80 Recargue su crédito de tarjeta SIM. Esto podría suceder si su tarjeta SIM tiene crédito pero no se le ha cobrado durante mucho tiempo. También puedes probar con otra tarjeta SIM.
MDR
Sí, puedo confirmar que este método funciona, mi tarjeta SIM tenía crédito pero tenía un plan de datos de acceso limitado.
Ali80
1

NITZ como lo señala RedGrittyBrick es la respuesta. Sin embargo, este es un mensaje que solo envía la red, generalmente al unirse a la red. Algunas compañías lo envían, otras no. No hay una forma estándar de solicitarlo.

pjc50
fuente
1

Aquí está la secuencia de comandos AT para obtener el tiempo de la red celular. Funcionó en mi módulo 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
fuente
1

primero envíe estos dos comandos
AT + CLTS = 1; & W

AT + CFUN = 1,1 y que AT + CLTS? compruebe si obtiene esta respuesta + clts: 1
y luego envíe este comando AT + CCLK?

Souhard Bekal
fuente
Bienvenido a EESE. Use dos marcas de retroceso (``) alrededor de fragmentos de código en sus publicaciones o use el {}botón en la barra de herramientas del editor para bloques de código como en las otras respuestas. Esto le dará un fondo gris y una fuente de ancho fijo, lo que facilitará ver dónde comienza y termina su código.
Transistor
0

He usado con éxito NITZ durante la inicialización, y CCLK cuando quiero leer el RTC interno. SIN EMBARGO, puede tomar uno o dos minutos antes de que el módem RTC se configure desde la red. Vale la pena mantener una bandera para indicar si el tiempo es realmente válido.

MC
fuente
0

Desarrollé un firmware para un U-Blox LTE. ¿Allí usé el AT + CCLK? para obtener la hora local actual del módem.

Da un tiempo en el siguiente formato. No es que sea un comando sincronizado.

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

Entonces, el siguiente comando AT se envió antes del registro, para sincronizar la hora con la red

AT+CTZU=1\r\n

Entonces mi secuencia de comando es:

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)

Lógica adicional para garantizar que tenga la hora correcta:

Comprueba la fecha contra 70/01/01 o 00/01/01 (en nuestro caso, esas son las horas que obtenemos si el módem tiene una hora no válida). Y si no es válido, lo intenta periódicamente cada 1 minuto hasta que llegue la hora correcta. ¿Después de algunos intentos deja de enviar CCLK? y confiar en otras fuentes de tiempo.

Nota: NITZ es compatible en un conjunto limitado de países todavía ( https://en.wikipedia.org/wiki/NITZ )

Por lo tanto, es mejor tener una forma de actualizar el tiempo de respaldo si no es compatible en ese país.

En mi caso tenemos un módulo GPS, así que obtengo actualizaciones de tiempo a través de datos GNSS.

Además, lo que no es relevante aquí, pero se consideró útil para la sincronización horaria.

Ejecutamos chrony deamon para actualizar la hora del sistema (comandos manuales habilitados). Por lo tanto, se obtienen ambas actualizaciones de tiempo y Chrony decide la hora correcta y actualiza la hora del sistema.

SajithP
fuente