SIM800Eを使用しています。時間を得るためにモデムに送信するATコマンドを知りたいですか?このモデムにはRTCがあります。ただし、セルタワーを介して自動設定する必要があります。タワーは、ATコマンドを使用して要求されると、モデムに時刻を送信できます。多くの電話で、ハンドオフ中に時間が更新されることを見てきました。
マニュアルには、この情報を持っていません。
SIM800Eを使用しています。時間を得るためにモデムに送信するATコマンドを知りたいですか?このモデムにはRTCがあります。ただし、セルタワーを介して自動設定する必要があります。タワーは、ATコマンドを使用して要求されると、モデムに時刻を送信できます。多くの電話で、ハンドオフ中に時間が更新されることを見てきました。
マニュアルには、この情報を持っていません。
回答:
次のコマンドを使用しました。
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時間を返す必要があります。
まず、NITZは多くのネットワークで十分にサポートされていません(コスト削減と言えますか)。特に遠く離れた場所では、ネットワークの10分の1がそれを使用するため、私はまったく依存しません。
次に、+ CCLKコマンドはモデムの内部RTC用です。一部のモデムには、ネットワークからこのクロックを更新する機能があります。これに頼るのは危険です。
上記のHTTPリクエストは不完全です。つまり機能しません。私はこれを行う方法を知っていたので、動作すると元に戻ります。
ATの後に+文字を使用するという事実は、それが一般的な(独自のコマンドではなく)コマンドであり、すべてではないにしてもほとんどのセルモジュールで使用できることを意味します。(独自のコマンドは、AT $、AT%、AT!などのように、ATの後にベンダー固有の文字を使用します。)
これは完全に真実ではありません。AT +規則に従う独自のモデムコマンドがあります。たとえば、AT + WOPENは独自のSierraコマンドです。
モデムに関係なく同じコマンドの特定のセットがあります。これらは3GPP文書で定義されています。所有権のあるコマンドは通常、ベンダーのユーザーマニュアルで定義されており、所有権があることを明確に示しています。
AT + CLTS = 1(ローカルタイムスタンプを取得)AT&W(構成を保存)
モデムをオフにしてモデムをオンにします(ネットワークから現地時間を取得するには再起動します)
次回モデムが起動するとき、ネットワークで現地時間を取得でき、送信することで読むことができるはずです。
AT + CCLK?
これは、SIM800 GSMモデムを使用して私のために働いた詳細についてはATコマンドの説明を読んで
パテ:
AT+COPS=2
OK
AT+CTZU=1
OK
AT+COPS=0
OK
+CTZU: "15/05/06,17:25:42",-12,0
これは自動的に行われないため、結果を解析してclkに配置する必要があります。(少なくとも私のCinterionでは)
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>
は応答します
セルラーネットワークの時刻を取得するための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
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が正しい時間を決定し、システム時間を更新します。