Welcher AT-Befehl sollte an das Modem gesendet werden, um Zeit zu bekommen?

11

Ich benutze SIM800E . Ich möchte wissen, welcher AT-Befehl an das Modem gesendet werden soll, um Zeit zu bekommen? Dieses Modem hat eine RTC. Aber ich muss es automatisch durch den Zellturm setzen. Der Tower kann die Uhrzeit auf Anforderung über einen AT-Befehl an das Modem senden. Ich habe in vielen Handys gesehen, dass die Uhrzeit bei Übergaben aktualisiert wird.

Das Handbuch enthält diese Informationen nicht.

gpuguy
quelle
1
Gemäß diesem Hardware-Konstruktionsdokument benötigen Sie das "SIM800E AT Command Manual" - ein separates Dokument.
RedGrittyBrick
Dann in der Praxis, wie einfach Nicht-Multimedia-Handys Ort zu aktualisieren?
gpuguy
3
NITZ ist ein optionaler Teil der GSM-Standards, der nicht von allen Netzbetreibern unterstützt wird und möglicherweise eine Genauigkeit von weniger als ein paar Minuten aufweist.
RedGrittyBrick
3
Ich glaube, dies ist ein Thema, da es sich um die Verwendung eines eingebetteten GSM-Moduls für die M2M-Kommunikation handelt. Warum ist dieser Beitrag außerhalb des Themas und die folgenden vier Beiträge waren zulässig: Beispiel 1 2 3 4
tcrosley

Antworten:

7

Ich habe den folgenden Befehl verwendet:

AT+CCLK?

die das Datum und die Uhrzeit zurückgibt, wie:

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

erfolgreich in Produkten mit drei verschiedenen Zellmodulen: Enfora, Telit und Sierra. Die Tatsache, dass ein + -Zeichen nach dem AT verwendet wird, impliziert, dass es ein allgemeiner (im Gegensatz zu proprietären) Befehl ist und auf den meisten, wenn nicht allen Zellenmodulen verfügbar sein sollte. (Proprietäre Befehle verwenden nach dem AT ein herstellerspezifisches Zeichen wie AT $, AT%, AT! Usw.)

Wie ich in einem Kommentar erwähnt habe, besteht eine andere Möglichkeit darin, eine Verbindung zum Netzwerk herzustellen und die Zeit eines Servers mit einem HTTP-Befehl freizugeben, wenn Sie die Zeit mit diesem Befehl nicht ermitteln können (z. B. werden alle Nullen zurückgegeben).

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

Dabei handelt es sich entweder um Ihren eigenen Server oder um Google.com usw. Dabei wird auch vorausgesetzt, dass index.html die Hauptseite der Website ist (bei Google nicht).

Es wird ein Header wie folgt zurückgegeben:

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

Soweit ich weiß, sind alle Server verpflichtet, die GMT-Zeit in ihren Headern zurückzugeben.

Tcrosley
quelle
1
Einige Sachen wir lesen den Wert vorgeschlagen von + CCLK zurück aus der On-Board - Uhr (RTC), nicht aus dem GSM - Netz (Turm).
RedGrittyBrick
1
Ich habe den so beschriebenen Befehl auch gelesen, aber ich habe ihn in den letzten fünf Jahren in mehreren verschiedenen Produkten mit drei verschiedenen Zellmodulen verwendet, und er hat fast überall in den USA und auch in Europa und Asien funktioniert. Es gab einige Fluggesellschaften, zum Beispiel eine in Deutschland, bei denen es nicht funktionierte (alle Nullen zurückgegeben); Ich habe sie kontaktiert und erfahren, dass sie keine Zeitaktualisierungen über das Netzwerk unterstützen. Also habe ich Code geschrieben, um eine HTTP 1.1-Anforderung auszuführen und die freie Zeit eines Servers zu nutzen.
Tcrosley
1
Ich denke, die HTTP-Anfrage könnte besser geschrieben werden, HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nda ich der Meinung bin, dass sie /weniger anfällig für 404 ist und HTTP 1.0 unsere (gerätebezogene) Unkenntnis von HTTP besser widerspiegelt. Außerdem sieht das Semikolon wie ein Tippfehler aus. Ansonsten ist das Datum laut Spezifikation GMT / UTC ( siehe auch ).
1
Diese Antwort ist informativ, verdient jedoch eine Aktualisierung in Bezug auf das Problem zwischen Onboard-Echtzeituhr und Netzwerkzeit.
5

