Có thể chạy các lệnh ussd nhờ gammu, thí dụ qua câu lệnh
gammu getussd '*101#'
Tuy nhiên khi đã chạy daemon gammu-smsd thì câu lệnh này không hoạt động vì gammu-smsd đã khóa tất cả các cổng của GSM modem.
gsm-ussd có thể dùng chung với gammu-smsd (và gammu)
Các bước cài đặt như sau:
1. Tải về gsm-ussd tại http://linux.zum-quadrat.de/downloads
wget http://linux.zum-quadrat.de/downloads/gsm-ussd_0.4.0-25_all.deb
2. Cài đặt bằng câu lệnh
sudo dpkg --install gsm-ussd_0.4.0-25_all.deb
3. Chạy lệnh ussd
gsm-ussd -m /dev/ttyUSB2 --no-cleartext '*101#'
Thay ttyUSB2 bằng port được modem GSM dùng, thay *101# bằng mã ussd cần dùng
Chú thích 1
Để không phải ghi tham số modem (-m) và mã ussd, sửa file /usr/bin/gsm-ussd và /usr/bin/xussd
sudo nano /usr/bin/gsm-ussd
- Tìm my $modemport, thay giá trị bằng port của GSM modem (thí dụ /dev/ttyUSB2)
- Tìm my @ussd_queries, thay giá trị bằng code ussd (thí dụ *101#)
sudo nano /usr/bin/xussd
- Tìm USSD_QUERY và thay giá trị bằng code ussd (thí dụ *101#)
Sau đó câu lệnh trở thành
gsm-ussd
- Tắt gammu-smsd (killall gammu-smsd) và chạy thử câu lệnh trên
- Cho chạy gammu-smsd (gammu-smsd -d) và chạy thử câu lệnh trên
Thí dụ
File bash chạy trong crontab nhắc nạp tiền khi sắp hết tiền trong SIM Viettel
#!/bin/bash #số điện thoại admin adm_phone='xxxxxxxxxx' txt_alert='Vui long nap tien cho SIM 0126xxxxxxxx"' #số tiền tối thiểu trong SIM limit=6000 #số tiền còn lại trong SIM bl=$(gsm-ussd -m /dev/ttyUSB2 --no-cleartext '*101#'|grep -Po '\d+(?= dong\.)') if [ "$bl" -lt "$limit" ]; then #gởi sms báo nạp tiền gammu-smsd-inject TEXT $adm_phone -text "$txt_alert" fi
Với SIM Mobifone, thay bằng câu lệnh
bl=$(gsm-ussd -m /dev/ttyUSB2 --no-cleartext '*101#'|grep -Po '\d+(?= d,)')
Chú thích 2
1. Trong trường hợp cài đặt bị lỗi vì thiếu các thành phần phụ thuộc, chạy lệnh
sudo apt-get install libexpect-perl && sudo apt-get -f install
2. Với một số loại GSM modem, sim khóa PIN không dùng được với gsm-ussd mặc dù có option -p
3. Với một số loại GSM modem, các lần chạy gsm-ussd phải cách xa để GSM modem có thể tự reset hoặc gsm-ussd bị treo