GSM モデムを使用していますが、信号が弱いためにしばらくすると切断されます。切断を検出して再接続を再確立できる AT コマンドがあるのだろうかと思っています。
コード (できれば python) で、切断を検出して再接続を再確立する方法はありますか?
ガット
GSM モデムを使用していますが、信号が弱いためにしばらくすると切断されます。切断を検出して再接続を再確立できる AT コマンドがあるのだろうかと思っています。
コード (できれば python) で、切断を検出して再接続を再確立する方法はありますか?
ガット
回線交換 (CS) またはパケット交換 (PS) の接続の種類に応じて、監視は少し異なります。切断を検出するには、UR (未承諾の結果) コードを有効にAT+CPSB=1して、PDP コンテキスト アクティビティ (別名、パケット交換接続) を監視します。回線交換通話の場合は、 で+CIEV:UR コードを有効にして監視できますAT+CMER=3,0,0,2。
接続を再確立するには、接続を再度セットアップする必要があります。CS の場合、ダイヤルした電話番号を知る必要があります。または、ATD の特殊な形式ATDL[1] を使用して、最後にダイヤルした番号をダイヤルすることもできます。コールが ATD (つまり、"ATD*99*....") で開始された場合、PS に ATDL を使用することもできますが、これは非常に一般的ですが、たとえば AT+CGDATA で開始した場合は方法がないと思います.
ただし、ATD に関連する上記のどれも重要ではありません。それはあなたが望むものではないからです。CS の場合、Python スクリプトからの呼び出しを設定できますが、それではどうでしょうか。CONNECTすべてのデータ トラフィックを受信した後、Python スクリプトが使用しているシリアル接続に到達します。また、PS の場合、電話が接続確立の一部として PC から PPP トラフィックを受信しない限り、接続は正常に終了しません。あなたのpythonスクリプトがそれを提供するつもりですか?
本当に必要なのは、これが標準のオペレーティング システムのダイヤルアップ ネットワークであろうと、それを起動する特別なアプリケーションであろうと、PC が再接続を試みるようにすることです。そのため、Python スクリプトを使用してモデムを監視し、PC 側で適切なアクションを実行して接続を再確立します。
[1] ATDL への補足: 最後の音声通話を繰り返したい場合でも、セミコロンで終了する必要があることに注意してください。つまりATDL;、そうしないとデータ通話を開始します。
これが私がTelitデバイスでそれを行う方法です:
私は一方的AT+CGREG=1なメッセージを購読するために使用します。ドキュメントからの抜粋:
+CGREG - GPRS Network Registration Status
AT+CGREG=[<n>]
Set command controls the presentation of an unsolicited result code
+CGREG: (see format below).
Parameter:
<n> - result code presentation mode
0 - disable network registration unsolicited result code
1 - enable network registration unsolicited result code; if there is a change in the terminal GPRS network registration status, it is issued the unsolicited result code:
+CGREG: <stat>
そして、私はモデムのシリアルラインで+CGREGメッセージを待ちます。何かが来たら、statが1(ホームネットワークに接続されている)か5(ローミングで接続されている)かを確認します。
注:AT +CGREGを発行すると異なる応答+CGREGが発生しますか?分離するのは難しくありません。
AT+CSQ を使用して定期的に信号強度を確認してみてください。信号が所定のしきい値を下回った場合は、切断されていると見なし、新しい接続を強制します。
非常に優れた pyserial http://pyserial.sourceforge.net/ Python ライブラリを試して、AT コマンドをモデムに送信できます。
役立つことを願っています