Erstens wird NITZ in vielen Netzwerken schlecht unterstützt (können Sie COST-CUTTING sagen). Ich würde mich überhaupt nicht darauf verlassen, da 1 von 10 Netzwerken es verwendet, insbesondere an weit entfernten Orten.

Zweitens gilt der Befehl + CCLK für die interne RTC des Modems. Einige Modems können diese Uhr über das Netzwerk aktualisieren. Darauf zu vertrauen ist riskant.

Die obige HTTP-Anfrage ist unvollständig, dh sie funktioniert nicht. Früher wusste ich, wie man das macht, also kehre ich zurück, wenn es funktioniert.

Die Tatsache, dass ein + -Zeichen nach dem AT verwendet wird, impliziert, dass es ein allgemeiner (im Gegensatz zu proprietären) Befehl ist und auf den meisten, wenn nicht allen Zellenmodulen verfügbar sein sollte. (Proprietäre Befehle verwenden nach dem AT ein herstellerspezifisches Zeichen wie AT $, AT%, AT! Usw.)

Das ist nicht ganz richtig. Es gibt proprietäre Modembefehle, die der AT + -Konvention folgen. Zum Beispiel ist AT + WOPEN ein proprietäres Sierra-Kommando.

Es gibt eine Reihe von Befehlen, die unabhängig vom Modem gleich sind. Diese sind in den 3GPP-Dokumenten definiert. Die proprietären Befehle sind normalerweise in den Benutzerhandbüchern des Herstellers definiert und eindeutig als proprietär gekennzeichnet.

s0nic2k
quelle
4

AT + CLTS = 1 (Get local time stamp) AT & W (Konfiguration speichern)

Modem ausschalten und Modem einschalten (Neustart, um die lokale Zeit vom Netzwerk abzurufen)

Wenn das Modem das nächste Mal hochfährt, sollten Sie in der Lage sein, die Ortszeit über das Netzwerk abzurufen und diese durch Senden zu lesen

AT + CCLK?

Dies funktionierte für mich im SIM800 GSM-Modem lesen Sie AT-Befehlsbeschreibungen für weitere Informationen

Sumit Dubey
quelle
@ s0nic2k Antwort bestätigt, dies würde NICHT so funktionieren, wie Sie es erwarten würden.
Ali80
3

Kitt:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

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

Funktioniert einwandfrei, danach müssen Sie das Ergebnis analysieren und in clk platzieren, da dies nicht automatisch geschieht. (zumindest in meinem Cinterion)

died74
quelle
6
Es wäre hilfreich, wenn Sie auf Englisch erklären könnten, was dies tut und warum es eine Lösung für die Frage ist.
David
@David Bleib dran, wir arbeiten an einer Übersetzung im Chat.
Nick Alexeev
2
Variante für SIM800H, die bei mir funktioniert hat: Verwenden Sie AT + CLTS = 1 anstelle von AT + CTZU = 1 (da CTZU nicht unterstützt wird). Dann erhalten Sie eine unerwünschte Nachricht wie * PSUTTZ: 2017,1,30,20,17,28, "- 20", 0, wenn Sie sich neu registrieren
Matt Thomas
2

Verwenden Sie den Befehl AT + CIPGSMLOC. Es funktioniert gut in SIMCOM-Modulen.

Für diesen Befehl muss der GPRS-Dienst angeschlossen sein, bevor Sie ihn verwenden. Verbinden Sie den GPRS-Dienst zuerst mit der entsprechenden Befehlssequenz und rufen Sie dann mit diesem Befehl Datum und Uhrzeit vom GSM-Netz ab.

Zum Anhängen eines GPRS-Dienstes:

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 */

Dann benutze den GSM Location Befehl:

AT+CIPGSMLOC=1,1

Dieser Befehl benötigt viel Zeit (einige Sekunden), um die Informationen aus dem Netzwerk abzurufen. Geben Sie der Befehlsausführungsfunktion daher eine angemessene Zeitüberschreitung.

Dieser Befehl gibt auch die BTS-Position zurück, mit der das Modul verbunden ist. So können Sie auch den ungefähren Standort des GSM-Moduls ermitteln.

Weitere Informationen finden Sie in diesem Handbuch: (Funktioniert auf die gleiche Weise für SIM800)

SIM900_GSM Location AT Command Manual_V1.00

