Odpowiedzi:
Oto niektóre aplikacje z obsługą sprawdzania salda USSD:
Prepaid Manager to aplet dla GNOME Desktop, który pozwala sprawdzać i uzupełniać saldo przedpłaconych kart SIM GSM. Jest to prosta i minimalistyczna aplikacja z sprawdzaniem salda USSD i doładowaniem. Ale z drugiej strony, jest to bardzo przestarzała aplikacja i od dawna nie otrzymała żadnych nowych aktualizacji. A jeśli Twój dostawca nie jest obsługiwany, musisz go ręcznie skonfigurować zgodnie z opisem na stronie głównej . Aby zainstalować, kliknij tutaj:
Lub uruchom następujące polecenie:
sudo apt install prepaid-manager-applet
Modem Manager GUI to kompletne rozwiązanie do zarządzania i monitorowania modemów mobilnych w sieci. Zawiera wiele funkcji, a obsługa USSD jest tylko jedną z nich. Aby uzyskać pełną listę funkcji, odwiedź ich oficjalną stronę główną . Aby zainstalować, kliknij tutaj:
Lub uruchom następujące polecenie:
sudo apt install modem-manager-gui
V Mobile Broadband to oryginalne oprogramowanie Vodafone Mobile Connect dla systemu Linux, przepisane w celu zachowania zgodności z Network Managerem przez zespół Open Source firmy Betodine Connection Manager firmy Vodafone. Niestety, obecnie nie wydaje się, aby był bardzo aktywnie utrzymywany i nie jest dostępny w repozytoriach Ubuntu. Możesz jednak spróbować szczęścia, budując projekt ze źródła. Sprawdź ich stronę GitHub .
Ostrzeżenie : v-mobile-broadband
zależy od tego wader
, co zastępuje domyślną wersję Ubuntu modemmanager
. Jeśli więc napotkasz problemy z nową instalacją i zdecydujesz się odinstalować v-mobile-broadband
, nie zapomnij ponownie zainstalować modemmanager
pakietu.
W gammu
tym celu można użyć narzędzia wiersza polecenia . Jeśli kod USSD, aby uzyskać saldo, to (powiedzmy) * 901 #, należy wykonać:
gammu getussd "*901#"
Aby uzyskać instrukcje dotyczące instalacji i konfiguracji oraz więcej szczegółów, zobacz tutaj .
Możesz użyć poleceń AT bezpośrednio, aby sprawdzić saldo za pomocą USSD. W tym celu użyć dowolnego terminala szeregowego program, który pozwala komunikować się z modemem bezpośrednio ( putty
, minicom
etc.).
Wybrałem, atinout
ponieważ ładnie zintegrowało się z wierszem poleceń. Najpierw zainstaluj:
sudo apt-get install ruby-ronn;
git clone git://git.code.sf.net/p/atinout/code atinout;
cd atinout;
make;
sudo checkinstall make install;
Następnie, jeśli korzystasz z ModemManager (domyślny w Ubuntu Linux), być może będziesz musiał go najpierw wyłączyć, aby umożliwić atinout
dostęp do modemu:
sudo stop modemmanager;
Teraz, aby wysłać kod USSD dla zapytania o saldo do sieci (powiedzmy, * 901 #) i wyświetlić wynik, użyłbyś tego polecenia:
atinout - /dev/ttyUSB1 - < <(echo "AT+CUSD=1,\"*901#\",15") && sleep 4 && \
atinout - /dev/ttyUSB1 - < <(echo "AT");
Zakłada się, że modem jest w stanie /dev/ttyUSB1
. AT
Poleceń w drugim atinout
polecenia jest tylko, aby uzyskać niezamówionych odpowiedź USSD wyświetlany jako efekt uboczny, który powinien przybył po sleep
.
W przypadku, gdy zapytanie o saldo wymaga obsługi menu USSD: jest to również możliwe atinout
, patrz: ta odpowiedź .
Możesz to zrobić za pomocą pakietu modem-manager-gui
. Ale jest dostępny tylko dla 13.10. W innych wersjach musisz nimi zarządzać w Terminalu z pakietem modemmanager
.
Jeśli korzystasz z systemu Ubuntu 13.10:
sudo apt-get install modem-manager-gui modemmanager
W innych wersjach Ubuntu możesz to zrobić za pomocą aplikacji prepaid-manager-applet
sudo apt-get install prepaid-manager-applet
Możesz użyć narzędzia wiersza poleceń Linuksa, gsm-ussd
aby wysyłać kody USSD, uzyskiwać odpowiedzi, a nawet poruszać się po menu USSD (chociaż nie było to dla mnie stabilne / użyteczne).
Szczegółowe instrukcje instalacji i konfiguracji znajdują się tutaj . Pakiet 0.4 Debiana oferowany tam do instalacji jest najnowszą wersją oddziału deweloperskiego .
Jeśli kod USSD, aby uzyskać saldo, to (powiedzmy) * 901 #, a modem jest /dev/ttyUSB1
, wykonaj to, aby wysłać prosty kod USSD i wyświetlić odpowiedź sieci (bez wyświetlania menu):
gsm-ussd -m /dev/ttyUSB1 "*901#"
Możesz użyć mmcli
klienta wiersza poleceń domyślnego ModemManager Ubuntu, aby wysłać kod USSD i uzyskać odpowiedź:
Zacznij od listy modemy: mmcli -L
. Spowoduje to wyświetlenie ścieżki modemu /org/freedesktop/ModemManager1/Modem/0
. Liczba na końcu to indeks modemu, pamiętaj o tym.
Włącz modem (zakładając, że indeks modemu wynosi 0): mmcli -m 0 -e
Wyślij żądanie USSD i wyświetl odpowiedź. Zakładając, że kod USSD operatora sieci w celu uzyskania równowagi wynosi * 901 #, polecenie wyglądałoby następująco:
mmcli -m 0 --3gpp-ussd-initiate="*901#"
W przypadku, gdy zapytanie o saldo wymaga obsługi menu USSD: jest to również możliwe mmcli
, patrz: ta odpowiedź .
error: couldn't initiate USSD session: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Operation not supported.'
Dla mnie oba rozwiązania oparte na ModemManager i gammu
nie działają poprawnie z wielowierszową odpowiedzią USSD; np. mój operator ma polecenie USSD *104#
, na które odpowiada coś takiego:
You have:
2.07 GB of traffic, valid until N
47 minutes
To rozczarowujące, aby zobaczyć tylko pierwszy bezużyteczny wiersz: You have:
.
W końcu znalazłem obejście picocom
i ręczne polecenie AT. Dlatego za każdym razem, gdy chcę sprawdzić saldo, muszę wykonać następujące czynności:
Najpierw zatrzymaj Modem Manager:
$ sudo stop modemmanager
Teraz musisz znać swój port modemu; w moim przypadku tak jest /dev/ttyACM0
.
Jeśli nie znasz swojego portu, spróbuj tego:
for n in `ls /sys/class/*/*{ACM,wdm}*/device/interface`;do echo $(echo $n|awk -F '/' '{print $5}') : $(cat $n);done
I poszukaj wpisu za pomocą Mobile Broadband Modem
. Np. Moje dane wyjściowe wyglądają następująco:
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
Aby uzyskać więcej informacji na temat uzyskania właściwego portu, zobacz ten link: https://gist.github.com/heyalexej/cc6c97b1ea42736b3ff7
Następnie użyj picocom, aby połączyć się z portem:
$ sudo picocom /dev/ttyACM0
Powinieneś zobaczyć coś takiego:
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
(jeśli tego nie widzisz *EMRDY: 1
, prawdopodobnie oznacza to, że nie zatrzymałeś Modem Managera, patrz wyżej)
Następnie wprowadź:
AT+CUSD=1,"*104#"
Po kilku sekundach powinieneś otrzymać odpowiedź, która może być wieloliniowa:
+CUSD: 0,"You have:
2.07 GB of traffic, valid until N
47 minutes
",15
OK
Aby wyjść z Picocom, użyj Ctrl-A Ctrl-X
I uruchom ponownie menedżera modemu:
$ sudo start modemmanager
Możesz używać wirtualnego rozwiązania PBX typu open source FreeSwitch wraz z jego rozszerzeniem GSMopen do wysyłania poleceń USSD [ źródło ].
Na przykład, jeśli kod USSD w celu uzyskania salda wynosi (powiedzmy) * 901 #, należy wykonać:
chat SMS|interface3|ussd|*901#
Oczywiście w innych odpowiedziach są prostsze rozwiązania, ale na wypadek, gdybyś mimo to używał GSMopen (… na przykład, ponieważ jest to jedyny sposób wykonywania połączeń głosowych GSM pod Linuksem…).