Pythonを使用して3GモデムとSMSを操作する

Hi%username%!



最近、次のタスクに直面する必要がありました。WindowsXPがインストールされた古いデスクトップがあります。 所定の時間間隔で、このデスクトップ上のプログラムが目的のサーバーにGET要求を送信し、応答を解析し、結果に応じてSMSメッセージを目的の番号に送信する必要があります。 追加のデバイスのうち、Billineの3GモデムE160gしかなく、有線ネットワークまたはWI-FIを介してインターネットに接続することは物理的に不可能でした。



タスクは、このモデムとPython言語のみを使用して完了しました。



当初、SMSを送信するために、インターネット接続デバイスおよびATモデムと同時にモデムを使用することが決定されました。 しかし、予想されるように、彼は一度に2つのモードで作業することはできませんでした。ネットワークに接続すると、SMSを送信できなくなりました。



2つの3Gモデム(1つはインターネット用、もう1つはSMS用)を接続する試みは失敗しました。デバイスは互いに完全に別々に動作しましたが、同時接続ではシステムは1つしか見えませんでした。



1台のモデムを携帯電話に交換したことはプラスの効果がありましたが、それは私には向いていませんでした。安価ではありますが、電話に余分なお金をかけたくはありませんでした。



その結果、1つの3Gモデムを使用して、プログラムで必要なモードに切り替えるというアイデアがありました。まず、インターネット経由でインターネットに接続し、データをアップロードしてから、切断し、データを処理し、ATコマンドを送信してSMSを送信します。 そして、これはすべてPythonで行われます。



第一に、2番目のデバイスは必要ありません。第二に、ネットワークへの接続がまれで短期的であるため、高価な3Gトラフィックを節約できます。



SMSを送信するために、Habrトピックのすばらしいスクリプトを使用しました。 しかし、インターネット接続の制御では、いじくり回さなければなりませんでした。 もちろん、win32用のPython拡張機能をインストールし、win-API関数から管理することができます。 しかし、通常のRASDIALユーティリティを使用してネットワーク接続を操作する方がはるかに簡単であることがわかりました。



モデム用のプログラムのインストール中に、このモデムを介してシステムに接続が作成されます。 作成されていないか、削除された場合は、手動で作成できます:「ネットワーク接続」->「追加」。 プロパティでモデムを指定し、ユーザー/パスワードフィールドを空のままにして(ユーザーはSIMカード番号で識別されるため)、電話を入力し(私の場合は* 99#)、「ユーザー名、パスワードを要求する」チェックボックスを削除します。 接続が作成されました。



次に、この接続を管理できる小さなrasdial.pyモジュールをプログラムします。

  1. import os def connect(connection): command = r 'RASDIAL %s' % connection return os .system(command) def disconnect(connection): command = r 'RASDIAL %s /DISCONNECT' % connection return os .system(command)



  2. import os def connect(connection): command = r 'RASDIAL %s' % connection return os .system(command) def disconnect(connection): command = r 'RASDIAL %s /DISCONNECT' % connection return os .system(command)



  3. import os def connect(connection): command = r 'RASDIAL %s' % connection return os .system(command) def disconnect(connection): command = r 'RASDIAL %s /DISCONNECT' % connection return os .system(command)



  4. import os def connect(connection): command = r 'RASDIAL %s' % connection return os .system(command) def disconnect(connection): command = r 'RASDIAL %s /DISCONNECT' % connection return os .system(command)



  5. import os def connect(connection): command = r 'RASDIAL %s' % connection return os .system(command) def disconnect(connection): command = r 'RASDIAL %s /DISCONNECT' % connection return os .system(command)



  6. import os def connect(connection): command = r 'RASDIAL %s' % connection return os .system(command) def disconnect(connection): command = r 'RASDIAL %s /DISCONNECT' % connection return os .system(command)



  7. import os def connect(connection): command = r 'RASDIAL %s' % connection return os .system(command) def disconnect(connection): command = r 'RASDIAL %s /DISCONNECT' % connection return os .system(command)





モジュールの2つの関数は、単一の引数でインターネットを接続/切断します:接続の名前。 たとえば、「e160g」と呼んだ場合、



  1. 輸入ラディアル
  2. コード = rasdial.connect( 'e160g'


接続を試み、戻りステータスを返します。 0の場合、接続は成功しています。



その結果、メインプログラムは次のようになりました。



  1. インポート送信者
  2. 輸入ラディアル
  3. httplibを インポート する
  4. コード = rasdial.connect(conn_name)
  5. コード == 0の 場合
  6. conn = httplib .HTTPConnection(some_host)
  7. conn.request( 'GET' 、クエリ)
  8. 応答= conn.getresponse()
  9. rasdial.disconnect(conn_name)
  10. #解析に答える
  11. s = sender.Sender(ポート)
  12. #SMSを送信
  13. s.send( * args)


1時間間隔で王冠のスクリプトを開始しました。 その結果、1つのモデムで管理し、トラフィックを大幅に節約しました。

ご清聴ありがとうございました!



All Articles