Quelle commande AT doit être envoyée au modem pour obtenir l'heure?


11

J'utilise SIM800E . Je veux savoir quelle commande AT doit être envoyée au modem pour obtenir l'heure? Ce modem a un RTC. Mais je dois le régler automatiquement via la tour cellulaire. La tour peut envoyer l'heure au modem sur demande à l'aide d'une commande AT. J'ai vu dans de nombreux téléphones que l'heure est mise à jour lors des transferts.

Le manuel ne contient pas ces informations.


1
Selon ce document de conception matérielle, vous devez obtenir le "SIM800E AT Command Manual" - un document séparé.
RedGrittyBrick

Ensuite, dans la pratique, comment les téléphones non multimédias simples mettent-ils à jour l'emplacement?
gpuguy

3
NITZ est une partie optionnelle des normes GSM, non prise en charge par tous les opérateurs et peut ne pas être précise à mieux que quelques minutes.
RedGrittyBrick

3
Je crois que c'est sur le sujet car cela concerne l'utilisation d'un module GSM intégré pour les communications M2M. Pourquoi ce message est-il hors sujet et les quatre messages suivants ont été autorisés: exemple 1 2 3 4
tcrosley

Réponses:


7

J'ai utilisé la commande suivante:

AT+CCLK?

qui renvoie la date et l'heure, comme:

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

avec succès dans des produits utilisant trois modules cellulaires différents: Enfora, Telit et Sierra. Le fait qu'il utilise un caractère + après l'AT implique qu'il s'agit d'une commande commune (par opposition à propriétaire), et devrait être disponible sur la plupart sinon tous les modules de cellule. (Les commandes propriétaires utilisent un caractère spécifique au vendeur après l'AT, comme AT $, AT%, AT! Etc.)

Comme je l'ai mentionné dans un commentaire, si vous ne pouvez pas obtenir l'heure en utilisant cette commande (par exemple, elle renvoie tous les 0), alors une autre façon consiste à se connecter au réseau et à obtenir le temps d'un serveur à l'aide d'une commande HTTP.

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

où somehost est votre propre serveur ou Google.com etc. Cela suppose également que index.html est la page principale du site (pas le cas pour Google).

Il renverra un en-tête comme:

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

Pour autant que je sache, tous les serveurs sont obligés de renvoyer l'heure GMT dans leurs en-têtes.


1
Certains éléments que j'ai lus suggèrent que la valeur renvoyée par + CCLK peut provenir de l'horloge intégrée (RTC), et non du réseau GSM (tour).
RedGrittyBrick

1
J'ai également lu la commande décrite de cette façon, mais je l'ai utilisée dans plusieurs produits différents en utilisant trois modules de cellule différents au cours des cinq dernières années environ, et elle a fonctionné un peu partout aux États-Unis, ainsi qu'en Europe et en Asie. Il y a eu quelques transporteurs, par exemple un en Allemagne, où cela n'a pas fonctionné (retourné tous les 0); Je les ai contactés et on m'a dit qu'ils ne prenaient pas en charge les mises à jour de l'heure sur le réseau. J'ai donc écrit du code pour faire une requête HTTP 1.1 et récupérer le temps d'un serveur.
tcrosley

1
Je pense que la requête HTTP pourrait être mieux écrite car HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nje pense qu'elle /est moins sujette aux 404 et que HTTP 1.0 représente mieux notre ignorance (par périphérique) de HTTP. En outre, le point-virgule ressemble à une faute de frappe. En dehors de cela, la date est GMT / UTC par spécification ( voir aussi ).

1
Cette réponse est informative mais mérite une mise à jour concernant le problème d'horloge RTC vs temps réseau.

5

Tout d'abord, NITZ est mal pris en charge dans de nombreux réseaux (pouvez-vous dire COUPE-COUT). Je ne m'y fierais pas du tout, car 1 réseau sur 10 l'utilise, en particulier dans des endroits éloignés.

Deuxièmement, la commande + CCLK concerne le RTC interne du modem. Certains modems ont des installations pour mettre à jour cette horloge à partir du réseau. S'appuyer sur cela est risqué.

La demande HTTP ci-dessus est incomplète, c'est-à-dire qu'elle ne fonctionne pas. J'avais l'habitude de savoir comment faire, donc je reviendrai quand cela fonctionnera.

Le fait qu'il utilise un caractère + après l'AT implique qu'il s'agit d'une commande commune (par opposition à propriétaire), et devrait être disponible sur la plupart sinon tous les modules de cellule. (Les commandes propriétaires utilisent un caractère spécifique au vendeur après l'AT, comme AT $, AT%, AT! Etc.)

Ce n'est pas tout à fait vrai. Il existe des commandes de modem propriétaires qui suivent la convention AT +. Par exemple AT + WOPEN est une commande propriétaire de Sierra.

Il existe un certain ensemble de commandes identiques, quel que soit le modem. Celles-ci sont définies dans les documents 3GPP. Les commandes propriétaires sont généralement définies dans les manuels d'utilisation du fournisseur et clairement marquées comme étant propriétaires.


4

