Mengirim USSD/UMB Menggunakan Minicom

Sering saya bercanda menyebut Indosat dengan sebutan Indoshit. Selain katanya yang hampir berima, menggunakan Indosat saya sering "dicuri" pulsa, mendadak berlangganan layanan tertentu yang berbayar dan internet error. Dan jika pun internet lancar, Indosat seringkali menyuntikkan iklan di request kita yang selain menambah beban kuota juga bisa menyebabkan laman gagal dimuat atau update sistem operasi Debian gagal karena looping.

Seakan belum cukup, kini untuk memeriksa pulsa atau kuota internet Indosat hanya bisa dilakukan melalui USSD/UMB atau aplikasi MyIM3 untuk smartphone. Padahal sebelumnya bisa melalui SMS atau laman web mycare.indosatooredoo.com.
Kenyataan ini sungguh mengganggu, karena modem internal (Sierra MC8355 Gobi 3000) di laptop yang saya gunakan tidak bisa menjalankan USSD atau dipasangi aplikasi MyIM3.

Saya telah mencoba untuk memasang aplikasi MyIM3 di Genymotion, dan ternyata MyIM3 hanya dirilis untuk perangkat berarsitektur ARM, jadi tidak kompatibel dengan Genymotion yang berarsitektur x86.

Saya biasa menggunakan Modem Manager GUI untuk mengelola WWAN Gobi 300. Modem Manager GUI menggunakan ModemManager sebagai backend, dan karena dukungan ModemManager untuk modul QMI (yang digunakan oleh Gobi 3000) masih buggy, maka berakibat Modem Manager GUI tidak bisa mengirimkan USSD. Walau saya coba mengganti backend ke pppd, ternyata Modem Manager GUI masih tetap tidak mampu mengirimkan USSD.

I'm stuck isn't it? Well, not really.
Dari sekilas ingatan, sepertinya modem adalah perangkat serial dan bisa diakses menggunakan perintah AT (Hayes command set). Terlintas ide; mungkinkah menggunakan perintah AT untuk request USSD?
Dan ternyata bisa. Setidaknya menurut hasil pencarian di internet, kita bisa menjalankan USSD dengan menggunakan perintah AT pada perangkat serial. Kini masalahnya tinggal mencari tahu bagaimana melakukan hal tersebut di Sierra MC8355.

Dari banyak percobaan menggunakan modem-manager-gui, gammu, wammu, gsm-ussd, atinout, picocom dan lainnya untuk menjalankan USSD, hanya minicom-lah yang tingkat kesuksesannya paling tinggi. Jadi, saya singkat saja artikelnya langsung menuju ke bagaimana saya berhasil menjalankan USSD di Sierra MC8355 Gobi 3000 dengan menggunakan bantuan Minicom.
Here's how....

