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

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 le solicite mediante un comando AT. He visto en muchos teléfonos que la hora se actualiza durante las transferencias.

El manual no tiene esta información.

De acuerdo con ese documento de diseño de hardware, debe obtener el "SIM800E AT Command Manual", un documento separado.
Entonces, en la práctica, ¿qué tan simple es actualizar la ubicación de los teléfonos que no son multimedia?
NITZ es una parte opcional de los estándares GSM, no es compatible con todos los operadores y puede no tener una precisión superior a unos pocos minutos.
Creo que este es el 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 cuatro publicaciones siguientes: ejemplo 1 2 3 4

Respuestas (10)

He usado el siguiente comando:

AT+CCLK?

que devuelve la fecha y la hora, como:

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

con éxito en productos que utilizan tres módulos celulares diferentes: Enfora, Telit y Sierra. El hecho de que use un carácter + después de AT implica que es un comando común (a diferencia de 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 de 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 fuera 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 la hora GMT en sus encabezados.

Algunas cosas que leí sugirieron que el valor devuelto por + CCLK puede ser del reloj integrado (RTC), no de la red GSM (torre).
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 celulares diferentes durante los últimos cinco años, 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. Así que escribí un código para hacer una solicitud HTTP 1.1 y aprovechar el tiempo libre de un servidor.
Creo que la solicitud HTTP podría escribirse mejor, HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nya que siento que /es menos propensa a los 404 y que HTTP 1.0 representa mejor nuestra ignorancia (en cuanto al dispositivo) 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 ).
Esta respuesta es informativa, pero merece una actualización con respecto al problema de RTC integrado frente al tiempo de red.

En primer lugar, NITZ tiene un soporte deficiente en muchas redes (puede decir REDUCCIÓN DE COSTOS). 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 de AT implica que es un comando común (a diferencia de 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 de AT, como AT$, AT%, AT!, etc.)

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

Hay un cierto conjunto de comandos que son los mismos 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 están claramente marcados como propietarios.

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

Apague el módem y enciéndalo (reinicie para obtener la hora local de 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 SIM800 GSM. Lea las descripciones de los comandos AT para obtener más información.

Respuesta @ s0nic2k confirmada, esto NO funcionaría como cabría esperar.

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)

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

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

Este comando necesita el servicio GPRS adjunto antes de usarlo. Así que primero adjunte el servicio GPRS usando la secuencia de comandos adecuada y luego use este comando para obtener la fecha y la 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 tanto, dé a la función de ejecución del comando el tiempo de espera adecuado.

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 lo mismo que este comando. Es posible que no funcione en algunas regiones. (¡No he podido usarlo!). Pero el AT+CIPGSMLOC siempre funciona.

recibo +CIPGSMLOC: 302<\r><\n>en respuesta
@Ali80 Recarga el crédito de tu tarjeta SIM. Esto puede suceder si su tarjeta SIM tiene crédito pero no ha sido cargada durante mucho tiempo. También puedes probar con otra tarjeta SIM.
sí, puedo confirmar que este método funciona, mi tarjeta SIM tenía crédito pero tenía acceso limitado al plan de datos.

NITZ, como lo señaló 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.

Aquí está la secuencia de comandos AT para obtener la hora de la red celular. Funcionó en mi módulo UBLOX LEON G-200 GSM.

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

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

AT+CFUN=1,1 y que AT+CLTS? comprueba si obtienes esta respuesta +clts: 1
y luego envías este comando AT+CCLK?

Bienvenido a EE.SE. Use dos tildes invertidas (``) 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.

He usado NITZ con éxito 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.

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

Da una hora 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

Así que mi secuencia de comandos 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 asegurarse de que tiene 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 obtiene la hora correcta. ¿Después de algunos reintentos deja de enviar CCLK? y confiar en otras fuentes de tiempo.

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

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

En mi caso tenemos módulo GPS por lo que obtengo actualizaciones de tiempo a través de datos GNSS.

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

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