LinuxでのUSSDリクエストの実行

LinuxKyivstarモデムアカウントをチェックするトピックの著者に感謝します。これは、モデムの原理とLinuxでモデムを操作する方法を理解するのに役立ちました。 信号レベルの表示、バランスの確認、3zhモデムを使用したアカウントの補充の問題を解決する必要がありました。 しかし、私はそのような些細なことのためにPCPを家庭用マシンに置きたくなかったので、私はPythonでスクリプトを自分で書き直すことにしました。

このスクリプトは、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 sysargv [ 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 sysargv [ 1 ] == 'popolnit'
print >> f、 "AT + CUSD = 1、* 123 *" + sysargv [ 2 ] + "#、15 \ r \ n "
一方、データ[5 ] = "+ CUSD"
データ= f。 readline
データ=データ[ 10-6 ]
binasciiを 印刷しますunhexlify データ
elif sysargv [ 1 ] == 'data-status'
print >> f、 "AT + CUSD = 1、* 121#、15 \ r \ n "
一方、データ[5 ] = "+ CUSD"
データ= f。 readline
データ=データ[ 10-6 ]
binasciiを 印刷しますunhexlify データ
elif sysargv [ 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パッケージが必要です(そうでない場合は起動しません)。

Source: https://habr.com/ru/post/J98846/


All Articles