Respostas:
Estes são alguns aplicativos com suporte à verificação de saldo USSD:
O Gerenciador pré-pago é um miniaplicativo para o GNOME Desktop que permite verificar e completar o saldo dos cartões SIM pré-pagos móveis GSM. É um aplicativo simples e minimalista, com verificação e recarga de saldo USSD sendo tudo o que faz. Mas, por outro lado, é um aplicativo muito antigo e não recebe novas atualizações há muito tempo. E se o seu provedor não for suportado, você deverá configurá-lo manualmente, conforme descrito na página inicial . Para instalar, clique aqui:
Ou execute o seguinte comando:
sudo apt install prepaid-manager-applet
A GUI do Modem Manager é uma solução completa para gerenciar e monitorar modems baseados em rede móvel. Ele contém muitos recursos, e o suporte ao USSD é apenas um deles. Para obter uma lista completa dos recursos, visite a página oficial deles . Para instalar, clique aqui:
Ou execute o seguinte comando:
sudo apt install modem-manager-gui
V Mobile Broadband é o software Vodafone Mobile Connect original para Linux, reescrito para ser compatível com o Network Manager pela equipe Betavine Connection Manager da Vodafone, de código aberto. Infelizmente, ele não parece ser mantido ativamente no momento e não está disponível nos repositórios do Ubuntu. No entanto, você pode tentar a sorte criando o projeto a partir da fonte. Confira a página do GitHub .
Aviso : v-mobile-broadband
depende wader
, o que substitui o padrão do Ubuntu modemmanager
. Portanto, se você encontrar problemas com a nova instalação e decidir desinstalar v-mobile-broadband
, não se esqueça de reinstalar o modemmanager
pacote.
Você pode usar o utilitário de linha de comando gammu
para esse fim. Se o código USSD para obter seu saldo for (digamos) * 901 #, você executaria:
gammu getussd "*901#"
Para instruções de instalação e configuração e mais detalhes, consulte aqui .
Você pode usar os comandos AT diretamente para consultar seu saldo via USSD. Para isso, use qualquer programa de terminal serial que permita a comunicação direta com o modem ( putty
, minicom
etc.).
Eu escolhi atinout
porque ele se integrava perfeitamente à linha de comando. Primeiro você o instala:
sudo apt-get install ruby-ronn;
git clone git://git.code.sf.net/p/atinout/code atinout;
cd atinout;
make;
sudo checkinstall make install;
Então, se você usa o ModemManager (o padrão no Ubuntu Linux), pode ser necessário desativá-lo primeiro para permitir o atinout
acesso ao modem:
sudo stop modemmanager;
Agora, para enviar um código USSD para consulta de saldo à rede (por exemplo, * 901 #) e exibir o resultado, você usaria este comando:
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"*901#\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT");
Isso pressupõe que seu modem esteja em /dev/ttyUSB1
. O AT
comando no segundo atinout
comando é apenas para obter a resposta USSD não solicitada exibida como um efeito colateral, que deveria ter chegado após o sleep
.
No caso de consultar sua balança exigir a operação de um menu USSD: isso também é possível atinout
, consulte esta resposta .
Você pode fazê-los com o pacote modem-manager-gui
. Mas está disponível apenas para 13.10. Em outras versões, você precisa gerenciá-los no Terminal com o pacote modemmanager
.
Se você estiver no Ubuntu 13.10:
sudo apt-get install modem-manager-gui modemmanager
Em outras versões do Ubuntu, você pode fazer isso com o aplicativo prepaid-manager-applet
sudo apt-get install prepaid-manager-applet
Você pode usar a ferramenta de linha de comando do Linux gsm-ussd
para enviar códigos USSD, obter respostas e até navegar nos menus USSD (embora isso não fosse estável / utilizável para mim).
Para instruções detalhadas de instalação e configuração, consulte aqui . O pacote Debian da versão 0.4 oferecido lá para instalação é a versão mais recente do ramo de desenvolvimento .
Se o código USSD para obter seu saldo for (digamos) * 901 # e seu modem for, /dev/ttyUSB1
você o executará para enviar um código USSD simples e exibir a resposta da rede (não resultando em um menu):
gsm-ussd -m /dev/ttyUSB1 "*901#"
Você pode usar o mmcli
cliente de linha de comando do ModemManager padrão do Ubuntu para enviar um código USSD e obter a resposta:
Comece listando seus modems: mmcli -L
. Isso mostrará um caminho do dispositivo de modem como /org/freedesktop/ModemManager1/Modem/0
. O número no final é o índice do modem, lembre-se.
Habilite o modem (assumindo que o índice do seu modem seja 0): mmcli -m 0 -e
Envie a solicitação USSD e exiba a resposta. Supondo que o código USSD da sua operadora de rede para obter o saldo seja * 901 #, o comando seria:
mmcli -m 0 --3gpp-ussd-initiate="*901#"
No caso de consultar sua balança exigir a operação de um menu USSD: isso também é possível mmcli
, consulte esta resposta .
error: couldn't initiate USSD session: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Operation not supported.'
Para mim, as duas soluções baseadas no ModemManager e gammu
não funcionam corretamente com a resposta USSD multilinha; por exemplo, meu operador possui um comando USSD *104#
, ao qual responde algo como:
You have:
2.07 GB of traffic, valid until N
47 minutes
É decepcionante ver apenas a primeira linha inútil: You have:
.
Finalmente, encontrei uma solução alternativa com o picocom
comando AT manual. Portanto, toda vez que quero verificar meu saldo, tenho que fazer o seguinte:
Primeiro, pare o Modem Manager:
$ sudo stop modemmanager
Agora, você precisa conhecer a porta do modem; no meu caso, é /dev/ttyACM0
.
Se você não conhece sua porta, tente o seguinte:
for n in `ls /sys/class/*/*{ACM,wdm}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done
E procure a entrada com Mobile Broadband Modem
. Por exemplo, minha saída é a seguinte:
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
Para obter mais informações sobre como obter a porta correta, consulte este link: https://gist.github.com/heyalexej/cc6c97b1ea42736b3ff7
Em seguida, use picocom para conectar-se à sua porta:
$ sudo picocom /dev/ttyACM0
Você deve ver algo assim:
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
(se você não vê isso *EMRDY: 1
, provavelmente significa que não parou o Modem Manager, veja acima)
Em seguida, digite:
AT+CUSD=1,"*104#"
E após alguns segundos, você deve receber sua resposta, que pode ser multilinha:
+CUSD: 0,"You have:
2.07 GB of traffic, valid until N
47 minutes
",15
OK
Para sair do picocom, use Ctrl-A Ctrl-X
E inicie o gerenciador de modem novamente:
$ sudo start modemmanager
Você pode usar a solução de PBX virtual de código aberto FreeSwitch juntamente com sua extensão GSMopen para enviar comandos USSD [ origem ].
Por exemplo, se o código USSD para obter seu saldo for (digamos) * 901 #, você executaria:
chat SMS|interface3|ussd|*901#
É claro que existem soluções mais simples nas outras respostas, mas no caso de você usar o GSMopen de qualquer maneira (… por exemplo, porque é a única maneira de fazer chamadas de voz GSM no Linux…).