Existe-t-il des outils ou des commandes que je peux utiliser pour envoyer des codes USSD afin de vérifier le solde et le solde des données de la carte SIM GSM dans mon modem USB (dongle haut débit mobile)?
Voici quelques applications prenant en charge le contrôle de solde USSD:
Prepaid Manager est un applet pour le bureau GNOME qui vous permet de vérifier et de recharger le solde des cartes SIM prépayées pour téléphones mobiles GSM. Il s’agit d’une application simple et minimaliste dont le bilan et le complément USSD sont tout ce qu’il fait. Mais en revanche, il s’agit d’une application très ancienne et qui n’a reçu aucune nouvelle mise à jour depuis longtemps. Et si votre fournisseur n'est pas pris en charge, vous devrez le configurer manuellement comme décrit sur leur page d'accueil . Pour installer, cliquez ici:
Ou exécutez la commande suivante:
Sudo apt install prepaid-manager-applet
L'interface graphique de Modem Manager est une solution complète permettant de gérer et de surveiller les modems basés sur un réseau mobile. Il offre de nombreuses fonctionnalités et le support USSD n’est que l’une d’elles. Pour une liste complète des fonctionnalités, visitez leur page d'accueil officielle . Pour installer, cliquez ici:
Ou exécutez la commande suivante:
Sudo apt install modem-manager-gui
V Mobile Broadband est le logiciel original de Vodafone Mobile Connect pour Linux réécrit en être compatible avec l'équipe Open Source Betavine Connection Manager de Network Manager by Vodafone. Malheureusement, il ne semble pas être très activement maintenu pour le moment et n'est pas disponible dans les dépôts Ubuntu. Cependant, vous pouvez tenter votre chance en construisant le projet à partir des sources. Découvrez leur page GitHub .
Avertissement : v-mobile-broadband
dépend de wader
, qui remplace le nom par défaut Ubuntu modemmanager
. Donc, si vous rencontrez des problèmes avec la nouvelle configuration et décidez de désinstaller v-mobile-broadband
, n'oubliez pas de réinstaller le paquet modemmanager
.
Vous pouvez les faire avec le paquetage modem-manager-gui
. Mais il n’est disponible que pour 13.10. Dans d'autres versions, vous devez les gérer dans Terminal avec le package modemmanager
.
Si vous êtes dans Ubuntu 13.10:
Sudo apt-get install modem-manager-gui modemmanager
Dans d'autres versions d'Ubuntu, vous pouvez le faire avec l'application prepaid-manager-applet
Sudo apt-get install prepaid-manager-applet
Vous pouvez utiliser les commandes AT directement pour interroger votre solde via USSD. Pour cela, utilisez n’importe quel programme de terminal série vous permettant de communiquer directement avec votre modem (PuTTY
, minicom
etc.).
J'ai choisi atinout
car cela s'intégrait bien à la ligne de commande. D'abord vous l'installez:
Sudo apt-get install Ruby-ronn;
git clone git://git.code.sf.net/p/atinout/code atinout;
cd atinout;
make;
Sudo checkinstall make install;
Ensuite, si vous utilisez ModemManager (la valeur par défaut sous Ubuntu Linux), vous devrez peut-être d'abord le désactiver pour permettre à atinout
d'accéder à votre modem:
Sudo stop modemmanager;
Maintenant, pour envoyer un code USSD pour une requête de solde au réseau (par exemple, * 901 #) et afficher le résultat, utilisez la commande suivante:
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"*901#\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT");
Cela suppose que votre modem est à /dev/ttyUSB1
. La commande AT
dans la deuxième commande atinout
sert simplement à afficher la réponse USSD non sollicitée en tant qu'effet secondaire, ce qui aurait dû arriver après le sleep
.
Pour le cas où l'interrogation de votre balance nécessite l'utilisation d'un menu USSD: ceci est également possible avec atinout
, voir cette réponse .
Pour moi, les solutions basées sur ModemManager et gammu
ne fonctionnent pas correctement avec la réponse USSD multiligne; par exemple. mon opérateur a une commande USSD *104#
, à laquelle il répond quelque chose comme:
You have:
2.07 GB of traffic, valid until N
47 minutes
Il est décevant de ne voir que la première ligne inutile: You have:
.
Enfin, j'ai trouvé une solution de contournement avec picocom
et une commande manuelle AT. Ainsi, chaque fois que je veux vérifier mon solde, je dois procéder comme suit:
Tout d’abord, arrêtez Modem Manager:
$ Sudo stop modemmanager
Maintenant, vous devez connaître le port de votre modem. dans mon cas, il s'agit de /dev/ttyACM0
.
Si vous ne connaissez pas votre port, essayez ceci:
for n in `ls /sys/class/*/*{ACM,wdm}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done
Et recherchez l'entrée avec Mobile Broadband Modem
. Par exemple. ma sortie se présente comme suit:
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
Pour plus d'informations sur l'obtention du bon port, voir ce lien: https://Gist.github.com/heyalexej/cc6c97b1ea42736b3ff7
Ensuite, utilisez picocom pour vous connecter à votre port:
$ Sudo picocom /dev/ttyACM0
Vous devriez voir quelque chose comme ça:
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
(Si vous ne voyez pas ce *EMRDY: 1
, cela signifie probablement que vous n'avez pas arrêté Modem Manager, voir ci-dessus)
Puis entrez:
AT+CUSD=1,"*104#"
Et après quelques secondes, vous devriez recevoir votre réponse, qui peut être multiligne:
+CUSD: 0,"You have:
2.07 GB of traffic, valid until N
47 minutes
",15
OK
Pour quitter picocom, utilisez Ctrl-ACtrl-X
Et relancez le gestionnaire de modem:
$ Sudo start modemmanager
Vous pouvez utiliser l'outil de ligne de commande Linux gsm-ussd
pour envoyer des codes USSD, obtenir des réponses et même naviguer dans les menus USSD (bien que ce ne soit pas stable/utilisable pour moi).
Pour des instructions détaillées sur l’installation et la configuration, voir ici . Le paquet Debian version 0.4 proposé ici pour l'installation est le dernière version de la branche dev .
Si le code USSD pour obtenir votre solde est (par exemple) * 901 # et que votre modem est /dev/ttyUSB1
, vous exécuterez cette opération pour envoyer un simple code USSD et afficher la réponse du réseau (ne générant pas de menu):
gsm-ussd -m /dev/ttyUSB1 "*901#"
Vous pouvez utiliser le client en ligne de commande mmcli
du ModemManager par défaut d'Ubuntu pour envoyer un code USSD et obtenir la réponse:
Commencez par lister vos modems: mmcli -L
. Cela montrera un chemin de périphérique de modem comme /org/freedesktop/ModemManager1/Modem/0
. Le numéro à la fin est l'index du modem, souvenez-vous-en.
Activez le modem (en supposant que votre index de modem est 0): mmcli -m 0 -e
Envoyez la demande USSD et affichez la réponse. En supposant que le code USSD de votre opérateur réseau pour obtenir le solde soit * 901 #, la commande serait:
mmcli -m 0 --3gpp-ussd-initiate="*901#"
Pour le cas où l'interrogation de votre balance nécessite l'utilisation d'un menu USSD: ceci est également possible avec mmcli
, voir cette réponse .