Для меня, как решения на основе 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