Quale comando AT dovrebbe essere inviato al modem per ottenere tempo?


11

Sto usando SIM800E . Voglio sapere quale comando AT dovrebbe essere inviato al modem per avere tempo? Questo modem ha un RTC. Ma ho bisogno di impostarlo automaticamente tramite cell tower. La torre può inviare l'ora al modem quando richiesto usando un comando AT. In molti telefoni ho visto che l'ora è stata aggiornata durante gli hand-off.

Il manuale non contiene queste informazioni.


1
Secondo tale documento di progettazione hardware è necessario ottenere il "Manuale di comando SIM800E AT" - un documento separato.
RedGrittyBrick

Quindi, in pratica, come semplici telefoni non multimediali aggiornano la posizione?
gpuguy,

3
NITZ è una parte facoltativa degli standard GSM, non supportata da tutti i gestori e potrebbe non essere precisa per essere migliore di qualche minuto.
RedGrittyBrick,

3
Credo che questo sia in tema perché riguarda l'uso di un modulo GSM incorporato per le comunicazioni M2M. Perché questo post è fuori tema e sono stati consentiti i quattro post seguenti: esempio 1 2 3 4
tcrosley

Risposte:


7

Ho usato il seguente comando:

AT+CCLK?

che restituisce la data e l'ora, come:

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

con successo nei prodotti che utilizzano tre diversi moduli di celle: Enfora, Telit e Sierra. Il fatto che usi un carattere + dopo l'AT implica che è un comando comune (al contrario del proprietario) e dovrebbe essere disponibile sulla maggior parte, se non su tutti i moduli di celle. (I comandi proprietari utilizzano un carattere specifico del fornitore dopo l'AT, come AT $, AT%, AT! Ecc.)

Come ho detto in un commento, se non riesci a ottenere il tempo utilizzando questo comando (ad esempio, restituisce tutti gli 0), un altro modo è quello di collegarti alla rete e ottenere il tempo libero da un server utilizzando 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

dove somehost è il tuo server o Google.com ecc. Ciò presuppone anche che index.html sia la pagina principale del sito (non è il caso di Google).

Restituirà un'intestazione come:

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

Per quanto ne so, tutti i server sono obbligati a restituire l'ora GMT nelle loro intestazioni.


1
Alcune cose che ho letto suggeriscono che il valore restituito da + CCLK potrebbe provenire dall'orologio di bordo (RTC), non dalla rete GSM (tower).
RedGrittyBrick,

1
Ho letto anche il comando descritto in questo modo, tuttavia l'ho usato in diversi prodotti utilizzando tre diversi moduli di celle negli ultimi cinque anni circa e ha funzionato praticamente ovunque negli Stati Uniti, in Europa e in Asia. Ci sono stati alcuni corrieri, ad esempio uno in Germania, dove non ha funzionato (ha restituito tutti gli 0); Li ho contattati e mi è stato detto che non supportavano gli aggiornamenti orari sulla rete. Quindi ho scritto il codice per fare una richiesta HTTP 1.1 e prendere il tempo libero da un server.
Tcrosley,

1
Penso che la richiesta HTTP possa essere scritta meglio HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nperché ritengo che /sia meno soggetta a 404s e che HTTP 1.0 rappresenti meglio la nostra (saggia) ignoranza dell'HTTP. Inoltre, il punto e virgola sembra un errore di battitura. Oltre a ciò, la data è GMT / UTC per specifica ( vedi anche ).

1
Questa risposta è informativa ma merita un aggiornamento per quanto riguarda il problema RTC onboard rispetto al tempo di rete.

5

Prima di tutto, NITZ è scarsamente supportato in molte reti (puoi dire COST-CUTTING). Non mi affiderei affatto a come le reti 1 su 10 lo usano, specialmente in luoghi remoti.

In secondo luogo, il comando + CCLK è per l'RTC interno del modem. Alcuni modem dispongono di funzionalità per aggiornare questo orologio dalla rete. Fare affidamento su questo è rischioso.

La richiesta HTTP di cui sopra è incompleta, cioè non funziona. Sapevo come farlo, quindi tornerò indietro quando funziona.

Il fatto che usi un carattere + dopo l'AT implica che è un comando comune (al contrario del proprietario) e dovrebbe essere disponibile sulla maggior parte, se non su tutti i moduli di celle. (I comandi proprietari utilizzano un carattere specifico del fornitore dopo l'AT, come AT $, AT%, AT! Ecc.)

Questo non è del tutto vero. Esistono comandi modem proprietari che seguono la convenzione AT +. Ad esempio AT + WOPEN è un comando Sierra proprietario.

Esistono alcuni comandi uguali indipendentemente dal modem. Questi sono definiti nei documenti 3GPP. I comandi proprietari sono generalmente definiti nei manuali utente del fornitore e chiaramente contrassegnati come proprietari.


4

AT + CLTS = 1 (Ottieni timestamp locale) AT&W (Salva configurazione)

Spegni il modem e accendi il modem (riavvia per ottenere l'ora locale dalla rete)

La prossima volta che il modem si avvia, si dovrebbe essere in grado di ottenere l'ora locale dalla rete e può essere letto inviando

AT + CCLK?

Questo ha funzionato per me utilizzando il modem GSM SIM800, leggere le descrizioni dei comandi AT per ulteriori informazioni


@s0nic2k risposta confermata, NON funzionerebbe come previsto.
Ali80,

3

PuTTY:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

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

Funziona perfettamente, dopodiché devi analizzare il risultato e inserirlo in clk perché ciò non avviene automaticamente. (almeno nel mio Cinterion)


6
Sarebbe utile se tu potessi spiegare, in inglese, cosa fa e perché è una soluzione alla domanda.
David,

@David Resta sintonizzato, stiamo lavorando su una traduzione nella chat.
Nick Alexeev

2
Variante per SIM800H che ha funzionato per me: utilizzare AT + CLTS = 1 invece di AT + CTZU = 1 (poiché CTZU non è supportato). Quindi riceverai un messaggio non richiesto come * PSUTTZ: 2017,1,30,20,17,28, "- 20", 0 quando registri nuovamente
Matt Thomas

2

Utilizzare il comando AT + CIPGSMLOC. Funziona bene con i moduli SIMCOM.

Questo comando richiede il servizio GPRS collegato prima di utilizzarlo. Quindi prima collegare il servizio GPRS usando la sequenza di comandi appropriata, quindi utilizzare questo comando per ottenere la data e l'ora dalla rete GSM.

Per collegare il servizio 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 */

Quindi utilizzare il comando GSM Location:

AT+CIPGSMLOC=1,1

Questo comando richiede un tempo considerevole (pochi secondi) per ottenere le informazioni dalla rete, quindi dare alla funzione di esecuzione del comando un timeout adeguato.

Questo comando restituisce anche la posizione BTS a cui è collegato il modulo. In questo modo puoi ottenere anche una posizione approssimativamente accurata del modulo GSM.

Fare riferimento a questo manuale per ulteriori informazioni: (funziona allo stesso modo per SIM800)

SIM900_GSM Location AT Command Manual_V1.00

Si noti inoltre che il comando AT + CLBS non è lo stesso di questo comando. Potrebbe non funzionare in alcune regioni. (Non sono stato in grado di usarlo!). Ma AT + CIPGSMLOC funziona sempre.


Ricevo una +CIPGSMLOC: 302<\r><\n> risposta
Ali80, il

1
@ Ali80 Ricarica il tuo credito simcard. Ciò può accadere se la tua simcard ha credito ma non è stata addebitata per molto tempo. Puoi testare anche con un'altra simcard.
MDR,

Sì, posso confermare che questo metodo funziona, la mia simcard aveva credito ma aveva un accesso limitato al piano dati.
Ali80,

1

NITZ come sottolineato da RedGrittyBrick è la risposta. Tuttavia, questo è un messaggio che viene inviato solo dalla rete, in genere al momento dell'accesso alla rete. Alcuni corrieri lo inviano, altri no. Non esiste un modo standard per richiederlo.


1

Ecco la sequenza di comandi AT per ottenere l'ora della rete cellulare. Ha funzionato nel mio modulo 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

1

prima invia questi due comandi
AT + CLTS = 1; & W

AT + CFUN = 1,1 e di AT + CLTS? controlla se ottieni questa risposta + clts: 1
e poi invia questo comando AT + CCLK?


Benvenuti in EE.SE. Usa due segni di spunta (``) attorno agli snippet di codice nei tuoi post o usa il {}pulsante sulla barra degli strumenti dell'editor per blocchi di codice come nelle altre risposte. Ciò fornirà uno sfondo grigio e un carattere a larghezza fissa, semplificando la visualizzazione del punto di inizio e fine del codice.
Transistor

0

Ho usato con successo NITZ durante l'inizializzazione e CCLK quando voglio leggere l'RTC interno. TUTTAVIA possono volerci un minuto o due prima che il modem RTC sia impostato dalla rete. Vale la pena mantenere una bandiera per indicare se l'ora è effettivamente valida.


0

Ho sviluppato un firmware per un U-Blox LTE. Lì ho usato l'AT + CCLK? per ottenere l'ora locale corrente dal modem.

Dà un tempo nel seguente formato. Non che sia un comando sincronizzato.

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

Quindi il seguente comando AT è stato inviato prima della registrazione, per sincronizzare l'ora con la rete

AT+CTZU=1\r\n

Quindi la mia sequenza di comandi è:

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)

Logica aggiuntiva per assicurarsi che abbia l'ora corretta:

Controlla la data rispetto a 70/01/01 o 00/01/01 (nel nostro caso, sono i tempi che otteniamo se il modem ha un tempo non valido). E se non è valido, prova periodicamente ogni 1 minuto fino a quando non arriva l'ora esatta. Dopo alcuni tentativi smette di inviare CCLK? e fare affidamento su altre fonti di tempo.

Nota: NITZ è ancora supportato in un numero limitato di paesi ( https://en.wikipedia.org/wiki/NITZ )

Quindi è meglio avere un modo di backup per aggiornare i tempi se non è supportato in quel paese.

Nel mio caso abbiamo un modulo GPS, quindi ottengo aggiornamenti temporali tramite i dati GNSS.

Inoltre, che non è rilevante qui, ma ritenuto utile per la sincronizzazione dell'ora.

Eseguiamo chrony deamon per aggiornare l'ora del sistema (comandi manuali abilitati). Pertanto, entrambi gli aggiornamenti dell'ora vengono recuperati e Chrony decide l'ora corretta e aggiorna l'ora del sistema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.