時間を取得するには、どのATコマンドをモデムに送信すればよいですか?


11

SIM800Eを使用しています。時間を得るためにモデムに送信するATコマンドを知りたいですか?このモデムにはRTCがあります。ただし、セルタワーを介して自動設定する必要があります。タワーは、ATコマンドを使用して要求されると、モデムに時刻を送信できます。多くの電話で、ハンドオフ中に時間が更新されることを見てきました。

マニュアルには、この情報を持っていません。


1
そのハードウェア設計ドキュメントによると、別のドキュメントである「SIM800E ATコマンドマニュアル」を入手する必要があります。
RedGrittyBrick

次に、実際には、マルチメディア以外の携帯電話で場所を簡単に更新しますか?
gpuguy

3
NITZはGSM標準のオプション部分であり、すべての通信事業者によってサポートされているわけではなく、数分以内に正確になるとは限りません。
RedGrittyBrick

3
これは、M2M通信用の組み込みGSMモジュールの使用に関するものであるため、これは話題になっていると思います。なぜこの投稿はトピックから外れており、次の4つの投稿が許可されました。例1 2 3 4
tcrosley

回答:


7

次のコマンドを使用しました。

AT+CCLK?

次のような日付と時刻を返します。

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

Enfora、Telit、およびSierraの3つの異なるセルモジュールを使用した製品で成功しました。ATの後に+文字を使用するという事実は、それが一般的な(独自のコマンドではなく)コマンドであり、すべてではないにしてもほとんどのセルモジュールで使用できることを意味します。(独自のコマンドは、AT $、AT%、AT!などのように、ATの後にベンダー固有の文字を使用します。)

コメントで述べたように、このコマンドを使用して時間を取得できない場合(たとえば、すべて0を返す場合)、別の方法は、ネットワークに接続し、HTTPコマンドを使用してサーバーの時間を取得することです。

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

somehostは独自のサーバーまたはGoogle.comなどです。これは、index.htmlがサイトのメインページであることも想定しています(Googleの場合ではありません)。

次のようなヘッダーを返します。

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

私の知る限り、すべてのサーバーはヘッダーでGMT時間を返す必要があります。


1
いくつかのもの、私は読んでは + CCLKによって返される値は、オンボード・クロック(RTC)からではなく、GSMネットワーク(タワー)からのものであってもよい示唆しました。
RedGrittyBrick

1
私はそのように説明されたコマンドも読みましたが、過去5年ほどにわたって3つの異なるセルモジュールを使用していくつかの異なる製品で使用しており、米国およびヨーロッパとアジアのほぼどこでも機能していました。いくつかのキャリアがありました。たとえば、ドイツの1つは動作しませんでした(すべて0を返しました)。私は彼らに連絡し、彼らはネットワーク上の時間の更新をサポートしていないと言われました。そこで、HTTP 1.1リクエストを実行し、サーバーの時間を奪うコードを書きました。
tcrosley

1
私は、404の傾向が少なく、HTTP 1.0がHTTPの(デバイスごとの)無知をよりよく表してHEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nいると感じて/いるため、HTTPリクエストをより適切に作成できると思います。その上、セミコロンはタイプミスのように見えます。それ以外は、日付は仕様によりGMT / UTCです(も参照)。

1
この回答は情報提供ですが、オンボードRTCとネットワーク時間の問題に関する更新に値します。

5

まず、NITZは多くのネットワークで十分にサポートされていません(コスト削減と言えますか)。特に遠く離れた場所では、ネットワークの10分の1がそれを使用するため、私はまったく依存しません。

次に、+ CCLKコマンドはモデムの内部RTC用です。一部のモデムには、ネットワークからこのクロックを更新する機能があります。これに頼るのは危険です。

上記のHTTPリクエストは不完全です。つまり機能しません。私はこれを行う方法を知っていたので、動作すると元に戻ります。

ATの後に+文字を使用するという事実は、それが一般的な(独自のコマンドではなく)コマンドであり、すべてではないにしてもほとんどのセルモジュールで使用できることを意味します。(独自のコマンドは、AT $、AT%、AT!などのように、ATの後にベンダー固有の文字を使用します。)

これは完全に真実ではありません。AT +規則に従う独自のモデムコマンドがあります。たとえば、AT + WOPENは独自のSierraコマンドです。

モデムに関係なく同じコマンドの特定のセットがあります。これらは3GPP文書で定義されています。所有権のあるコマンドは通常、ベンダーのユーザーマニュアルで定義されており、所有権があることを明確に示しています。


4

AT + CLTS = 1(ローカルタイムスタンプを取得)AT&W(構成を保存)

モデムをオフにしてモデムをオンにします(ネットワークから現地時間を取得するには再起動します)

次回モデムが起動するとき、ネットワークで現地時間を取得でき、送信することで読むことができるはずです。

AT + CCLK?

これは、SIM800 GSMモデムを使用して私のために働いた詳細についてはATコマンドの説明を読んで


