Rabu, 26 Juni 2013

Menggunakan SMSLib di Linux

Jumpa lagi setelah sekian lama kita tidak bersua, umur semakin tua dan waktu kita bersama semakin tersita, apa daya manusia? Hanyalah seonggok daging dan tulang belaka, takkan bisa apa-apa tanpa bantuan yang Maha Kuasa. Cukup puisinya mari kita belajar bersama lagi ;-p Tantangan kali ini adalah kita membuat suatu aplikasi berkaitan dengan sms, penerapannya bisa untuk SMS Gateway, dsb. Bisa juga untuk membuat aplikasi "smart sms auto replay", wuiissh aplikasi apa itu? Entahlah cuman biar keliatan keren saja hehehe.. Pertama download dulu library untuk smslib. Menurut dokumentasinya, smslib ini memerlukan beberapa komponen, silahkan dibaca sendiri, salah satu komponennya adalah Java Communications Library, bisa menggunakan SUN Java Comm v2 atau v3, atau menggunakan RXTX, mari kita menggunakan RXTX saja karena RXTX bisa digunakan di sistem operasi secara luas, beda dengan Java Comm yang hanya berjalan di SO Windows saja. Silahkan download dulu komponen dari RXTX. Extract hasil dari downloadnya, kemudian kita buka directory linux dan copykan file .so sesuai dengan arsitektur linux yang kita gunakan, apakah 32bit atau 64bit, copy ke /jre/lib/i386/ untuk 32bit atau /jre/lib/x86_64/ untuk 64bit. Untuk mencoba apakah RXTX sudah berjalan mari kita buat Project Java, silahkan menggunakan IDE favorit, bisa menggunakan NetBeans, Eclipse, dsb. Buat class bernama SimpleRead dan tambahkan library RXTXcomm.jar. Isi dari class SimpleRead adalah sebagai berikut :
import gnu.io.CommPortIdentifier;
import java.util.Enumeration;

public class SimpleRead {
  public static void main(String[] ap) {
    Enumeration pList = CommPortIdentifier.getPortIdentifiers();
    while (pList.hasMoreElements()) {
      CommPortIdentifier cpi = (CommPortIdentifier) pList.nextElement();
      System.out.print("Port " + cpi.getName() + " ");
      if (cpi.getPortType() == CommPortIdentifier.PORT_SERIAL) {
        System.out.println("is a Serial Port: " + cpi);
      } else if (cpi.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
        System.out.println("is a Parallel Port: " + cpi);
      } else {
        System.out.println("is an Unknown Port: " + cpi);
      }
    }
  }
}
Kelas diatas bertujuan menampilkan port serial maupun parallel yang aktif dalam komputer kita, jalankan perintah tersebut, apabila ada error kemungkinan karena masalah hak akses, kelas tersebut berusaha menulis pada folder /var/lock/, solusinya kita tambahkan user kita pada group uucp. Tambahkan dengan mengedit file /etc/group atau dengan menggunakan perintah :
usermod -a -G uucp dicky
Perintah tersebut menambahkan user bernama dicky dalam group uucp sehingga memiliki hak akses write ke directory /var/lock/. Jalankan kelas SimpleRead, jika tidak ada error berarti RXTX sudah berjalan lancar. Selamat anda layak dapan pujian ;-p Sekarang saatnya kita membuat kelas untuk membaca sms dari perangkat yang kita gunakan, tambahkan komponen lainnya dalam project kita yaitu, smslib.jar tentu saja, Apache log4j, Apache Jakarta Commons - Net, dan JSMPP. Buat file log4j.properties di source directory dari Project kita dengan isi :
log4j.logger.smslib=DEBUG, smslib
log4j.appender.smslib=org.apache.log4j.ConsoleAppender
log4j.appender.smslib.layout=org.apache.log4j.PatternLayout
log4j.appender.smslib.layout.ConversionPattern=%-6r %d [%t] %-5p %C %x - %m%n
Kemudian dari hasil download smslib, kita bisa melihat sample dari cara membaca sms di kelas ReadMessages dari package examples.modem. Kita tinggal melihat contoh dari kelas itu kemudian sesuaikan dengan perangkat yang kita gunakan, karena saya menggunakan HP Sony Ericsson W550i maka saya ganti konfigurasi dengan :
SerialModemGateway gateway = new SerialModemGateway("modem.com7", "COM3", 115200, "Sony Ericsson", "W550i");