Существуют ли какие-либо инструменты или команды, которые можно использовать для отправки USSD-кодов для проверки баланса и баланса данных SIM-карты GSM в моем USB-модеме (мобильный широкополосный ключ)?
Вот некоторые приложения с поддержкой проверки баланса USSD:
Prepaid Manager - это апплет для рабочего стола GNOME, который позволяет проверять и пополнять баланс мобильных предоплаченных SIM-карт GSM. Это простое и минималистичное приложение с проверкой баланса USSD и пополнением баланса. Но, с другой стороны, это устаревшее приложение, которое долгое время не получало никаких обновлений. А если ваш провайдер не поддерживается, вам придется вручную настроить его, как описано на их домашней странице . Для установки нажмите здесь:
Или выполните следующую команду:
sudo apt install prepaid-manager-applet
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, предлагаемый для установки, является последней версией ветки dev .
Если 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
, см. этот ответ .
Для меня решения на основе 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 kbd> Ctrl-X kbd>
И снова запустите менеджер модема:
$ sudo start modemmanager
Вы можете использовать решение виртуальной УАТС с открытым исходным кодом FreeSwitch вместе с его расширением GSMopen для отправки команд USSD [ source ].
Например, если USSD-код для получения вашего баланса (скажем) * 901 #, вы должны выполнить:
chat SMS|interface3|ussd|*901#
В других ответах, конечно, есть более простые решения, но в случае, если вы в любом случае используйте GSMopen (... например, потому что это единственный способ делать голосовые вызовы GSM в Linux ...).