มีเครื่องมือหรือคำสั่งบางอย่างที่ฉันสามารถใช้ส่งรหัส USSD เพื่อตรวจสอบยอดเงินคงเหลือและข้อมูลของ GSM SIM การ์ดในโมเด็ม USB ของฉัน (ดองเกิลบรอดแบนด์มือถือ) หรือไม่?
มีเครื่องมือหรือคำสั่งบางอย่างที่ฉันสามารถใช้ส่งรหัส USSD เพื่อตรวจสอบยอดเงินคงเหลือและข้อมูลของ GSM SIM การ์ดในโมเด็ม USB ของฉัน (ดองเกิลบรอดแบนด์มือถือ) หรือไม่?
คำตอบ:
แอพเหล่านี้เป็นแอพที่รองรับการตรวจสอบยอดคงเหลือ USSD:
Prepaid Managerเป็นแอปเพล็ตสำหรับเดสก์ท็อป GNOME ที่ให้คุณตรวจสอบและเติมยอดคงเหลือของซิมการ์ดเติมเงินมือถือระบบ GSM มันเป็นแอพที่เรียบง่ายและเรียบง่ายพร้อมการตรวจสอบยอดคงเหลือ USSD และการเติมเงินเป็นสิ่งที่ทำได้ แต่ในทางกลับกันมันเป็นแอพพลิเคชั่นที่เก่ามากและยังไม่ได้รับการอัพเดทใหม่ ๆ ในระยะเวลานาน และหากผู้ให้บริการของคุณจะไม่ได้รับการสนับสนุนคุณจะต้องกำหนดค่าด้วยตนเองตามที่อธิบายไว้ในหน้าแรกของพวกเขา ในการติดตั้งคลิกที่นี่:
หรือเรียกใช้คำสั่งต่อไปนี้:
sudo apt install prepaid-manager-applet
Modem Manager GUI เป็นโซลูชั่นที่สมบูรณ์ในการจัดการและตรวจสอบโมเด็มที่ใช้เครือข่ายมือถือ มันเต็มไปด้วยคุณสมบัติมากมายและการสนับสนุน USSD เป็นเพียงหนึ่งในนั้น สำหรับรายการที่สมบูรณ์ของคุณสมบัติเยี่ยมชมเว็บไซต์อย่างเป็นทางการของพวกเขา ในการติดตั้งคลิกที่นี่:
หรือเรียกใช้คำสั่งต่อไปนี้:
sudo apt install modem-manager-gui
V Mobile Broadbandเป็นซอฟต์แวร์Vodafone Mobile Connectดั้งเดิมสำหรับ Linux เขียนใหม่เพื่อให้เข้ากันได้กับ Network Manager โดยทีมงาน Betavine Connection Manager ของโอเพ่นซอร์สของ Vodafone น่าเสียดายที่ตอนนี้ดูเหมือนว่าจะยังไม่ได้รับการบำรุงรักษามากนักและไม่สามารถใช้งานได้ใน Ubuntu repos อย่างไรก็ตามคุณอาจลองเสี่ยงโชคในการสร้างโครงการจากแหล่งที่มา ตรวจสอบหน้า GitHub ของพวกเขา
คำเตือน : v-mobile-broadband
ขึ้นอยู่กับซึ่งแทนที่ค่าเริ่มต้นของwader
Ubuntu modemmanager
ดังนั้นหากคุณประสบปัญหากับการตั้งค่าใหม่และตัดสินใจถอนการติดตั้งv-mobile-broadband
อย่าลืมติดตั้งmodemmanager
แพ็คเกจใหม่
คุณสามารถใช้ยูทิลิตีบรรทัดคำสั่งgammu
เพื่อจุดประสงค์นี้ หากรหัส USSD เพื่อรับยอดเงินของคุณคือ (พูด) * 901 # คุณจะดำเนินการ:
gammu getussd "*901#"
สำหรับการติดตั้งและการตั้งค่าคำแนะนำและรายละเอียดเพิ่มเติมดูที่นี่
คุณสามารถใช้คำสั่ง 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 A: เรื่องนี้ก็เป็นไปได้ด้วยatinout
, ดูคำตอบนี้
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
คุณสามารถใช้เครื่องมือบรรทัดคำสั่ง Linux gsm-ussd
เพื่อส่งรหัส USSD รับคำตอบและแม้แต่นำทางเมนู USSD (แม้ว่ามันจะไม่เสถียร / ใช้งานได้สำหรับฉัน)
สำหรับการติดตั้งและการกำหนดค่ารายละเอียดคำแนะนำดูที่นี่ รุ่น 0.4 แพคเกจ Debian ที่นำเสนอมีการติดตั้งเป็นเวอร์ชันล่าสุดสาขา dev
หากรหัส USSD เพื่อรับยอดเงินของคุณคือ (พูด) * 901 # และโมเด็มของคุณคือ/dev/ttyUSB1
คุณจะดำเนินการสิ่งนี้เพื่อส่งรหัส USSD แบบง่าย ๆ และแสดงคำตอบของเครือข่าย (ไม่ส่งผลในเมนู):
gsm-ussd -m /dev/ttyUSB1 "*901#"
คุณสามารถใช้mmcli
ไคลเอนต์บรรทัดคำสั่งของ ModemManager ที่เป็นค่าเริ่มต้นของ 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
ดูคำตอบนี้
error: couldn't initiate USSD session: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Operation not supported.'
สำหรับฉันทั้ง ModemManager-based solution และ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
อาจหมายความว่าคุณไม่ได้หยุด Modem Manager ดูด้านบน)
จากนั้นป้อน:
AT+CUSD=1,"*104#"
และหลังจากผ่านไปหลายวินาทีคุณควรได้รับคำตอบซึ่งอาจเป็นหลายบรรทัด:
+CUSD: 0,"You have:
2.07 GB of traffic, valid until N
47 minutes
",15
OK
หากต้องการออกจาก picocom ให้ใช้ Ctrl-A Ctrl-X
และเริ่มตัวจัดการโมเด็มอีกครั้ง:
$ sudo start modemmanager
คุณสามารถใช้โซลูชัน PBX เสมือนโอเพ่นซอร์ส FreeSwitchพร้อมกับส่วนขยายGSMopenเพื่อส่งคำสั่ง USSD [ แหล่งที่มา ]
ตัวอย่างเช่นหากรหัส USSD เพื่อรับยอดเงินของคุณคือ (พูด) * 901 # คุณจะดำเนินการ:
chat SMS|interface3|ussd|*901#
There are simpler solutions in the other answers of course, but in case you use GSMopen anyway (… for example because it's the only way to do GSM voice calls under Linux …).