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

Это попытка работать вместе с Debian. Проверьте канал # debian-ubuntu на OFTC

1
задан 2 May 2016 в 01:43

7 ответов

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

gammu getussd "*901#"

Для инструкций по установке и настройке и более подробной информации, gammu .

3
ответ дан 24 May 2018 в 14:04

Вы можете сделать их с пакетом 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
1
ответ дан 24 May 2018 в 14:04

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

Для детальной установки и инструкции по настройке см. в gsm-ussd . Пакет Debian версии 0.4, предлагаемый там для установки, является последней версией ветвей dev.

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

gsm-ussd -m /dev/ttyUSB1 "*901#"
0
ответ дан 24 May 2018 в 14:04

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

0
ответ дан 24 May 2018 в 14:04
  • 1
    В 16.04 команда возвращает это error: couldn't initiate USSD session: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Operation not supported.' – Anwar 18 May 2017 в 16:59

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

0
ответ дан 24 May 2018 в 14:04

Для меня, как решения на основе 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, возможно, означает, что вы не остановили диспетчер модемов, см. выше)

Затем введите:

AT+CUSD=1,"*104#"

И через несколько секунд вы должны получить свой ответ, который может быть многострочным: [ ! d13]

+CUSD: 0,"You have:
2.07 GB of traffic, valid until N
47 minutes

",15

OK

Чтобы выйти из picocom, используйте Ctrl-A Ctrl-X

И снова запустите диспетчер модемов:

$ sudo start modemmanager
0
ответ дан 24 May 2018 в 14:04

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

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

chat SMS|interface3|ussd|*901#

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

-1
ответ дан 24 May 2018 в 14:04

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

Похожие вопросы: