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

8

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

GunJack
источник

Ответы:

7

Вот некоторые приложения с поддержкой проверки баланса 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пакет.


источники

HEXcube
источник
V Мобильная широкополосная связь: 12.12.14 : ошибка: W: Не удалось получить ppa.launchpad.net/crass/v-mobile-broadband/ubuntu/dists/trusty/… 404 Не найдено. Это сдано?
вечнозеленые
@evergreen Нет, проект еще не закончен, PPA все еще выпускает обновления для 12.04LTS "Precise" . Тем не менее, он не был обновлен для 14.04LTS " Надежный " и до сих пор.
HEXcube
К сожалению, ни одна из этих работ для 16.04 и выше
Анвар
3

Вы можете использовать утилиту командной строки gammuдля этой цели. Если USSD-код для получения вашего баланса (скажем) * 901 #, вы должны выполнить:

gammu getussd "*901#"

Инструкции по установке и настройке и более подробную информацию смотрите здесь .

tanius
источник
1

Вы можете напрямую использовать 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, см. Этот ответ .

tanius
источник
1

Вы можете сделать их с пакетом 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
Mateo
источник
0

Вы можете использовать инструмент командной строки Linux gsm-ussdдля отправки USSD-кодов, получения ответов и даже навигации по USSD-меню (хотя это не было стабильно / пригодно для меня).

Подробные инструкции по установке и настройке см. Здесь . Пакет Debian версии 0.4, предлагаемый для установки, является последней версией для разработчиков .

Если USSD-код для получения вашего баланса (скажем) * 901 # и ваш модем, то /dev/ttyUSB1вы должны выполнить это, чтобы отправить простой USSD-код и отобразить ответ сети (не приводя к появлению меню):

gsm-ussd -m /dev/ttyUSB1 "*901#"
tanius
источник
0

Вы можете использовать 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, см. Этот ответ .

tanius
источник
16.04 команда возвращает этоerror: couldn't initiate USSD session: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Operation not supported.'
Анвар
0

Для меня оба решения на основе 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
Дмитрий Франк
источник
-1

Вы можете использовать виртуальное PBX-решение с открытым исходным кодом FreeSwitch вместе с его расширением GSMopen для отправки команд USSD [ источник ].

Например, если USSD-код для получения вашего баланса (скажем) * 901 #, вы должны выполнить:

chat SMS|interface3|ussd|*901#

Конечно, в других ответах есть более простые решения, но в любом случае вы используете GSMopen (... например, потому что это единственный способ выполнять голосовые вызовы GSM в Linux ...).

tanius
источник