AT + CLTS = 1 (Obtenir l'horodatage local) AT&W (Enregistrer la configuration)

Éteignez le modem et allumez le modem (redémarrez pour obtenir l'heure locale du réseau)

La prochaine fois que le modem démarrera, vous devriez pouvoir obtenir l'heure locale par le réseau et pouvoir être lu par l'envoi

AT + CCLK?

Cela a fonctionné pour moi im en utilisant le modem GSM SIM800 lire les descriptions des commandes AT pour plus d'informations


@ s0nic2k a confirmé la réponse, cela ne fonctionnerait PAS comme prévu.
Ali80

3

Mastic:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

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

Fonctionne parfaitement, après cela, vous devez analyser le résultat et le placer dans clk car cela ne se produit pas automatiquement. (au moins dans mon Cinterion)


6
Il serait utile que vous puissiez expliquer, en anglais, ce que cela fait et pourquoi c'est une solution à la question.
David

@David Restez à l'écoute, nous travaillons sur une traduction dans le chat.
Nick Alexeev

2
Variante pour SIM800H qui a fonctionné pour moi: utilisez AT + CLTS = 1 au lieu de AT + CTZU = 1 (car CTZU n'est pas pris en charge). Ensuite, vous recevrez un message non sollicité comme * PSUTTZ: 2017,1,30,20,17,28, "- 20", 0 lorsque vous vous réenregistrerez
Matt Thomas

2

Utilisez la commande AT + CIPGSMLOC. Cela fonctionne bien dans les modules SIMCOM.

Cette commande a besoin du service GPRS attaché avant de l'utiliser. Attachez donc d'abord le service GPRS à l'aide de la séquence de commandes appropriée, puis utilisez cette commande pour obtenir la date et l'heure à partir du réseau GSM.

Pour attacher le service 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 */

Utilisez ensuite la commande Emplacement GSM:

AT+CIPGSMLOC=1,1

Cette commande a besoin d'un temps considérable (quelques secondes) pour obtenir les informations du réseau, donc donnez à la fonction d'exécution de la commande un délai d'expiration approprié.

Cette commande renvoie également l'emplacement BTS auquel le module est connecté. Ainsi, vous pouvez également obtenir un emplacement à peu près précis du module GSM.

Reportez-vous à ce manuel pour plus d'informations: (fonctionne de la même manière pour SIM800)

SIM900_GSM Location AT Command Manual_V1.00

Notez également que la commande AT + CLBS n'est pas la même que cette commande. Cela peut ne pas fonctionner dans certaines régions. (Je n'ai pas pu l'utiliser!). Mais l'AT + CIPGSMLOC fonctionne toujours.


Je reçois +CIPGSMLOC: 302<\r><\n> en réponse
Ali80

1
@ Ali80 Rechargez votre crédit de carte SIM. Cela peut arriver si votre carte SIM a du crédit mais n'a pas été débitée depuis longtemps. Vous pouvez également tester avec une autre carte SIM.
MDR

Oui, je peux confirmer que cette méthode fonctionne, ma carte SIM avait un crédit mais l'accès au plan de données était limité.
Ali80

1

NITZ comme l'a souligné RedGrittyBrick est la réponse. Cependant, il s'agit d'un message envoyé uniquement par le réseau, généralement lors de l'adhésion au réseau. Certains transporteurs l'envoient, d'autres non. Il n'y a aucun moyen standard de le demander.


1

Voici la séquence de commandes AT pour obtenir l'heure du réseau cellulaire. Cela a fonctionné dans mon module 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

envoyer d'abord ces deux commandes
AT + CLTS = 1; & W

AT + CFUN = 1,1 et que AT + ATPC? vérifier si vous obtenez cette réponse + clts: 1
et ensuite envoyer cette commande AT + CCLK?


Bienvenue à EE.SE. Utilisez deux back-ticks (``) autour des extraits de code dans vos messages ou utilisez le {}bouton sur la barre d'outils de l'éditeur pour les blocs de code comme dans les autres réponses. Cela donnera un arrière-plan gris et une police à largeur fixe, ce qui vous permettra de voir facilement où commence et se termine votre code.
Transistor

0

J'ai utilisé avec succès NITZ pendant l'initialisation et CCLK lorsque je veux lire le RTC interne. TOUTEFOIS, cela peut prendre une minute ou deux avant que le RTC du modem soit défini à partir du réseau. Il vaut la peine de maintenir un drapeau pour indiquer si l'heure est effectivement valide.


0

J'ai développé un firmware pour un U-Blox LTE. Là, j'ai utilisé l'AT + CCLK? pour obtenir l'heure locale actuelle du modem.

Il donne une heure au format suivant. Non pas que ce soit une commande synchronisée.

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

Ainsi, la commande AT suivante a été envoyée avant l'enregistrement, pour synchroniser l'heure avec le réseau

AT+CTZU=1\r\n

Donc, ma séquence de commandes est:

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)

Logique supplémentaire pour garantir l'heure exacte:

Il vérifie la date par rapport au 70/01/01 ou 00/01/01 (dans notre cas, ce sont les heures que nous obtenons si le modem a une heure invalide). Et s'il n'est pas valide, il essaie périodiquement toutes les 1 minutes jusqu'à ce qu'il obtienne une heure correcte. Après quelques tentatives cesse d'envoyer CCLK? et s'appuyer sur d'autres sources de temps.

Remarque: NITZ est encore pris en charge dans un nombre limité de pays ( https://en.wikipedia.org/wiki/NITZ )

Il est donc préférable d'avoir un moyen de sauvegarde de la mise à jour du temps s'il n'est pas pris en charge dans ce pays.

Dans mon cas, nous avons un module GPS, donc j'obtiens des mises à jour de l'heure via les données GNSS.

De plus, ce qui n'est pas pertinent ici, mais jugé utile pour la synchronisation de l'heure.

Nous exécutons chrony deamon pour mettre à jour l'heure du système (commandes manuelles activées). Ainsi, les deux mises à jour de l'heure sont récupérées et chrony décide de l'heure correcte et met à jour l'heure du système.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.