Qual comando AT deve ser enviado ao modem para obter tempo?

11

Estou usando o SIM800E . Quero saber qual comando AT deve ser enviado ao modem para obter tempo? Este modem possui um RTC. Mas preciso configurá-lo automaticamente através da torre de celular. A torre pode enviar a hora para o modem quando solicitada usando um comando AT. Eu já vi em muitos telefones que o tempo é atualizado durante as transferências.

O manual não possui essas informações.

gpuguy
fonte
1
De acordo com o documento de design do hardware, você precisa obter o "SIM800E AT Command Manual" - um documento separado.
RedGrittyBrick
Então, na prática, como telefones não multimídia simples atualizam o local?
gpuguy
3
A NITZ é uma parte opcional dos padrões GSM, não suportada por todas as operadoras e pode não ser precisa em menos de alguns minutos.
RedGrittyBrick
3
Acredito que isso esteja no tópico porque se refere ao uso de um módulo GSM incorporado para comunicações M2M. Por que esta postagem está fora de tópico e as quatro publicações a seguir foram permitidas: exemplo 1 2 3 4
tcrosley

Respostas:

7

Eu usei o seguinte comando:

AT+CCLK?

que retorna a data e a hora, como:

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

produtos com sucesso usando três módulos de células diferentes: Enfora, Telit e Sierra. O fato de ele usar um caractere + após o AT implica que ele é um comando comum (em oposição ao proprietário) e deve estar disponível na maioria, se não em todos os módulos de célula. (Os comandos proprietários usam um caractere específico do fornecedor após o AT, como AT $, AT%, AT! Etc.)

Como mencionei em um comentário, se você não pode obter tempo usando este comando (por exemplo, ele retorna todos os 0), então outra maneira é conectar-se à rede e tirar o tempo de um servidor usando um comando HTTP.

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

onde somehost é seu próprio servidor ou Google.com etc. Isso também assume que index.html é a página principal do site (não é o caso do Google).

Ele retornará um cabeçalho como:

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

Até onde eu sei, todos os servidores são obrigados a retornar o tempo GMT em seus cabeçalhos.

tcrosley
fonte
1
Algumas coisas que li sugerem que o valor retornado por + CCLK pode ser do relógio de bordo (RTC), não da rede GSM (torre).
RedGrittyBrick 13/09
1
Também li o comando descrito dessa maneira, no entanto, tenho o usado em vários produtos diferentes usando três módulos de células diferentes nos últimos cinco anos ou mais, e ele funcionou em praticamente todos os lugares nos EUA e também na Europa e Ásia. Houve algumas operadoras, por exemplo, uma na Alemanha, onde não funcionou (retornou todos os zeros); Entrei em contato com eles e me disseram que eles não eram compatíveis com atualizações de tempo pela rede. Então, eu escrevi o código para fazer uma solicitação HTTP 1.1 e aproveitar o tempo livre de um servidor.
tcrosley
1
Eu acho que a solicitação HTTP poderia ser melhor escrita, HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\npois me sinto /menos propensa a 404s e que o HTTP 1.0 representa melhor nossa ignorância (em termos de dispositivo) do HTTP. Além disso, o ponto e vírgula parece um erro de digitação. Fora isso, a data é GMT / UTC por especificação ( consulte também ).
1
Esta resposta é informativa, mas merece uma atualização sobre o RTC onboard versus o tempo de tempo da rede.
5

Primeiro, o NITZ é pouco suportado em muitas redes (você pode dizer COST-CUTTING). Eu não confiaria nele, já que 1 em cada 10 redes o usa, especialmente em lugares distantes.

Em segundo lugar, o comando + CCLK é para o RTC interno do modem. Alguns modems possuem recursos para atualizar este relógio da rede. Contar com isso é arriscado.

A solicitação HTTP acima está incompleta, ou seja, não funciona. Eu costumava saber como fazer isso, assim, reverterá quando funcionar.

O fato de ele usar um caractere + após o AT implica que ele é um comando comum (em oposição ao proprietário) e deve estar disponível na maioria, se não em todos os módulos de célula. (Os comandos proprietários usam um caractere específico do fornecedor após o AT, como AT $, AT%, AT! Etc.)

Isso não é inteiramente verdade. Existem comandos de modem proprietários que seguem a convenção AT +. Por exemplo, AT + WOPEN é um comando proprietário da Sierra.

Há um certo conjunto de comandos iguais, independentemente do modem. Estes são definidos nos documentos 3GPP. Os comandos proprietários são geralmente definidos nos manuais do usuário do fornecedor e claramente marcados como proprietários.

s0nic2k
fonte
4

AT + CLTS = 1 (Obter carimbo de hora local) AT&W (Salvar configuração)

Desligue o modem e ligue o modem (reinicialize para obter a hora local da rede)

Da próxima vez que o modem for inicializado, você poderá obter a hora local pela rede e pode ser lido enviando

AT + CCLK?

Isso funcionou para mim, estou usando o modem SIM800 GSM, leia as descrições dos comandos AT para obter mais informações

