このスクリプトは、PDUエンコードなしでUSSDをサポートするすべてのモデム/電話で動作します。 コマンドのPDUエンコードを必要とするモデムの場合、上記のトピックのphpスクリプトと同様のラッパー関数を作成する必要があります。 残念ながら、私はそのようなモデムを持っていないし、それを確認することができませんでした-したがって、私は書きませんでした。
3G ZTE MF100モデム(mf620、mf622、mf626、mf628で動作するはずです)とKyivstarのインターネット3G料金を確認しました。
ussd.pyスクリプト自体
#!/ usr / bin / python
インポート binascii
インポートシステム
f = open ( "/ dev / ttyUSB2" 、 "r +" )
データ= ''
エラー= "使用法:python ussd.pyアクション(コード) \ r \ nアクション:balans、popolnit、data-status、3g-data-status、signal"
len ( sys。argv ) < 2の場合 :
印刷エラー
sys 終了 ( )
sysの 場合 argv [ 1 ] == 'balans' :
print >> f、 "AT + CUSD = 1、* 111#、15 \ r \ n "
一方、データ[ : 5 ] ! = "+ CUSD" :
データ= f。 readline ( )
データ=データ[ 10 : -6 ]
binasciiを 印刷します 。 unhexlify (データ)
elif sys 。 argv [ 1 ] == 'signal' :
印刷>> f、 "AT + CSQ \ r \ n "
一方、データ[ : 5 ] ! = "+ CSQ:" :
データ= f。 readline ( )
data = data [ 6 : -5 ]
sig_str = -113 + int ( data ) * 2
sig_per = int ( data ) * 100/31
Unicode ( sig_str ) + "dBm /" + Unicode ( sig_per ) + "%"を出力します
elif sys 。 argv [ 1 ] == 'popolnit' :
print >> f、 "AT + CUSD = 1、* 123 *" + sys 。 argv [ 2 ] + "#、15 \ r \ n "
一方、データ[ : 5 ] ! = "+ CUSD" :
データ= f。 readline ( )
データ=データ[ 10 : -6 ]
binasciiを 印刷します 。 unhexlify (データ)
elif sys 。 argv [ 1 ] == 'data-status' :
print >> f、 "AT + CUSD = 1、* 121#、15 \ r \ n "
一方、データ[ : 5 ] ! = "+ CUSD" :
データ= f。 readline ( )
データ=データ[ 10 : -6 ]
binasciiを 印刷します 。 unhexlify (データ)
elif sys 。 argv [ 1 ] == '3g-data-status' :
印刷>> f、 "AT + CUSD = 1、* 122#、15 \ r \ n "
一方、データ[ : 5 ] ! = "+ CUSD" :
データ= f。 readline ( )
データ=データ[ 10 : -6 ]
binasciiを 印刷します 。 unhexlify (データ)
その他 :
印刷エラー
f。 閉じる
スクリプトを実行可能にします。
chmod + x ussd.py
使用法:
./ussd.pyアクション(コード)
利用可能なアクション:balans、popolnit、data-status、3g-data-status、signal
popolnitアクションを選択する場合、再充電コードを2番目のパラメーターとしてスクリプトに渡す必要があります。
例:
./ussd.py popolnit 1234567890
このスクリプトはキエフスター用に調整されていますが、オペレーターが使用する短いリクエスト番号を置き換えるのに苦労する人はいないと思います。
もう1つの重要なポイントは、Linuxでのほとんどの3zhモデムが3つのデバイスとして定義されていることです:/ dev / ttyUSB0、/ dev / ttyUSB1、/ dev / ttyUSB2。 1つはデータ転送に使用され、もう1つは一部のモデムコマンドサービスに使用されるようです。3つ目は管理用の標準COMインターフェイスを提供します。 スクリプトでは、インターフェイスデバイスCOMを指定する必要があります。一部のモデムでは/ dev / ttyUSB0で、あまり頻繁ではありません/ dev / ttyUSB2です。
モデムの機能とUSSDオペレーターのリクエストとATコマンドのレートに応じて、SMSメッセージの送信、モードの切り替え(2G / 3G)、仮想SD-ROMの無効化などができます。 残念ながら、各モデルでは、コマンドを手動で選択する必要があります...
残念ながら、私は実際にpythonを知りません。スクリプトが最も最適な方法とはかけ離れて書かれている可能性が高いからです。
UPDもう 1つお話しするのを忘れましたが、先日、モデム用のLinuxソフトウェアを提供するopsosを見つけました。 モデムは当然、opsosaの下でブランド化された標準的な中国語です。 ここでは 、たとえば、ZTE MF100 / MF62Xがはっきりと見えますが、残念ながら、ソフトウェアをモデムで動作させることができませんでした。 たぶん、より経験豊富な人がそれを再購入できるでしょうか? それを使用するには、i386アーキテクチャ用のlibqt3-mtパッケージが必要です(そうでない場合は起動しません)。