Баланс GSM USB-модема с использованием USSD

Существуют ли какие-либо инструменты или команды, которые можно использовать для отправки USSD-кодов для проверки баланса и баланса данных SIM-карты GSM в моем USB-модеме (мобильный широкополосный ключ)?

8 ответов

Решение

Вот некоторые приложения с поддержкой проверки баланса USSD:

Менеджер предоплаты

Менеджер предоплаты

Prepaid Manager - это апплет для рабочего стола GNOME, который позволяет проверять и пополнять баланс мобильных предоплаченных SIM-карт GSM. Это простое и минималистичное приложение с проверкой баланса USSD и пополнением баланса. Но, с другой стороны, это устаревшее приложение, которое долгое время не получало никаких обновлений. А если ваш провайдер не поддерживается, вам придется настроить его вручную, как описано на его домашней странице. Для установки нажмите здесь:

Приложение Prepaid Manager для программного обеспечения Ubuntu

Или выполните следующую команду:

sudo apt install prepaid-manager-applet

Графический менеджер модема

Графический менеджер модема

Modem Manager GUI представляет собой комплексное решение для управления и мониторинга модемов на основе мобильной сети. Он содержит довольно много функций, и поддержка USSD - лишь одна из них. Для получения полного списка функций, посетите их официальную домашнюю страницу. Для установки нажмите здесь:

Приложение GUI Modem Manager в программном обеспечении Ubuntu

Или выполните следующую команду:

sudo apt install modem-manager-gui

V Mobile Broadband

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-код и получает ответ:

  1. Начните с перечисления ваших модемов: mmcli -L, Это покажет путь модемного устройства, как /org/freedesktop/ModemManager1/Modem/0, Число в конце - это индекс модема, запомните это.

  2. Включите модем (при условии, что индекс вашего модема равен 0): mmcli -m 0 -e

  3. Отправьте 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...).

Другие вопросы по тегам