@ s0nic2kの回答が確認されましたが、これは期待どおりには機能しません。
Ali80

3

パテ:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

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

これは自動的に行われないため、結果を解析してclkに配置する必要があります。(少なくとも私のCinterionでは)


6
これが何をするのか、なぜそれが質問の解決策であるのかを英語で説明できれば助かります。
デビッド

@Davidしばらくお待ちください。チャットでの翻訳に取り組んでいます。
ニックアレキセフ

2
私のために働いたSIM800Hのバリアント:AT + CTZU = 1の代わりにAT + CLTS = 1を使用します(CTZUはサポートされていないため)。その後、登録時に* PSUTTZ:2017,1,30,20,17,28、 "-20"、0のような未承諾メッセージが表示されます
Matt Thomas

2

AT + CIPGSMLOCコマンドを使用します。SIMCOMモジュールでうまく機能します。

このコマンドを使用するには、GPRSサービスが接続されている必要があります。したがって、最初に適切なコマンドシーケンスを使用してGPRSサービスを接続し、このコマンドを使用してGSMネットワークから日付と時刻を取得します。

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

次に、GSM Locationコマンドを使用します。

AT+CIPGSMLOC=1,1

このコマンドは、ネットワークから情報を取得するためにかなりの時間(数秒)を必要とするため、コマンド実行機能に適切なタイムアウトを与えます。

このコマンドは、モジュールが接続されているBTSロケーションも返します。そのため、GSMモジュールのほぼ正確な位置も取得できます。

詳細については、このマニュアルを参照してください:(SIM800でも同じように機能します)

SIM900_GSM Location AT Command Manual_V1.00

また、AT + CLBSコマンドはこのコマンドと同じではないことに注意してください。一部の地域では機能しない場合があります。(私はそれを使用することができませんでした!)。ただし、AT + CIPGSMLOCは常に機能します。


+CIPGSMLOC: 302<\r><\n> は応答します
Ali80

1
@ Ali80 simcardクレジットをチャージします。これは、SIMカードにクレジットはあるが、長期間請求されていない場合に発生する可能性があります。別のsimcardでもテストできます。
MDR

ええ、この方法が機能することを確認できます。私のSIMカードにはクレジットはありますが、データプランにアクセスが制限されています。
Ali80

1

RedGrittyBrickが指摘したNITZが答えです。ただし、これは通常、ネットワークへの参加時に、ネットワークによってのみ送信されるメッセージです。一部のキャリアはそれを送信し、一部は送信しません。それを要求する標準的な方法はありません。


1

セルラーネットワークの時刻を取得するためのATコマンドシーケンスを次に示します。これは、UBLOX LEON G-200 GSMモジュールで機能しました。

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

最初にこの2つのコマンド
AT + CLTS = 1;&Wを送信します

AT + CFUN = 1,1およびAT + CLTSよりも?この返信+ clts:1が返されるかどうかを確認し
、このコマンドAT + CCLKを送信しますか?


EE.SEへようこそ。投稿内のコードスニペットの周りに2つのバックティック( ``)を使用するか{}、他の回答のようにコードのブロックにエディターツールバーのボタンを使用します。これにより、灰色の背景と固定幅のフォントが得られ、コードの開始位置と終了位置を簡単に確認できます。
トランジスタ

0

初期化中はNITZを、内部RTCを読み取りたい場合はCCLKを使用しました。ただし、モデムRTCがネットワークから設定されるまでに1〜2分かかる場合があります。時間が有効かどうかを示すフラグを保持する価値があります。


0

U-Blox LTE用のファームウェアを開発しました。そこでAT + CCLKを使用しましたか?モデムから現在のローカル時間を取得します。

次の形式で時間を与えます。同期コマンドではない。

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

そのため、時間をネットワークと同期させるために、登録前に次のATコマンドが送信されました

AT+CTZU=1\r\n

したがって、私のコマンドシーケンスは次のとおりです。

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)

正しい時間を確保するための追加ロジック:

70/01/01または00/01/01に対して日付をチェックします(この場合、これらはモデムに無効な時刻がある場合に取得される時刻です)。また、無効な場合は、正しい時間になるまで1分ごとに定期的に試行します。数回の再試行後、CCLKの送信が停止しますか?他の時間ソースに依存しています。

注:NITZは一部の国でのみサポートされています(https://en.wikipedia.org/wiki/NITZ

そのため、その国でサポートされていない場合は、時間を更新するバックアップ方法を用意することをお勧めします。

私の場合、GPSモジュールがあるため、GNSSデータを使用して時間の更新を取得します。

さらに、これはここでは関係ありませんが、時間の同期に役立つと考えられます。

chrony deamonを実行して、システム時刻を更新します(手動コマンドが有効になっています)。したがって、両方の時間更新がフェッチされ、chronyが正しい時間を決定し、システム時間を更新します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.