Beachten Sie auch, dass der Befehl AT + CLBS nicht mit diesem Befehl identisch ist. In einigen Regionen funktioniert es möglicherweise nicht. (Ich konnte es nicht benutzen!). Das AT + CIPGSMLOC funktioniert aber immer.

MDR
quelle
Ich bekomme +CIPGSMLOC: 302<\r><\n> als Antwort
Ali80
1
@ Ali80 Lade dein Simkartenguthaben auf. Dies kann vorkommen, wenn Ihre SIM-Karte über ein Guthaben verfügt, aber lange nicht mehr aufgeladen wurde. Sie können auch mit einer anderen Simkarte testen.
MDR
Ja, ich kann bestätigen, dass diese Methode funktioniert. Meine SIM-Karte hatte ein Guthaben, aber einige Datentarife hatten eingeschränkten Zugriff.
Ali80
1

NITZ, wie von RedGrittyBrick herausgestellt, ist die Antwort. Dies ist jedoch eine Nachricht, die nur vom Netzwerk gesendet wird, normalerweise beim Beitritt zum Netzwerk. Einige Fluggesellschaften senden es, andere nicht. Es gibt keine Standardmethode, um dies anzufordern.

pjc50
quelle
1

Hier ist die AT-Befehlssequenz zum Abrufen der Mobilfunknetzzeit. Sie funktionierte in meinem UBLOX LEON G-200 GSM-Modul.

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
quelle
1

Senden Sie zuerst diesen beiden Befehl
AT + CLTS = 1; & W

AT + CFUN = 1,1 und als AT + CLTS? Überprüfen Sie, ob Sie diese Antwort + clts: 1 erhalten
und dann diesen Befehl AT + CCLK senden.

souhard bekal
quelle
Willkommen bei EE.SE. Verwenden Sie zwei Back-Ticks (``) um Code-Schnipsel in Ihren Posts oder verwenden Sie die {}Schaltfläche in der Editor-Symbolleiste für Codeblöcke wie in den anderen Antworten. Dadurch erhalten Sie einen grauen Hintergrund und eine Schrift mit fester Breite, sodass Sie leicht erkennen können, wo Ihr Code beginnt und endet.
Transistor
0

Ich habe NITZ während der Initialisierung erfolgreich verwendet und CCLK, wenn ich die interne RTC lesen möchte. Es kann jedoch ein oder zwei Minuten dauern, bis die Modem-RTC über das Netzwerk eingestellt ist. Es lohnt sich, ein Flag beizubehalten, um anzuzeigen, ob die Uhrzeit tatsächlich gültig ist.

MC
quelle
0

Ich habe eine Firmware für ein U-Blox LTE entwickelt. Dort habe ich das AT + CCLK benutzt? um die aktuelle Ortszeit vom Modem zu erhalten.

Es gibt eine Zeit in folgendem Format an. Nicht dass es ein synchronisierter Befehl wäre.

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

Daher wurde vor der Registrierung der folgende AT-Befehl gesendet, um die Uhrzeit mit dem Netzwerk zu synchronisieren

AT+CTZU=1\r\n

Meine Befehlssequenz lautet also:

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)

Zusätzliche Logik, um sicherzustellen, dass es die richtige Zeit hat:

Es prüft das Datum gegen den 70/01/01 oder den 00/01/01 (in unserem Fall sind dies die Zeiten, die wir erhalten, wenn das Modem eine ungültige Zeit hat). Und wenn es ungültig ist, versucht es regelmäßig alle 1 Minute, bis es eine korrekte Zeit bekommt. Nach einigen Wiederholungsversuchen wird CCLK nicht mehr gesendet? und verlassen sich auf andere Zeitquellen.

Hinweis: NITZ wird in einigen Ländern noch nicht unterstützt ( https://en.wikipedia.org/wiki/NITZ ).

Wenn dies in diesem Land nicht unterstützt wird, ist es am besten, eine Backup-Methode zum Aktualisieren der Zeit zu verwenden.

In meinem Fall haben wir ein GPS-Modul, so dass ich Zeitaktualisierungen über GNSS-Daten erhalte.

Darüber hinaus ist das hier nicht relevant, aber für die Zeitsynchronisation nützlich.

Wir führen chrony deamon aus, um die Systemzeit zu aktualisieren (manuelle Befehle aktiviert). Somit werden beide Zeitaktualisierungen abgerufen und chrony bestimmt die korrekte Zeit und aktualisiert die Systemzeit.

SajithP
quelle