Ответы:
Вот некоторые приложения с поддержкой проверки баланса 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 - это оригинальное программное обеспечение 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#"
Инструкции по установке и настройке и более подробную информацию смотрите здесь .
Вы можете напрямую использовать 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
, см. Этот ответ .
Вы можете сделать их с пакетом 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
Вы можете использовать инструмент командной строки Linux gsm-ussd
для отправки USSD-кодов, получения ответов и даже навигации по USSD-меню (хотя это не было стабильно / пригодно для меня).
Подробные инструкции по установке и настройке см. Здесь . Пакет Debian версии 0.4, предлагаемый для установки, является последней версией для разработчиков .
Если USSD-код для получения вашего баланса (скажем) * 901 # и ваш модем, то /dev/ttyUSB1
вы должны выполнить это, чтобы отправить простой USSD-код и отобразить ответ сети (не приводя к появлению меню):
gsm-ussd -m /dev/ttyUSB1 "*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
, см. Этот ответ .
error: couldn't initiate USSD session: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Operation not supported.'
Для меня оба решения на основе 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 ...).