Linux и серверы

Выполнение USSD запросов под Linux / Телекомы / Хабрахабр

Материал перенесён из старой базы знаний ATC-IP и оформлен в едином стиле нового сайта.

войти
зарегистрироваться
поиск по сайту
Посты
Q&A
Блоги
Люди
Компании
Телекомы
индекс
164,53
Захабренные
Новые
Отхабренные
Выполнение USSD запросов под Linux
Спасибо автору топика
Проверка счета Киевстар модема в Linux
который помог мне понять принцип работы модемов и способ работы с ними в линуксе. Мне как раз нужно было решить задачу отображения уровня сигнала, проверки баланса, пополнения счета с использованием 3ж модема. Но так как ставить на домашние машины пхп ради такой мелочи мне не хотелось, решил переписать скрипт под себя на Python, который есть в любом десктоп-линуксе из коробки.
Работать данный скрипт будет на любых модемах/телефонах которые поддерживают USSD без PDU кодирования. Для модемов требующих PDU-кодировку команд нужно написать функции-обертки аналогично php-скрипту из указаного выше топика. У меня к сожалению нету такого модема и проверить я бы не смог — потому писать не стал.
Проверена работа на 3G модеме ZTE MF100(должно работать с mf620, mf622, mf626, mf628) и тарифе Интернет 3G от Киевстара.
Сам скрипт ussd.py
#!/usr/bin/python
import
binascii
import
sys
f =
open
"/dev/ttyUSB2"
"r+"
data=
''
error=
"Usage: python ussd.py action (code)
\r
\n
Actions: balans, popolnit, data-status, 3g-data-status, signal"
if
len
sys
argv
print
error
sys
exit
if
sys
argv
==
'balans'
print
>>
f,
"AT+CUSD=1,*111#,15
\r
\n
while
data
"+CUSD"
data=f.
readline
data = data
10
:-
print
binascii
unhexlify
data
elif
sys
argv
==
'signal'
print
>>
f,
"AT+CSQ
\r
\n
while
data
"+CSQ:"
data=f.
readline
data = data
:-
sig_str = -
113
int
data
sig_per =
int
data
100
31
print
unicode
sig_str
"dBm / "
unicode
sig_per
"%"
elif
sys
argv
==
'popolnit'
print
>>
f,
"AT+CUSD=1,*123*"
sys
argv
"#,15
\r
\n
while
data
"+CUSD"
data=f.
Позвонить +7 (343) 382-33-16