Jakie polecenie AT należy wysłać do modemu, aby uzyskać czas?

11

Używam SIM800E . Chcę wiedzieć, jakie polecenie AT należy wysłać do modemu, aby uzyskać czas? Ten modem ma RTC. Ale muszę ustawić to automatycznie przez wieżę komórkową. Wieża może wysłać czas do modemu na żądanie za pomocą polecenia AT. Widziałem w wielu telefonach, że czas jest aktualizowany podczas przekazywania.

Instrukcja nie ma tej informacji.

gpuguy
źródło
1
Zgodnie z tym dokumentem projektowym sprzętu należy uzyskać „Podręcznik poleceń SIM800E AT” - osobny dokument.
RedGrittyBrick
Zatem w praktyce, jak proste telefony niemedialne aktualizują lokalizację?
gpuguy
3
NITZ jest opcjonalną częścią standardów GSM, nieobsługiwaną przez wszystkich operatorów i może być niedokładna z dokładnością do kilku minut.
RedGrittyBrick
3
Uważam, że jest to temat, ponieważ dotyczy zastosowania wbudowanego modułu GSM do komunikacji M2M. Dlaczego ten post jest nie na temat i dozwolone są następujące cztery posty: przykład 1 2 3 4
tcrosley

Odpowiedzi:

7

Użyłem następującego polecenia:

AT+CCLK?

która zwraca datę i godzinę, na przykład:

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

z powodzeniem w produktach wykorzystujących trzy różne moduły komórkowe: Enfora, Telit i Sierra. Fakt, że używa AT po znaku AT, sugeruje, że jest to powszechne (w przeciwieństwie do zastrzeżonych) polecenie i powinno być dostępne w większości, jeśli nie we wszystkich modułach komórkowych. (Polecenia zastrzeżone używają znaku AT po dostawcy, np. AT $, AT%, AT! Itd.)

Jak wspomniałem w komentarzu, jeśli nie możesz uzyskać czasu za pomocą tego polecenia (na przykład zwraca wszystkie zera), to innym sposobem jest połączenie się z siecią i zwolnienie czasu z serwera za pomocą polecenia HTTP.

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

gdzie somehost jest albo własnym serwerem, albo Google.com itp. Zakłada się również, że index.html jest główną stroną witryny (nie dotyczy to Google).

Zwróci nagłówek taki jak:

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

O ile mi wiadomo, wszystkie serwery są zobowiązane do zwrócenia czasu GMT w swoich nagłówkach.

tcrosley
źródło
1
Niektóre rzeczy, które przeczytałem, sugerują, że wartość zwracana przez + CCLK może pochodzić z zegara pokładowego (RTC), a nie z sieci GSM (wieża).
RedGrittyBrick
1
Przeczytałem również opisaną w ten sposób komendę, jednak przez ostatnie pięć lat korzystałem z niej w kilku różnych produktach wykorzystujących trzy różne moduły ogniw i działało to niemal wszędzie w USA, a także w Europie i Azji. Było kilku przewoźników, na przykład jeden w Niemczech, gdzie to nie działało (zwróciło wszystkie zera); Skontaktowałem się z nimi i powiedziano mi, że nie obsługują aktualizacji czasu przez sieć. Napisałem więc kod, aby wykonać żądanie HTTP 1.1 i wykorzystać czas wolny od serwera.
tcrosley,
1
Myślę, że żądanie HTTP może być lepiej napisane, ponieważ HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nuważam, że /jest mniej podatny na 404s i że HTTP 1.0 lepiej reprezentuje naszą (pod względem urządzenia) ignorancję HTTP. Poza tym średnik wygląda jak literówka. Poza tym datą jest GMT / UTC według specyfikacji ( patrz także ).
1
Ta odpowiedź jest pouczająca, ale zasługuje na aktualizację dotyczącą wbudowanego RTC vs. problem z czasem sieciowym.
5