Sumit Dubey
fonte
@ s0nic2k resposta confirmada, isso NÃO funcionaria como você esperaria.
Ali80
3

PuTTY:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

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

Funciona perfeitamente, depois disso você precisa analisar o resultado e colocar no clk, porque isso não acontece automaticamente. (pelo menos no meu Cinterion)

morreu74
fonte
6
Ajudaria se você pudesse explicar, em inglês, o que isso faz e por que é uma solução para a pergunta.
David
@ David David Fique ligado, estamos trabalhando em uma tradução no chat.
Nick Alexeev
2
Variante do SIM800H que funcionou para mim: use AT + CLTS = 1 em vez de AT + CTZU = 1 (uma vez que o CTZU não é suportado). Você receberá uma mensagem não solicitada como * PSUTTZ: 2017,1,30,20,17,28, "- 20", 0 quando se registrar novamente
Matt Thomas
2

Use o comando AT + CIPGSMLOC. Funciona bem nos módulos SIMCOM.

Este comando precisa do serviço GPRS anexado antes de você usá-lo. Portanto, primeiro conecte o serviço GPRS usando a sequência de comandos apropriada e use este comando para obter a data e a hora da rede GSM.

Para anexar o serviço 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 */

Em seguida, use o comando Localização GSM:

AT+CIPGSMLOC=1,1

Esse comando precisa de um tempo considerável (alguns segundos) para obter as informações da rede, portanto, dê tempo limite à função de execução do comando.

Este comando também retorna o local do BTS ao qual o módulo está conectado. Assim, você também pode obter uma localização precisa do módulo GSM.

Consulte este manual para obter mais informações: (funciona da mesma maneira no SIM800)

SIM900_GSM Location AT Command Manual_V1.00

Observe também que o comando AT + CLBS não é o mesmo que este comando. Pode não funcionar em algumas regiões. (Não pude usá-lo!). Mas o AT + CIPGSMLOC sempre funciona.

MDR
fonte
Eu recebo +CIPGSMLOC: 302<\r><\n> em resposta
Ali80
1
@ Ali80 Recarregue seu crédito de cartão SIM. Isso pode acontecer se o seu cartão sim tiver crédito, mas não for cobrado por um longo tempo. Você pode testar com outro simcard também.
MDR
sim, posso confirmar que esse método funciona, meu cartão sim tinha crédito, mas tinha algum acesso limitado ao plano de dados.
Ali80
1

NITZ, como apontado por RedGrittyBrick, é a resposta. No entanto, esta é uma mensagem enviada apenas pela rede, geralmente ao ingressar na rede. Algumas operadoras enviam, outras não. Não existe uma maneira padrão de solicitá-lo.

pjc50
fonte
1

Aqui está a sequência de comandos AT para obter o tempo da rede celular. Funcionou no meu 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
fonte
1

primeiro envie estes dois comandos
AT + CLTS = 1; & W

AT + CFUN = 1,1 e que AT + CLTS? verifique se você recebe esta resposta + clts: 1
e se envia este comando AT + CCLK?

souhard bekal
fonte
Bem-vindo ao EE.SE. Use dois back-ticks (``) ao redor de trechos de código em suas postagens ou use o {}botão na barra de ferramentas do editor para blocos de código, como nas outras respostas. Isso fornecerá um plano de fundo cinza e uma fonte de largura fixa, facilitando a visualização de onde o código começa e termina.
Transistor
0

Utilizei com êxito o NITZ durante a inicialização e o CCLK quando desejo ler o RTC interno. No entanto, pode levar um ou dois minutos antes que o modem RTC seja configurado na rede. Vale a pena manter uma bandeira para indicar se o tempo é realmente válido.

MC
fonte
0

Eu desenvolvi um firmware para um U-Blox LTE. Lá eu usei o AT + CCLK? para obter a hora local atual do modem.

Dá um tempo no seguinte formato. Não que seja um 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)

Portanto, o seguinte comando AT foi enviado antes do registro, para sincronizar o horário com a rede

AT+CTZU=1\r\n

Então, minha sequência de comandos é:

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 garantir que ele tenha a hora correta:

Ele verifica a data em 70/01/01 ou 00/01/01 (no nosso caso, são os horários que obtemos se o modem tiver um horário inválido). E se for inválido, ele tenta periodicamente a cada 1 minuto até chegar à hora correta. Após algumas tentativas, para de enviar o CCLK? e confiar em outras fontes de tempo.

Nota: NITZ ainda é suportado em um conjunto limitado de países ( https://en.wikipedia.org/wiki/NITZ )

Portanto, é melhor ter uma maneira alternativa de atualizar o horário, se não houver suporte nesse país.

No meu caso, temos o módulo GPS, para que eu obtenha atualizações de tempo através dos dados do GNSS.

Além disso, o que não é relevante aqui, mas considerado útil para sincronização de horário.

Executamos o chrony deamon para atualizar a hora do sistema (comandos manuais ativados). Portanto, as duas atualizações de tempo são buscadas e o chrony decide a hora correta e atualiza a hora do sistema.

SajithP
fonte