Desarrollé un firmware para un U-Blox LTE. ¿Allí utilicé el AT + CCLK? para obtener la hora local actual desde el modem.
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)
Por lo tanto, se envió el siguiente comando AT 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 garantizar que tenga la hora correcta:
Comprueba la fecha con el 70/01/01 o el 00/01/01 (en nuestro caso, aquellos
son los tiempos que obtenemos si el módem tiene un tiempo no válido). Y si
no es válido, lo intenta periódicamente cada 1 minuto hasta que recibe una
tiempo correcto. ¿Después de algunos reintentos deja de enviar CCLK? y confiar en otras fuentes de tiempo.
Nota: NITZ es compatible en un conjunto limitado de países todavía ( enlace )
Por lo tanto, es mejor tener una copia de seguridad de la hora de actualización si no se admite en ese país.
En mi caso, tenemos un módulo GPS, así que obtengo actualizaciones de tiempo a través de los datos GNSS.
Además, lo que no es relevante aquí, pero se considera útil para la sincronización horaria.
Ejecutamos Chrony Deamon para actualizar la hora del sistema (comandos manuales
habilitado). Así que ambas actualizaciones de tiempo se recuperan y Chrony decide la
hora correcta y actualiza la hora del sistema.