Przede wszystkim NITZ jest słabo obsługiwany w wielu sieciach (czy można powiedzieć CUT-CUTTING). Nie polegałbym na tym wcale, ponieważ korzysta z niego 1 na 10 sieci, szczególnie w odległych miejscach.

Po drugie, polecenie + CCLK dotyczy wewnętrznego RTC modemu. Niektóre modemy mają możliwość aktualizacji tego zegara z sieci. Poleganie na tym jest ryzykowne.

Powyższe żądanie HTTP jest niekompletne, tzn. Nie działa. Wcześniej wiedziałem, jak to zrobić, więc wrócę, gdy zadziała.

Fakt, że używa AT po znaku AT, sugeruje, że jest to powszechne (w przeciwieństwie do zastrzeżonych) polecenie i powinno być dostępne w większości, jeśli nie we wszystkich modułach komórkowych. (Polecenia zastrzeżone używają znaku AT po dostawcy, np. AT $, AT%, AT! Itd.)

To nie do końca prawda. Istnieją zastrzeżone polecenia modemowe zgodne z konwencją AT +. Na przykład AT + WOPEN jest zastrzeżonym poleceniem Sierra.

Istnieje pewien zestaw poleceń, które są takie same niezależnie od modemu. Są one zdefiniowane w dokumentach 3GPP. Polecenia zastrzeżone są zwykle zdefiniowane w instrukcjach obsługi dostawcy i wyraźnie oznaczone jako zastrzeżone.

s0nic2k
źródło
4

AT + CLTS = 1 (Uzyskaj lokalny znacznik czasu) AT&W (Zapisz konfigurację)

Wyłącz modem i włącz modem (uruchom ponownie, aby uzyskać czas lokalny z sieci)

Następnym razem, gdy modem się uruchomi, powinieneś być w stanie uzyskać czas lokalny przez sieć i można go odczytać, wysyłając

AT + CCLK?

To zadziałało dla mnie za pomocą modemu SIM800 GSM czytać opisy poleceń AT, aby uzyskać więcej informacji

Sumit Dubey
źródło
@ s0nic2k odpowiedź potwierdzona, NIE zadziała to tak, jak można się spodziewać.
Ali80,
3

Kit:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

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

Działa idealnie, po czym musisz przeanalizować wynik i umieścić go w clk, ponieważ nie dzieje się to automatycznie. (przynajmniej w moim Cinterionie)

zmarł74
źródło
6
Byłoby pomocne, gdybyś mógł wyjaśnić po angielsku, co to robi i dlaczego jest to rozwiązanie pytania.
David
@David Bądź na bieżąco, pracujemy nad tłumaczeniem na czacie.
Nick Alexeev
2
Wariant dla SIM800H, który działał dla mnie: użyj AT + CLTS = 1 zamiast AT + CTZU = 1 (ponieważ CTZU nie jest obsługiwane). Wtedy otrzymasz niechcianą wiadomość, taką jak * PSUTTZ: 2017,1,30,20,17,28, „- 20”, 0 po ponownej rejestracji
Matt Thomas
2

Użyj polecenia AT + CIPGSMLOC. Działa dobrze w modułach SIMCOM.

To polecenie wymaga dołączenia usługi GPRS przed użyciem. Najpierw podłącz usługę GPRS, używając odpowiedniej sekwencji poleceń, a następnie użyj tego polecenia, aby uzyskać datę i godzinę z sieci GSM.

Aby dołączyć usługę 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 */

Następnie użyj polecenia Lokalizacja GSM:

AT+CIPGSMLOC=1,1

Ta komenda potrzebuje dużo czasu (kilku sekund), aby uzyskać informacje z sieci, dlatego należy odpowiednio ustawić limit czasu dla funkcji wykonywania komendy.

To polecenie zwraca również lokalizację BTS, do której moduł jest podłączony. Dzięki temu możesz uzyskać z grubsza dokładną lokalizację modułu GSM.

Więcej informacji można znaleźć w tym podręczniku: (działa tak samo dla SIM800)

SIM900_GSM Location AT Command Manual_V1.00