Persiapan yang diperlukan untuk menjalankan USSD di Minicom

  • Pasang paket-paket yang diperlukan; yakni modemmanager dan minicomp. Paket modemmanager umumnya telah terpasang pada distro-distro dengan Desktop Environment modern.

    sudo apt install modemmanager minicom
    
  • Jalankan mmcli (ModemManager CLI) untuk mengetahui letak modem.

    mmcli -L
    

    Misal, berikut contoh hasil dalam laptop saya:

    Found 1 modems:
    /org/freedesktop/ModemManager1/Modem/4 [Sierra Wireless Inc] Sierra Wireless MC8355 - Gobi 3000(TM) Module

    Dari hasil di atas, ditemukan satu modem yang terletak pada indeks nomor 4. Gunakan angka ini pada perintah selanjutnya.

  • Cari tahu port mana dari modem tersebut yang dapat menerima perintah AT.

    mmcli -m 4
    

    Berikut properti modem Sierra Wireless MC8355 - Gobi 3000 yang bisa ditampilkan. IMEI saya samarkan.

    /org/freedesktop/ModemManager1/Modem/4 (device id '7c8cce21a83e69110bb472e57103ddbab0cac62d')
      -------------------------
      Hardware |   manufacturer: 'Sierra Wireless Inc'
               |          model: 'Sierra Wireless MC8355 - Gobi 3000(TM) Module'
               |       revision: 'D3200-STSUGN-1575  1  [Nov 22 2010 09:00:00]'
               |      supported: 'gsm-umts'
               |        current: 'gsm-umts'
               |   equipment id: 'DISAMARKAN'
      -------------------------
      System   |         device: '/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4'
               |        drivers: 'qcserial, qmi_wwan'
               |         plugin: 'Sierra'
               |   primary port: 'cdc-wdm0'
               |          ports: 'ttyUSB0 (qcdm), ttyUSB1 (at), cdc-wdm0 (qmi), wwp0s29u1u4 (net)'
      -------------------------
      Numbers  |           own : 'unknown'
      -------------------------
      Status   |           lock: 'sim-pin2'
               | unlock retries: 'sim-pin (3), sim-pin2 (3), sim-puk (10), sim-puk2 (10)'
               |          state: 'disabled'
               |    power state: 'low'
               |    access tech: 'unknown'
               | signal quality: '0' (cached)
      -------------------------
      Modes    |      supported: 'allowed: 2g; preferred: none
               |                  allowed: 3g; preferred: none
               |                  allowed: 2g, 3g; preferred: none
               |                  allowed: 2g, 3g; preferred: 2g
               |                  allowed: 2g, 3g; preferred: 3g'
               |        current: 'allowed: 2g, 3g; preferred: none'
      -------------------------
      Bands    |      supported: 'dcs, egsm, pcs, g850, u2100, u1900, u17iv, u800, u850, u900'
               |        current: 'dcs, egsm, pcs, g850, u2100, u1900, u17iv, u800, u850, u900'
      -------------------------
      IP       |      supported: 'ipv4, ipv6, ipv4v6'
      -------------------------
      3GPP     |           imei: 'DISAMARKAN'
               |  enabled locks: 'none'
               |    operator id: 'unknown'
               |  operator name: 'unknown'
               |   subscription: 'unknown'
               |   registration: 'unknown'
      -------------------------
      SIM      |           path: '/org/freedesktop/ModemManager1/SIM/4'
    
      -------------------------
      Bearers  |          paths: 'none'
    

    Dari data di atas, diketahui port yang dapat menerima perintah AT adalah /dev/ttyUSB1.

Skrip sederhana berikut akan mengotomasi pencarian port modem Sierra MC8355 yang bisa digunakan untuk komunikasi serial dan sekaligus menjalankan minicom untuk membuka port tersebut.

