Баланс GSM USB-модема с использованием USSD
Существуют ли какие-либо инструменты или команды, которые можно использовать для отправки USSD-кодов для проверки баланса и баланса данных SIM-карты GSM в моем USB-модеме (мобильный широкополосный ключ)?
8 ответов
Вот некоторые приложения с поддержкой проверки баланса USSD:
Менеджер предоплаты
Prepaid Manager - это апплет для рабочего стола GNOME, который позволяет проверять и пополнять баланс мобильных предоплаченных SIM-карт GSM. Это простое и минималистичное приложение с проверкой баланса USSD и пополнением баланса. Но, с другой стороны, это устаревшее приложение, которое долгое время не получало никаких обновлений. А если ваш провайдер не поддерживается, вам придется настроить его вручную, как описано на его домашней странице. Для установки нажмите здесь:
Или выполните следующую команду:
sudo apt install prepaid-manager-applet
Графический менеджер модема
Modem Manager GUI представляет собой комплексное решение для управления и мониторинга модемов на основе мобильной сети. Он содержит довольно много функций, и поддержка USSD - лишь одна из них. Для получения полного списка функций, посетите их официальную домашнюю страницу. Для установки нажмите здесь:
Или выполните следующую команду:
sudo apt install modem-manager-gui
V Mobile Broadband
V Mobile Broadband - это оригинальное программное обеспечение Vodafone Mobile Connect для Linux, переписанное для совместимости с Network Manager командой разработчиков Vodafone с открытым исходным кодом Betavine Connection Manager. К сожалению, в данный момент он не очень активно поддерживается и недоступен в репозиториях Ubuntu. Тем не менее, вы можете попытать счастья, создавая проект из исходного кода. Проверьте их страницу GitHub.
Предупреждение: v-mobile-broadband
зависит от wader
, который заменяет Ubuntu по умолчанию modemmanager
, Итак, если вы столкнулись с проблемами с новой настройкой и решили удалить v-mobile-broadband
не забудьте переустановить modemmanager
пакет.
источники
Вы можете использовать утилиту командной строки gammu
для этого. Если USSD-код для получения вашего баланса (скажем) *901#, вы должны выполнить:
gammu getussd "*901#"
Инструкции по установке и настройке и более подробную информацию смотрите здесь.
Вы можете использовать mmcli
Клиент командной строки ModemManager по умолчанию в Ubuntu отправляет USSD-код и получает ответ:
Начните с перечисления ваших модемов:
mmcli -L
, Это покажет путь модемного устройства, как/org/freedesktop/ModemManager1/Modem/0
, Число в конце - это индекс модема, запомните это.Включите модем (при условии, что индекс вашего модема равен 0):
mmcli -m 0 -e
Отправьте USSD-запрос и отобразите ответ. Предполагая, что USSD-код вашего сетевого оператора для получения баланса равен *901#, команда будет такой:
mmcli -m 0 --3gpp-ussd-initiate="*901#"
В случае, если для запроса баланса необходимо использовать USSD-меню: это также возможно с mmcli
смотри этот ответ.
Вы можете сделать их с пакетом modem-manager-gui
, Но это доступно только для 13.10. В других версиях вы должны управлять ими в терминале с пакетом modemmanager
,
Если вы находитесь в Ubuntu 13.10:
sudo apt-get install modem-manager-gui modemmanager
В других версиях Ubuntu вы можете сделать это с помощью приложения prepaid-manager-applet
sudo apt-get install prepaid-manager-applet
Вы можете напрямую использовать AT-команды для запроса баланса через USSD. Для этого используйте любую программу с последовательным терминалом, которая позволяет напрямую связываться с модемом (putty
, minicom
так далее.).
Я выбрал atinout
потому что он хорошо интегрирован с командной строкой. Сначала вы устанавливаете его:
sudo apt-get install ruby-ronn;
git clone git://git.code.sf.net/p/atinout/code atinout;
cd atinout;
make;
sudo checkinstall make install;
Затем, если вы используете ModemManager (по умолчанию в Ubuntu Linux), вам, возможно, придется сначала отключить его, чтобы разрешить atinout
чтобы получить доступ к вашему модему:
sudo stop modemmanager;
Теперь, чтобы отправить USSD-код для запроса баланса в сеть (скажем, *901#) и отобразить результат, вы должны использовать эту команду:
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"*901#\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT");
Это предполагает, что ваш модем на /dev/ttyUSB1
, AT
команда во втором atinout
Команда просто чтобы получить нежелательный ответ USSD, отображаемый как побочный эффект, который должен был прийти после sleep
,
В случае, если для запроса баланса необходимо использовать USSD-меню: это также возможно с atinout
смотри этот ответ.
Вы можете использовать инструмент командной строки Linux gsm-ussd
отправлять USSD-коды, получать ответы и даже перемещаться по USSD-меню (хотя это было нестабильно / непригодно для меня).
Подробные инструкции по установке и настройке см. Здесь. Пакет Debian версии 0.4, предлагаемый для установки, является последней версией для разработчиков.
Если USSD-код для получения вашего баланса (скажем) *901# и ваш модем /dev/ttyUSB1
Вы должны выполнить это, чтобы отправить простой USSD-код и отобразить ответ сети (не вызывая меню):
gsm-ussd -m /dev/ttyUSB1 "*901#"
Для меня оба решения на основе ModemManager и gammu
не работает правильно с многострочным USSD-ответом; например, мой оператор имеет USSD команду *104#
на что он отвечает что-то вроде:
You have:
2.07 GB of traffic, valid until N
47 minutes
Обидно видеть только первую бесполезную строку: You have:
,
Наконец я нашел обходной путь с picocom
и ручная команда AT. Поэтому каждый раз, когда я хочу проверить свой баланс, я должен сделать следующее:
Сначала остановите диспетчер модемов:
$ sudo stop modemmanager
Теперь вам нужно знать ваш порт модема; в моем случае это /dev/ttyACM0
,
Если вы не знаете свой порт, попробуйте это:
for n in `ls /sys/class/*/*{ACM,wdm}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done
И искать запись с Mobile Broadband Modem
, Например, мой вывод выглядит следующим образом:
ttyACM0 : F5521gw Mobile Broadband Modem
ttyACM1 : F5521gw Mobile Broadband Data Modem
ttyACM2 : F5521gw Mobile Broadband GPS Port
cdc-wdm0 : F5521gw Mobile Broadband Device Management
cdc-wdm1 : F5521gw Mobile Broadband USIM Port
Для получения дополнительной информации о получении правильного порта, перейдите по этой ссылке: https://gist.github.com/heyalexej/cc6c97b1ea42736b3ff7
Затем используйте Picocom для подключения к вашему порту:
$ sudo picocom /dev/ttyACM0
Вы должны увидеть что-то вроде этого:
picocom v1.7
port is : /dev/ttyACM0
flowcontrol : none
baudrate is : 9600
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is :
emap is : crcrlf,delbs,
Terminal ready
*EMRDY: 1
(если вы этого не видите *EMRDY: 1
, это, вероятно, означает, что вы не остановили Modem Manager, см. выше)
Затем введите:
AT+CUSD=1,"*104#"
Через несколько секунд вы получите ответ, который может быть многострочным:
+CUSD: 0,"You have:
2.07 GB of traffic, valid until N
47 minutes
",15
OK
Чтобы выйти из Picocom, используйте Ctrl-A Ctrl-X
И снова запустите менеджер модема:
$ sudo start modemmanager
Вы можете использовать виртуальное PBX-решение с открытым исходным кодом FreeSwitch вместе с его расширением GSMopen для отправки USSD-команд [ источник].
Например, если USSD-код для получения баланса (скажем) *901#, вы должны выполнить:
chat SMS|interface3|ussd|*901#
Конечно, в других ответах есть более простые решения, но в любом случае вы используете GSMopen (... например, потому что это единственный способ делать голосовые вызовы GSM в Linux...).