Zauważ również, że polecenie AT + CLBS nie jest tym samym, co to polecenie. Może nie działać w niektórych regionach. (Nie byłem w stanie tego użyć!). Ale AT + CIPGSMLOC zawsze działa.

MDR
źródło
Dostaję +CIPGSMLOC: 302<\r><\n> odpowiedź
Ali80,
1
@ Ali80 Naładuj środki na karcie SIM. Może się to zdarzyć, jeśli Twoja karta SIM ma kredyt, ale nie była obciążana przez długi czas. Możesz także przetestować inną kartą SIM.
MDR,
tak, mogę potwierdzić, że ta metoda działa, moja karta SIM miała kredyt, ale miał ograniczony dostęp do abonamentu.
Ali80,
1

NITZ, jak wskazał RedGrittyBrick, jest odpowiedzią. Jest to jednak wiadomość wysyłana tylko przez sieć, zwykle po dołączeniu do sieci. Niektórzy przewoźnicy to wysyłają, inni nie. Nie ma standardowego sposobu, aby o to poprosić.

pjc50
źródło
1

Oto sekwencja poleceń AT, aby uzyskać czas w sieci komórkowej. Działa w moim 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
Myanju
źródło
1

najpierw wyślij te dwa polecenia
AT + CLTS = 1; & W

AT + CFUN = 1,1 i niż AT + CLTS? sprawdzić, czy otrzymałeś tę odpowiedź + clts: 1,
a następnie wysłać to polecenie AT + CCLK?

souhard bekal
źródło
Witamy w EE.SE. Użyj dwóch znaczników wstecznych (``) wokół fragmentów kodu w swoich postach lub użyj {}przycisku na pasku narzędzi edytora do bloków kodu, jak w innych odpowiedziach. To da szare tło i czcionkę o stałej szerokości, dzięki czemu łatwiej będzie zobaczyć, gdzie zaczyna się i kończy kod.
Tranzystor
0

Z powodzeniem korzystałem z NITZ podczas inicjalizacji i CCLK, gdy chcę odczytać wewnętrzny RTC. JEDNAK może zająć minutę lub dwie, zanim modem RTC zostanie ustawiony z sieci. Warto zachować flagę, aby wskazać, czy czas rzeczywiście jest ważny.

MC
źródło
0

Opracowałem oprogramowanie układowe dla U-Blox LTE. Czy użyłem AT + CCLK? aby uzyskać bieżący czas lokalny z modemu.

Daje czas w następującym formacie. Nie dlatego, że jest to polecenie zsynchronizowane.

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

Dlatego przed rejestracją wysłano następujące polecenie AT, aby zsynchronizować czas z siecią

AT+CTZU=1\r\n

Więc moja sekwencja poleceń to:

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)

Dodatkowa logika zapewniająca właściwy czas:

Sprawdza datę w stosunku do 70/01/01 lub 00/01/01 (w naszym przypadku są to czasy, które otrzymujemy, jeśli modem ma nieprawidłowy czas). A jeśli jest nieważny, próbuje okresowo co 1 minutę, aż nadejdzie właściwy czas. Po kilku próbach przestaje wysyłać CCLK? i polegać na innych źródłach czasu.

Uwaga: NITZ jest jeszcze obsługiwany w ograniczonym zestawie krajów ( https://en.wikipedia.org/wiki/NITZ )

Dlatego najlepiej jest mieć zapasowy sposób aktualizacji czasu, jeśli nie jest obsługiwany w tym kraju.

W moim przypadku mamy moduł GPS, więc otrzymuję aktualizacje czasu za pośrednictwem danych GNSS.

Dodatkowo, co nie jest tu istotne, ale uważane za przydatne do synchronizacji czasu.

Uruchamiamy chroniczny demon, aby zaktualizować czas systemowy (włączone polecenia ręczne). Tak więc obie aktualizacje czasu są pobierane, a chroniczny decyduje o właściwej godzinie i aktualizuje czas systemowy.

SajithP
źródło