#!/bin/bash
MODEM=$(awk '/Sierra/{print $1}' < <(mmcli -L))
AT_PORT=$(mmcli -m ${MODEM% [*} | awk '{gsub("tty|, ", "\n")};1' | awk '/\(at\)/{print $1}')

sudo minicom gobi -c on -D /dev/tty$AT_PORT "$@"

Mengirim USSD dalam Minicom

MAKLUMAT: Saya berlepas diri dari kemungkinan kerugian timbulnya biaya yang dibebankan kepada Anda akibat diikutinya langkah dan ditirunya kode USSD dalam paragraf berikut di bawah ini.
  • Jalankan minicom untuk memulai komunikasi dengan modem di port /dev/ttyUSB1.

    sudo minicom -D /dev/ttyUSB1
    

    Kini kita telah masuk jendela minicom, berikut sedikit panduan menggunakannya:

    • Tekan tombol CTRL+A kemudian E untuk menghidupkan moda echo agar kita bisa melihat apa yang kita ketikkan.
      Jika mendapati tanggapan ERROR setelah mengetikkan perintah, coba ketik perintah tersebut di penyunting teks, salin dan kemudian paste di jendela minicom.
    • Layar bantuan dapat diakses dengan menekan tombol CTRL+A kemudian Z.
    • Untuk keluar dari minicom, tekan tombol CTRL+A kemudian Q atau X.
  • Untuk mengirim USSD, kita menggunakan format AT+CUSD=1,"kode_ussd",15. Misalnya jika hendak mengirimkan *123# yang biasa digunakan untuk memeriksa pulsa di Indosat:

    AT+CUSD=1,"*123#",15
    

    Ketik ENTER untuk mengirim, jika dalam minicom tampil OK berarti syntax pesan telah benar dan berhasil dikirim, kita tinggal menunggu untuk mendapatkan balasan. Misal balasannya adalah seperti berikut.

    +CUSD: 1,"Pulsa Rp 47449 s/d 13.04.2018.BARU!UNLIMITED APPS+YOUTUBE,NelpSMS
    1 Paket UNLIMITED+YTUBE
    2 Favorit UNLIMITED+3GB,50rb
    3 UNLIMITED+7GB,70rb
    4 Obrol
    5 Lainnya
    ",15

    Jika merasa cukup, kita bisa abaikan saja hingga sesi CUSD ini habis. Atau jika tertarik dengan menu yang ada (misalnya menu nomor 5/Lainnya) dan hendak mencari tahu lebih banyak, gunakan perintah yang sama dengan di atas, hanya ganti kode_ussd dengan nomor menu.

    AT+CUSD=1,"5",15
    

    Akan muncul balasan baru, misalnya seperti berikut:

    +CUSD: 1,"Paket Baru Unlimited
    1 OK
    2 Freedom Combo
    3 Internet/Nelp/SMS
    4 PayPro
    5 BuatKamu
    6 HiburanSeru
    7 Inter

    Jika mengirim USSD melalui hape, kita memiliki pilihan Cancel untuk menghentikan atau membatalkan sesi atau perintah. Saya sendiri kurang tahu pasti padanan perintah Cancel tersebut jika menggunakan perintah AT+CUSD, namun sejauh yang saya baca dan coba, perintah berikut berhasil dengan baik:

    AT+CUSD=2
    

    Atau jika memang tidak mau pusing, tutup saja sesi minicom-nya 😅

    Jendela minicom ketika menjalankan perintah USSD

Kendala yang ditemui

  1. Kendala utama yang saya rasakan dalam mengirim USSD/UMB dari minicom ini adalah cara penggunaannya yang tidak ramah pengguna awam. Ia mengingatkan saya dengan vi. Saat awal menggunakan minicom, saya kebingungan mengapa perintah yang diketik tidak muncul di jendela? Ternyata harus menghidupkan moda echo dulu. Dan banyak lagi. Rujuk cara penggunaan sederhana melalui menu help yang bisa ditampilkan dengan menekan tombol CTRL+A kemudian Z.

  2. Kadang perintah yang diketikkan, entah mengapa, mendapat tanggapan ERROR. Padahal saya yakin telah mengetik perintah dengan benar, to the letter. Cara yang ampuh jika mengalami kejadian ini adalah dengan terlebih dahulu menuliskan perintah AT di penyunting teks, menyalinnnya dan kemudian melekatkannya ke dalam jendela minicom. Tekan ENTER, dan voila! Tidak ada lagi pesan ERROR.

  3. Minicom ini sering freezed, yang tidak saya ketahui apa sebabnya. Mungkin saya salah memberi perintah, atau memang tanggapan dari celluler network yang tidak segera membuat minicom "membeku" dan tidak menanggapi semua input.

    Jika sudah crashed begini, tidak ada cara lain selain mematikan proses minicom dengan mengirimkan sinyal SIGTERM kepadanya. Saya sendiri lebih memilih menggunakan htop untuk mematikan minicom yang freezed tersebut, alasannya sederhana; karena htop mudah untuk digunakan.

Demikianlah bagaimana saya bisa mengirimkan kode USSB/UMB ke modem WWAN Gobi 3000 (Sierra MC8355) menggunakan perintah AT di minicom.
Merepotkan? Tentu saja. Namun setidaknya saya tidak perlu cabut-pasang kartu SIM dari laptop ke hape. Dan untungnya, mengirim USSD ini bukanlah hal yang akan sering saya lakukan, mungkin dalam sebulan hanya 2-10 kali.

Rencana selanjutnya, mungkin bisa menggunakan skrip minicom untuk meringankan rutinitas. Minicom sendiri memiliki parameter -S untuk menjalankan skrip. Ia juga memiliki parameter -C untuk mencatat perintah dan tanggapan dalam setiap sesinya, jadi kita akan memiliki rekam jejak mengenai perintah yang kita berikan dan hasil yang kita dapat.

Jika Anda memiliki cara ampuh dan relatif lebih mudah untuk menjalankan USSD/UMB di GNU/Linux, let me know....