BAB IV IMPLEMENTASI DAN PENGUJIAN 4.1 Implementasi Implementasi merupakan tahap pengkodean beserta pengujian alat atau rangkaian terhadap seluruh perancangan sistem yang sudah dianalisis pada bab sebelumnya. Implementasi dilakukan dengan membuat tampilan antarmuka sesuai dengan rancangan pada bab sebelumnya, diikuti dengan pembuatan modul, metode dan class yang dibutuhkan. Selain implementasi pembuatan antarmuka, penulis juga mengimplementasikan rancangan rangkaian elektronika yang dibuat dengan mengikuti skema yang telah bahas sebelumnya. Berikut adalah penjelasan mengenai implementasi terhadap perancangan fitur dari aplikasi pemantau listrik pada ruang server dengan notifikasi kepada administrator. 4.1.1 Implementasi Perancangan Aplikasi Pemantau 4.1.1.1 Jendela Utama Pada aplikasi pemantauan ini, jendela utama merupakan sentral dari seluruh aktifitas yang berjalan. Mulai dari manajemen tombol, informasi waktu, informasi terminal pada list field, dan status keadaan listrik. Sebelum melakukan pemantauan listrik, aplikasi ini membutuhkan setup awal yang dilakukan oleh pengguna dalam menentukan parameter-parameter yang dibutuhkan untuk membuat koneksi antara aplikasi pemantau dengan terminal pengirim SMS dalam bentuk telepon selular. Demikian juga pengaturan manajemen nomor telepon tujuan yang harus di definisikan pada awal dijalankannya aplikasi. Berikut
83
84
tampilan jendela utama aplikasi pemantauan listrik dengan tampilan Graphic User Interface yang dibangun oleh penulis:
Gambar 4.1 Tampilan Jendela Utama Aplikasi
Inisialisasi konstruktor pada komponen visual di atas dapat dilihat pada baris kode program Java berikut ini: public GUIFrm() { initComponents(); terminal = new hyperTerminal(list1, buttonCloseTerminal, JbSetTerm); file = new FileOperation(jComboPhone); file.checkFile(namaFileTxt); operasiParallel = new ParallelOperation(textStatusListrik, jComboPhone, terminal);
85
connect = new Connect2HP(list1); showJam = new ShowTime(jTextField1); showJam.showTheTime(); setVisible(true);
} Kode Program 4.1 Inisialisasi Konstruktor GUI Jendela Utama
Setelah memanggil fungsi untuk inisialisasi komponen visual dalam form, kemudian dilakukan pembuatan instance untuk setiap class yang dibutuhkan. Setiap variabel diisikan dengan instance baru setiap class sehingga bisa menggunakan metode yang disiapkan dalam setiap class tersebut. Contoh variabel “showJam” mendapatkan instance dari class “ShowTime” dengan parameter pelengkapnya yaitu sebuah TextField untuk menampung keluaran dari metode “showTheTime”. Berikut adalah potongan kode program dalam untuk inisialisasi komponen visual pada form: jLabel1 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); JbSetTerm = new javax.swing.JButton();
Kode Program 4.2 Inisialisasi komponen visual
4.1.1.2 Manajemen Nomor Telepon Untuk mengatur manajemen nomor telepon tujuan sebagai syarat mutlak proses pemberitahuan notifikasi kepada Administrator, pada jendela utama disediakan
tombol-tombol
untuk
pengaturan
tersebut.
Pengguna
dapat
menambahkan, menyimpan, ataupun menghapus nomor telepon tujuan sesuai
86
dengan keinginan. Berikut potongan gambar detail tombol-tombol manajemen nomor telepon yang terdapat pada pojok kiri jendela utama aplikasi pemantau listrik:
Gambar 4.2 Manajemen Nomor telepon selular
Berikut potongan kode program penyusun manajemen nomor telepon: Deklarasi instance variable private javax.swing.JButton JbAddNumber; private javax.swing.JButton JbDelete private javax.swing.JButton jButton2; Penanganan Aksi : private void JbAddNumberActionPerformed(java.awt.event.ActionEvent evt) { formInput = new JformInputnoTelp(jComboPhone, JbAddNumber); formInput.setVisible(true); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { file.saveComboListToFile(namaFileTxt); } private void JbDeleteActionPerformed(java.awt.event.ActionEvent evt) { if (jComboPhone.getSelectedItem()==null){ JOptionPane.showMessageDialog(null, "Data kosong\nCoba diperiksa Kembali !!!"); } else jComboPhone.removeItem(jComboPhone.getSelectedItem());
Kode Program 4.3 Baris Kode Manajemen Nomor Telepon
87
Untuk menambahkan nomor telepon pada dropdown list, pengguna dapat menekan tombol “Add Number” yang kemudian akan memunculkan dialog input box, dimana pengguna dapat mengetikkan nomor telepon Administrator yang dituju. Selain manambahkan nomor telepon pada drop down list, pengguna juga dapat menyimpan nomor telepon yang sudah ditambahkan sebelumnya ke dalam sebuah file berekstensi “.txt” dengan menekan tombol “Save”. Berikut adalah potongan baris program dari class java bernama “File Operation” yang diperuntukkan untuk menyimpan nomor telepon ke dalam sebuah file : . . public void createFile(String namaBerkas){ try { String namafile = namaBerkas; File outputFile = new File(namafile); FileWriter fileWriter = new FileWriter(outputFile); BufferedWriter wr = new BufferedWriter(fileWriter); wr.close(); } catch (Exception ex) { System.out.println(ex); } } . . . public void write2FileText(String namaBerkas, String combobox[]){ try { String namafile = namaBerkas; File outputFile = new File(namafile); FileWriter fileWriter = new FileWriter(outputFile); PrintWriter wr = new PrintWriter(fileWriter); for(String text : combobox){ wr.println(text); } wr.close();
. . . Kode Program 4.4 Baris Kode Menyimpan nomor telepon pada sebuah file
88
4.1.1.3 Jendela Set Terminal Parameter Inisialisasi perangkat pengirim pesan atau terminal dapat dilakukan pada jendela “Set Terminal Parameter”. Jendela ini diperlukan untuk menginisialisasi perangkat pengirim pesan agar befungsi sesuai dengan tujuan utama yaitu kemampuan
pengiriman
pesan
SMS.
Beberapa
parameter
yang
dapat
dikostumisasi oleh pengguna pada jendela ini seperti Port ID, baud rate, Data Bits, Parity, Stop Bits, dan Flow Control. Selain kostumisasi parameter, jendela ini juga menyediakan sebuah text field untuk menguji perintah AT. Sebelumnya untuk menentukan nila-nilai parameter pada jendela “Set Terminal Parameter” pengguna diharuskan terlebih dahulu menginstalasikan perangkat lunak (driver) pengenal telepon selular yang digunakan. Berikut tampilan jendela “Set Terminal Parameter” pada gambar di bawah ini:
Gambar 4.3 Jendela Set Terminal Parameter
89
Pengguna dapat mengetahui apakah terminal pengirim SMS atau telepon selular telah terkoneksi dengan server atau komputer dengan cara menekan tombol “Nyambung”. Hasil respon pada jendela aplikasi setelah tombol “Nyambung” ditekan akan memunculkan informasi pada text area bertuliskan bahwa koneksi terminal pengirim SMS atau telepon seluler berhasil tersambung dengan server atau komputer. Untuk menghapus teks respon yang telah mengisi text area, pengguna dapat menekan tombol “Hapus Respon” sehingga text area kembali ke keadaan sedia kala. Berikut gambar yang menunjukkan konektivitas antara server dengan terminal pengirim SMS :
Gambar 4.4 Respon ketika pengguna menekan tombol “Nyambung”
90
Berikut ini adalah potongan baris program uji coba koneksi antara telepon selular dengan server atau komputer : ... ... public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals("N")) { dapatNilaiParameter(); nyambungPort(nilaiPort, nilaiBaud, nilaiData, nilaiStop, nilaiParity, nilaiFlow); } .. .. public void nyambungPort(String nilaiPort, int nilaiBaud, int nilaiData, int nilaiStop, int nilaiParity, int nilaiFlow) { daftarPort = CommPortIdentifier.getPortIdentifiers(); while (daftarPort.hasMoreElements()) { portId = (CommPortIdentifier) daftarPort.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { if (portId.getName().equals(nilaiPort)) { try { port = (SerialPort) portId.open("JavaAT", 2000); respon.add("Sedang mencoba melakukan penyambungan dengan port " + nilaiPort); } catch (PortInUseException piue) { respon.add("Port " + nilaiPort + " Sedang dipakai"); } } } } try { input = port.getInputStream(); output = port.getOutputStream(); } catch (IOException ioe) { respon.add("Kesalahan pada " + ioe); } try { port.setSerialPortParams(nilaiBaud, nilaiData, nilaiStop, nilaiParity); port.setFlowControlMode(nilaiFlow); port.notifyOnDataAvailable(true); respon.add("Berhasil tersambung"); AT.setText("AT");
91
String dapatBaud = Integer.toString(port.getBaudRate()); String dapatStop = Integer.toString(port.getStopBits()); String dapatData = Integer.toString(port.getDataBits()); String dapatParity = Integer.toString(port.getParity()); String dapatFlow = Integer.toString(port.getFlowControlMode()); statusNyambung.setText("Nyambung"); statusPort.setText(port.getName()); statusParameter.setText(dapatBaud + "-" + dapatData + "-" + dapatStop + "-" + dapatParity + "-" + dapatFlow); konek.setEnabled(false); StartTerm.setEnabled(false); pilihPort.setEnabled(false); pilihBaud.setEnabled(false); pilihDataBits.setEnabled(false); pilihStop.setEnabled(false); pilihParity.setEnabled(false); pilihFlow.setEnabled(false); putus.setEnabled(true); kirimAT.setEnabled(true); } catch (UnsupportedCommOperationException ucoe) { respon.add("Terdapat kesalahan pada : " + ucoe); } try { port.addEventListener(this); } catch (TooManyListenersException tmle) { respon.add("Terdapat kesalahan pada : " + tmle); } }
Kode Program 4.5 Ujicoba penyambungan port terhadap terminal
Apabila hasil ujicoba konektivitas antara telepon selular dengan server berhasil dilakukan, pengguna dapat memutuskan koneksi yang sudah dibuat dengan menekan tombol “Putus”. Untuk membuat sesi koneksi yang diperlukan untuk kebutuhan pengiriman SMS, disediakan tombol “Start Connection” sebagai maksud utama dari fungsi jendela “Set Terminal Parameter”. Tombol ini menginisialisasi urutan dan proses pengiriman perintah AT yang diperlukan dari server kepada terminal pengirim
92
SMS. Progress inisialisasi sesi koneksi tersebut akan ditampilkan pada list area yang merupakan bagian dari jendela utama aplikasi pemantau listrik ini. Teks bertuliskan “OK” menunjukkan bahwa proses inisialisasi sesi koneksi terhadap terminal telah berhasil dilakukan.
Gambar 4.5 Progress “Start Connection” tampil pada halaman utama
Kode Program 4.6 Progress “Start Connection” berhasil dilakukan
93
Adapun potongan baris program inisialisasi sesi koneksi antara terminal pengirim SMS dan server adalah sebagai berikut: public void setTerminal(String portpars, int data, int stop, int parity, int flow, int baud) { portName = portpars; nilaiBaud = baud; nilaiData = data; nilaiStop = stop; nilaiParity = parity; nilaiFlow = flow; listGUI1.add("Server Sedang melakukan pencarian Port" ); Enumeration portList = CommPortIdentifier.getPortIdentifiers(); while (portList.hasMoreElements()) { CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { if (portId.getName().equals(portName)) { try { port = (SerialPort) portId.open("SMS", 5000); listGUI1.add("Server berhasil membuka Port : " + portName ); } catch (PortInUseException piue) { listGUI1.add("Port : " + portName + " Sedang digunakan" ); listGUI1.add("Penyambungan ke Terminal Gagal ........." ); listGUI1.add("Terjadi kesalahan pada : " + piue ); } } } } try { output = port.getOutputStream(); input = port.getInputStream(); } catch (IOException ioe) { listGUI1.add("Gagal membuka Stream" ); listGUI1.add("Terjadi kesalahan pada : " + ioe ); } try { port.setSerialPortParams(nilaiBaud, nilaiData, nilaiStop, nilaiParity); port.setFlowControlMode(nilaiFlow); port.notifyOnDataAvailable(true); listGUI1.add("Server Melakukan Hubungan ke Port : " + portName ); listGUI1.add("Server Berhasil Tehubung ke Port : " + portName ); listGUI1.add("Server Sedang melakukan Pengaturan Terminal" ); listGUI1.add("Tunggu Sebentar ....." ); kirimAT("AT" + "\15", 1250); kirimAT("AT+CMGF=0" + "\15", 1250);
94
kirimAT("AT+CSCS="+"\"GSM\"" + "\15", 1250); kirimAT("AT+CNMI=2,3,0,0,0" + "\15", 1250); kirimAT("AT+CPMS="+"\"ME\"" + "\15", 1250); kirimAT("AT+CMGL=0" + "\15", 1250); listGUI1.add(".....Connected"); } catch (UnsupportedCommOperationException ucoe) { listGUI1.add("Pengaturan Data Serial Port Gagal" ); listGUI1.add("Kesalahan terjadi pada : " + ucoe ); } try { port.addEventListener(this); } catch (TooManyListenersException tmle) { listGUI1.add("Terjadi kesalahan pada : " + tmle ); } } ... ...
Kode Program 4.7 Sesi Koneksi Terminal pengirim SMS
4.1.1.4 Tombol Aksi (Action Button) Setelah pengguna melakukan setup nomor telepon dan menentukan parameter-paremeter pada jendela “Set Terminal Parameter” agar aplikasi siap digunakan untuk melakukan pengiriman SMS. Tahap selanjutnya adalah melakukan fungsi sebenarnya dari aplikasi pemantau listrik ini yaitu melakukan pemantauan terhadap status hidup atau matinya pasokan listrik pada ruang server.
1.
Tombol Aksi “Start Monitoring” Untuk memulai ujicoba pemantauan listrik, pengguna dapat menekan
tombol “Start Monitoring” yang ada pada deretan tombol berlabelkan “Action Button” . Tombol “Start Monitoring” mengaktifkan pengecekan terhadap variabel yang menampung nilai register printer status secara terus menerus. Apabila terjadi
95
perubahan nilai variabel pada register printer status port parallel yang menandakan bahwa telah terjadi perubahan status keadaan listrik dari hidup maka aplikasi akan merespon dengan menjalankan perintah pengiriman SMS kepada nomor tujuan yang sudah ditentukan sebelumnya.
Gambar 4.6 Aksi tombol “Start Monitoring”
Perubahan status listrik dari keadaan hidup menjadi mati juga mempengaruhi label teks “Status Listrik” dari “ON” menjadi “OFF” sehingga memudahkan pengguna secara visual mengetahui keadaan pasokan listrik yang disuplai dari adaptor 5 volt. Keberadaan teks label tersebut juga membantu pengguna saat mengkonfigurasikan atau menguji setting pemasangan adaptor saat aktif atau tidak aktif sehingga simulasi notifikasi visual keadaan listrik yang tampil pada jendela utama dapat diketahui dengan mudah. Adapun potongan baris program penanganan tombol aksi “Start Monitoring” dapat dilihat pada Kode Program nomor 4.8.
96
Seperti yang dijelaskan sebelumnya, terdapat variabel yang menampung nilai hasil pembacaan dari alamat printer status port parallel. Pada kode program nomor 4.8. terlihat bahwa variabel tersebut bernama “BinnerIn” yang selalu diperiksa perubahan-perubahan nilainya. Pemeriksaan isi nilai dari variable BinerIn dijalankan oleh 2 (dua) metode yaitu getBinner dan getBinner2. Isi metode getBinner yaitu memeriksa perubahan nilai variable “BinnerIn” yang mempunyai nilai awal 104 desimal menjadi 120 desimal. Seperti yang sudah dibahas pada Bab III, Tabel 3.3 menunjukkan bawah nilai 104 desimal adalah dimana posisi listrik dalam keadaan normal, sedangkan nilai 120 desimal adalah nilai variabel pada saat listrik dalam keadaan mati. Jadi bisa disimpulkan bahwa metode getBinner merespon perubahan status listrik dari keadaan normal menjadi status padam. Sebaliknya metode getBinner2 memeriksa nilai awalan variabel “BinnerIn” yaitu 120 desimal menjadi 104 desimal yang artinya metode ini merespon perubahan status listrik dari kondisi listrik padam ke keadaan normal. Kelemahan metode getBinner2 yaitu keterbatasan waktu dalam menjalankan tugasnya selama nilai variabel tetap berada di 120 desimal atau kondisi listrik yang tidak kembali ke keadaan normal dalam batas waktu tertentu. Hal ini disebabkan pada saat listrik padam, pasokan daya didapat dari baterai UPS yang rentang waktu hidupnya memiliki batasan waktu sesuai dengan kapasitas baterai UPS itu sendiri. 2.
Tombol Aksi “Stop Monitoring” Untuk menghentikan proses pemantauan listrik yang sedang berjalan,
pengguna dapat menekan tombol “Stop Monitoring” yang berada tepat disebelah kanan tombol “Start Monitoring”. Detil aksi tombol ini menghentikan seluruh
97
proses pemeriksaan variabel “binnerIn” yang dijalankan oleh metode getBinner dan getBinner2. Proses penghentian pemantauan ini bersifat sementara dan hanya dilakukan secara manual. Apabila pengguna ingin melanjutkan proses pemantauan, maka aksi yang dilakukan adalah dengan menekan tombol “Start Action” sehingga proses pemantauan kembali berjalan. public class ParallelOperation { private JTextField textGUI1; private JComboBox comboBoxGUI; ShowTime getWaktu; hyperTerminal terminal; OperasiSMS sms; FileOperation writeFile; ProsesThread threadProsses; ProsesThread2 threadProsses2; static short addr=0x378; static short addrIn=0x379; static short pin,value,biner = 0; static short binerIn; ParallelPort pp; ParallelPort bitIn; String noTelp; String pesan; public ParallelOperation(JTextField field, JComboBox comboBox, hyperTerminal terminal){ sms = new OperasiSMS(terminal); writeFile = new FileOperation(null); bitIn = new ParallelPort(); getWaktu = new ShowTime(null); this.textGUI1 = field; this.comboBoxGUI = comboBox; binerIn = bitIn.input(addrIn); pp = new ParallelPort(); } public void startAction(){ threadProsses = new ProsesThread(); threadProsses2 = new ProsesThread2(); if (binerIn == 104){ threadProsses.start(); } else if (binerIn == 120){
98
threadProsses2.start(); } } public void stopAction(){ if (threadProsses.isAlive()){ threadProsses.stop(); } else if(threadProsses2.isAlive()){ threadProsses2.stop(); } } public void getBinner(){ System.out.println(binerIn); if ((binerIn == 104)){ textGUI1.setText("ON"); } else if (binerIn == 120) { textGUI1.setText("OFF"); System.out.println("kirim sms"); ProsesPengolahPesan("Listrik Mati"); threadProsses2 = new ProsesThread2(); threadProsses2.start(); threadProsses.stop(); } } public void getBinner2(){ System.out.println(binerIn); if (binerIn == 120){ textGUI1.setText("OFF"); } else if (binerIn == 104) { textGUI1.setText("ON"); System.out.println("kirim sms"); ProsesPengolahPesan("Listrik hidup kembali"); pp.setDataBit((short)0,(short)0); threadProsses = new ProsesThread(); threadProsses.start(); threadProsses2.stop(); } } public void ProsesPengolahPesan(String disconect){
99
noTelp = (String)comboBoxGUI.getSelectedItem(); getWaktu.Jam(); pesan = disconect + " pada pukul" + " " + getWaktu.nolJam + getWaktu.jam + ":" + getWaktu.nolMenit + getWaktu.menit + ":" + getWaktu.nolDetik getWaktu.detik+" tanggal "+getWaktu.nolTanggal + getWaktu.tanggal + " " + getWaktu.namaBulan[getWaktu.bulan] + " " + getWaktu.tahun;
+
System.out.println(noTelp+" ,"+" "+pesan); sms.sendMessage(noTelp, pesan); } class ProsesThread extends Thread { public ProsesThread() { } public void run() { while (true) { getBinner(); try { Thread.sleep(500); } catch (InterruptedException e) {} } } } class ProsesThread2 extends Thread { public ProsesThread2() { } public void run() { while (true) { getBinner2(); try { Thread.sleep(500); } catch (InterruptedException e) {} } } }
} Kode Program 4.8 Proses Pemantauan dari aksi “Start Monitoring” dan “Stop Monitoring”
100
3.
Tombol Aksi “Close Connection” Tombol ini berfungsi untuk mengakhiri sesi koneksi antara terminal
pengirim SMS dengan server atau komputer. Apabila tombol ini ditekan maka fungsi terminal pengirim SMS tidak aktif dan tidak dapat digunakan sebagai pengirim notifikasi SMS. Tombol ini dapat dijalankan ketika aplikasi pemantauan sedang berada pada posisi stanby atau idle yang artinya tidak ada proses pemantauan pada saat tombol aksi “Close Connection” ditekan. Berikut ini adalah potongan kode program tombol Aksi “Close Connection”: Class GuiFrm .. .. private void buttonCloseTerminalActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: terminal.connect.port.close(); ... ...
Kode Program 4.9 Close Connection
4.1.1.5 List Field (List GUI - Terminal Progress) List GUI yang berada pada jendela utama digunakan untuk menampilkan seluruh informasi yang terjadi pada terminal. Informasi yang ditampilkan dapat berupa informasi progress inisialisasi sesi koneksi antara terminal pengirim SMS dengan server dan informasi pesan teks yang dikirimkan kepada Administrator ketika terjadi perubahan status kelistrikan dari keadaan normal menjadi padam ataupun sebaliknya. Selain itu dengan adanya List GUI ini pengguna akan dimudahkan dalam melakukan pembacaan history yang terjadi selama proses pemantauan. Berikut potongan gambar “List GUI” atau “Terminal Progress” yang terdapat pada jendela utama aplikasi pemantau listrik ini:
101
Gambar 4.7 Terminal Progress
Berikut adalah potongan kode program untuk menampilkan progress dari sesi pembuatan koneksi terminal pengirim SMS dengan server pada “Terminal Progress”: … … try { port.setSerialPortParams(nilaiBaud, nilaiData, nilaiStop, nilaiParity); port.setFlowControlMode(nilaiFlow); port.notifyOnDataAvailable(true); listGUI1.add("Server Melakukan Hubungan ke Port : " + portName ); listGUI1.add("Server Berhasil Tehubung ke Port : " + portName ); listGUI1.add("Server Sedang melakukan Pengaturan Terminal" ); listGUI1.add("Tunggu Sebentar ....." ); kirimAT("AT" + "\15", 1250); // Apakah terminal telah siap kirimAT("AT+CMGF=0" + "\15", 1250); kirimAT("AT+CSCS="+"\"GSM\"" + "\15", 1250); kirimAT("AT+CNMI=2,3,0,0,0" + "\15", 1250); kirimAT("AT+CPMS="+"\"ME\"" + "\15", 1250); kirimAT("AT+CMGL=0" + "\15", 1250); listGUI1.add(".....Connected") } .....
Kode Program 4.10 Menambahkan teks informasi pada “Terminal Progress”.
102
4.1.1.6 Pengiriman Notifikasi SMS Kemampuan mengirim notifikasi berupa SMS kepada administrator dilakukan ketika aplikasi pemantau mendeteksi perubahan listrik melalui pembacaan alamat register printer status port parallel. Progress pengiriman SMS juga ditampilkan pada “GUI List” atau “Terminal Progress” sehingga pengguna dengan mudah membaca secara visual detail-detail pengiriman ini.
Gambar 4.8 Progress pengiriman SMS pada jendela utama aplikasi pemantau
Karena kompleksnya proses yang digunakan untuk mengirimkan SMS notifikasi, penulis akan merinci lebih detil potongan kode program dan metode untuk mengirimkan SMS notifikasi kepada administrator sebagai berikut:
103
1) Persiapan format pengiriman SMS …… public void ProsesPengolahPesan(String disconect){ noTelp = (String)comboBoxGUI.getSelectedItem(); getWaktu.Jam(); pesan = disconect + " pada pukul" + " " + getWaktu.nolJam … System.out.println(noTelp+" ,"+" "+pesan); sms.sendMessage(noTelp, pesan); } ……
Kode Program 4.11 Metode pengiriman pesan
Metode ini digunakan untuk mempersiapkan format pesan yang akan dikirim. Proses pengiriman pesan SMS ini menggunakan class operasiSMS beserta dengan metodenya yaitu sendMessage(). 2) Pengiriman Notifikasi SMS Pengiriman SMS notifikasi dalam aplikasi ini melibatkan 3 class, yaitu kelas operasiSMS sebagai jembatan untuk akses kelas hyperTerminal dan kelas
Connect2HP.
Berikut
isi
kode
program
dalam
metode
sendMessage(): public void sendMessage(String noTelp, String pesan){ terminal.connect.prosesKirimSms(noTelp, pesan); }
Kode Program 4.12 Metode pengiriman SMS
Terdapat 2 tingkatan kelas dalam 1 baris perintah tersebut yaitu: -
terminal dari kelas hyperTerminal dimana tidak dilakukan instance agar proses dalam bagian konstruktor kelas ini tidak perlu dijalankan. Bagian konstruktor dari kelas ini hanya dijalankan saat menampilkan
104
form setting terminal seperti pada gambar “Set Terminal Parameter” (gambar 4.4). -
connect adalah instance dari kelas Connect2HP yang berada di dalam kelas hyperTerminal.
connect sebagai hasil instance digunakan agar dapat menggunakan metode prosesKirimSMS() milik kelas Connect2HP. 3) Detil Metode prosesKirimSMS() Berikut adalah potongan kode program dari metode prosesKirimSMS() : … String pesanPDUKirim = PduKirimSms(notlp.trim(), pesan.trim()); kirimAT("AT+CMGS=" + (pesanPDUKirim.length() / 2) + "\15", 500); kirimAT("00" + pesanPDUKirim, 2500); kirimAT("\032", 100); …
Kode Program 4.13 Proses kirim SMS sebagai bagian detil dari class Connect2HP
Untuk mengirimkan SMS notifikasi, isi pesan dan nomor telepon seluler perlu diubah ke dalam format PDU dengan proses-proses detailnya yang terdapat dalam metode PDUKirimSMS(), metode ini terdapat dalam kelas yang sama yaitu kelas Connect2HP berikut beberapa proses yang dilakukan dalam metode tersebut: -
Persiapan string buffer untuk isi PDU.
-
Penambahan tipe PDU pada string buffer.
-
Penambahan nilai MR untuk PDU.
-
Mendapatkan, dan mengubah ke format hexadecimal panjang nomor telepon selular tujuan pengiriman SMS.
105
-
Penambahan nomor telepon selular yang telah diubah menjadi hexa ke string buffer.
-
Penambahan format nomor telepon selular.
-
Pembalikan karakter nomor telepon selular.
-
Penambahan nomor telepon selular yang telah mengalami proses pembalikan ke string buffer.
-
Penambahan nilai PID, DCS, dan VP serta panjang pesan yang telah diubah ke hexadecimal.
-
Penambahan
isi
pesan
setelah
diubah
dengan
method
tujuhKeDelapanBit() ke string buffer. Berikut potongan kode method PDUKirimSMS(): … pesanPDUKirim = new StringBuffer(320); pesanPDUKirim.append("11"); pesanPDUKirim.append("00"); panjangNotlpTujuan = notlp.length(); pesanPDUKirim.append(rubahKeHexa(panjangNotlpTujuan)); pesanPDUKirim.append("91"); …
Kode Program 4.14 Tahapan pemrosesan pesan menggunakan PDU
Penambahan 11 ke dalam string buffer, serta penambahan string lainnya adalah untuk memenuhi syarat format PDU seperti diungkapkan dalam landasan teori. Berikut adalah potongan kode program lanjutan method PDUKirimSMS():
106
… if ( (notlp.length() % 2) == 1) { notlp = balikKarakter(notlp + "F"); } else { notlp = balikKarakter(notlp); } …
Kode Program 4.15 Operasi string buffer pada pemrosesan nomor telepon
Sesuai dengan yang telah diungkapkan dalam dasar teori, nomor telepon ditambahkan pada PDU setelah mengalami pembalikan karakter dan penambahan karakter “F” jika panjangnya ganjil. Setelah penambahan nomor telepon tujuan, masih ada beberapa operasi lain yang dibutuhkan untuk membentuk sebuah paket PDU yang valid. pesanPDUKirim.append(notlp); pesanPDUKirim.append("00"); pesanPDUKirim.append("00"); pesanPDUKirim.append("AA"); panjangPesanKirim = pesan.length(); PduPesan = tujuhKeDelapanBit(pesan); pesanPDUKirim.append(rubahKeHexa(panjangPesanKirim)); pesanPDUKirim.append(PduPesan);
Kode Program 4.16 Pemrosesan teks pesan dari 7 bit ke 8 bit
Setelah semua penambahan, termasuk panjang pesan yang diubah ke mode heksadecimal, hal terakhir yang penting dan tidak boleh dilupakan adalah pesan itu sendiri. Pesan yang berupa 7bit default seperti diatur dalam DCS (Data Coding Scheme) yang berarti SMS teks standar harus mengalami perpindahan Bit agar dapat memenuhi format 8bit karakter dari GSM, perubahan ini dilakukan dengan method tujuhKeDelapanBit(). Setelah
107
persiapan untuk mengubah PDU dilaksanakan, metode prosesKirimSMS() akan mengirimkan AT Command. 4) AT Command, Method kirimAT() Untuk kebutuhan mengirimkan AT Command setelah pesan notifikasi dalam format PDU telah siap, disediakan metode kirimAT(). Berikut potongan kode program untuk metode kirimAT(): public void kirimAT(String atCmd, int delay) { Boolean tungguDelay = new Boolean(true); boolean getDelay = false; synchronized (tungguDelay) { try { output.write( (atCmd).getBytes()); output.flush(); } catch (IOException e) { } … … try { tungguDelay.wait(delay); } catch (InterruptedException ie) { getDelay = true; } } }
Kode Program 4.17 AT Command dan konsep Syncronized pada proses pengiriman AT Command Mengacu kepada kebutuhan mengirim AT Command, lebih dari satu baris AT Command untuk melakukan pengiriman SMS notifikasi, maka diterapkan konsep “Synchronized” yang dimiliki oleh java. Dengan proses ini, jika satu proses pengiriman AT Command belum usai dijalankan, maka proses pengiriman AT Command tidak akan dijalankan dan
108
menunggu hingga satu proses yang menjalankan AT Command usai, dengan demikian proses dapat berjalan berurutan tanpa ada interfensi satu dengan yang lainnya. Koneksi pada perangkat diatur dan dijembatani dengan
variabel
port
yang
merupakan
instance
dari
javax.comm.SerialPort. Untuk mengirimkan dan menerima AT Command pada dan dari perangkat, digunakan fasilitas “OutputStream” dan “InputStream” keduanya berada di bawah pustaka java.io. Tidak lupa setelah mengirimkan AT Command, output stream yang merupakan sarana pengiriman untuk dihapus. 4.1.2 Implementasi Rancangan Rangkaian Elektronika Seperti yang sudah dibahas pada bab sebelumnya, digunakannya rangkaian elektronika sederhana difungsikan sebagai penerima masukkan dari sebuah adaptor DC. Adapun desain dari rangkaian elektronika tersebut adalah sebagai berikut :
Gambar 4.9 Rangkaian Elektronika
109
Gambar di atas memang sudah pernah dibahas sebelumnya oleh penulis, namun hanya sebatas teori mengenai bagaimana rangkaian ini bekerja. Pada bab IV ini, penulis menjabarkan penyusunan rangkaian sederhana ini lebih rinci mengenai komponen yang digunakan serta hasil dari cetakan rangkaian berupa Printed Circuit Board (PCB) yang merupakan implementasi dari pengerjaan rangkaian. 4.1.2.1 Adaptor Direct Current (Adaptor DC) Status keadaan listrik baik kondisi hidup atau mati ditentukan oleh masukkan dari adaptor DC kepada rangkaian elektronika. Sumber listrik yang digunakan oleh adaptor DC merupakan sumber listrik yang dicolokkan langsung ke sumber listrik PLN (wall outlet) tanpa dapat penyangga dari UPS. UPS hanya ditujukan sebagai penyangga atau backup sementara bagi unit-unit server. Penempatan posisi sumber listrik bagi adaptor dibuat dengan skema seperti yang disebut di atas bertujuan untuk implementasi proses triggering. Proses yang dimaksud adalah proses pemicu disaat terjadinya kondisi off pada status listrik namun tidak menyebabkan server pemantau keadaan listrik menjadi mati, sehingga proses pengiriman notifikasi SMS dapat dilakukan. Besaran voltase dari adaptor DC ke rangkaian diatur sebesar 5 volt, dimana proses triggering membutuhkan jumlah besaran voltase sesuai dengan spesifikasi transistor yang dipakai sebagai salah satu komponen pada rangkaian.
110
Gambar 4.10 Adaptor DC dengan tegangan variable
4.1.2.2 Resistor Seperti yang sudah dibahas pada bab II, penggunaan resistor merupakan komponen wajib dipergunakan untuk segala jenis rangkaian. Fungsi utama komponen resistor yaitu menurunkan atau menghambat arus berdasarkan tegangan yang masuk ke rangkaian. Apabila resistor tidak diimplementasikan pada sebuah rangkaian tertutup (loop tertutup), kemungkinan komponen lain yang tergabung pada rangkaian tersebut akan mengalami kerusakan. Seperti hukum Ohm yang menyatakan bahwa Tegangan (V) = Arus (I) x Hambatan (R)
Sehingga arus (I) yang mengalir dalam suatu rangkaian tertutup adalah V/R, semakin besar nilai hambatan, maka semakin kecil arus yang mengalir.
111
Gambar 4.11 Resistor 1K Ohm
4.1.2.3 Transistor N-P-N Penggunaan Transistor pada rangkaian elektronika diperlukan sebagai inti dan trik dari rangkaian yang dirancang oleh penulis, dimana kemampuan transistor dijadikan sebagai saklar elektronik. Kemampuan saklar elekronik dipicu oleh ada atau tidaknya input voltase / tegangan yang diperoleh dari adaptor DC. Pengaruh saklar elektronik tersebut seperti yang telah dibahas pada bab III, mengubah nilai kombinasi bit pada printer status Parallel Port. Nilai 104 pada kombinasi bit-bit printer status adalah kondisi dimana listrik dalam keadaan hidup, sedangkan 120 merupakan nilai kombinasi bit disaat listrik dalam keadaan mati. Transistor yang digunakan oleh penulis adalah transistor NPN dengan model seri BC-108.
112
Gambar 4.12 Pin/Kaki Transistor BC-108 NPN
Gambar 4.13 Transistor BC-108 NPN
4.1.2.4 Lampu LED (Light Emitting Diode) Lampu LED berukuran kecil digunakan pada rangkaian yang bertujuan sebagai pemberi sinyal status adanya aliran listrik dari adaptor ke dalam rangkaian. Kondisi lampu LED hidup menandakan bahwa listrik dalam keadaan hidup begitupun sebaliknya. Sehingga memudahkan user mengetahui kondisi listrk secara langsung di ruang server.
113
Gambar 4.14 Lampu LED berukuran kecil
4.1.2.5 Port DB-25 Male Seperti yang sudah dibahas pada bab III, Port fisik berjenis DB-25 Male digunakan untuk keperluan interfacing antara rangkaian elektronika dengan komputer atau server pemantau listrik. Sesuai dengan rancang desain yang dibuat penulis, pin-pin yang digunakan adalah pin nomor 13 dan 25.
Gambar 4.15 Port DB-25 Male (kiri).
114
4.1.2.6 Penggabungan Komponen Rangkaian pada PCB Mengikuti hasil skema rangkaian yang dibuat dalam gambar 2 dimensi dan peletakan komponen-komponen yang tepat, maka hasil dari penyusunan rangkaian pada sebuah papan PCB adalah seperti gambar di bawah ini :
Gambar 4.16 Hasil Perangkaian Komponen pada Papan PCB
4.1.3 Implementasi Perangkat Terminal Pengirim SMS (Telepon Selular) Dalam ujicoba yang dilakukan, perangkat pengirim notifikasi yang digunakan adalah sebuah ponsel Sony Ericsson seri K630i. Perbedaan perangkat yang digunakan sangat berpengaruh terhadap langkah-langkah yang harus dilakukan untuk dapat menggunakan aplikasi ini sebagaimana mestinya. Langkahlangkah yang terpengaruh perbedaan perangkat adalah langkah inisialisasi awal, dan langkah set parameter terminal pada aplikasi. Langkah set terminal sebelumnya sudah dijelaskan pada subbab 4.1.1.3 ini. Agar komputer dan aplikasi
115
pemantau dapat mengenali dan menggunakan perangkat ini maka harus dilakukan beberapa langkah inisialisasi sebagai berikut: 1) Hubungkan ponsel dengan komputer menggunakan kabel data. Pilih Mode “Phone Mode” dari menu yang muncul di layar ponsel seperti gambar berikut:
Gambar 4.17 Phone Mode 2) Setelah memilih Phone Mode, maka pada layar komputer akan menampilkan jendela Found New Hardware Wizard untuk membantu pengguna menjalankan instalasi driver ponsel ini.
116
Gambar 4.18 Found New Hardware Wizard
3) Pada gambar 4.2 pilih opsi ketiga “No, not this time”, lalu klik next. 4) Pada Dialog window yang muncul berikutnya, terdapat keterangan “This wizard helps install software for …” , pilih opsi “Install a list or specific location (Advance)”, lalu next.
Gambar 4.19 Instalasi Software Driver
117
Langkah yang sama diambil untuk 6 driver software lainnya. Berikut adalah 7 driver software yang harus diinstall: -
Sony Ericsson WMTech Comm interface (Gambar 4.19)
-
Sony Ericsson Device 117 USB Ethernet Emulation (for Networking Device)
-
Sony Ericsson K630i
-
Sony Ericsson K630
-
Sony Ericsson Device 0AF USB WMC Modem
-
Sony Ericsson Device 0AF USB WMC Device Management
-
Sony Ericsson Device 0AF USB WMC OBEX Interface
5) Pada jendela berikutnya, pilih opsi “Search for the best driver in these Locations” dan berikan tanda centang pada opsi “Include this location in the search”, telusuri folder untuk menentukan lokasi file instalasi driver kemudian pilih next.
Gambar 4.20 Lokasi driver
118
6) Proses instalasi driver berjalan hingga muncul jendela seperti pada gambar berikut yang menyatakan bahwa perlatan (telepon selular) telah berhasil diinstall.
Gambar 4.21 Complete Driver Installation
7) Proses nomor 5 dan 6 dilakukan sebanyak 7 kali untuk setiap driver software seperti pada daftar yang dijelaskan pada nomor 4. 8) Bila semua nama driver hardware yang berhubungan dengan ponsel SE K630i selesai terpasang (tentunya dengan driver yang tepat), maka di pojok kanan bawah layar windows, akan muncul baloon tips dengan teks : “Your new hardware is installed and ready to use”
Gambar 4.22 Ballon Tips
119
9) Keberadaan hardware yang telah terpasang dapat dikonfirmasi melalui Task Manager.
Gambar 4.23 Device Manager
10) Untuk mengetahui alamat port perangkat yang telah terkoneksi, klik dua kali pada hardware yang tampil, berikutnya muncul dialog window berikut:
Gambar 4.24 Informasi Alamat Port
120
4.2 Skenario dan Pengujian Aplikasi Beserta Rangkaian Elektronika 4.2.1 Skenario Sistem Tabel 4.1 Skenario Sistem Keseluruhan No 1 2 3
Item proses Menguhungkan adaptor 5V pada sumber listrik Mengubungkan adaptor dengan rangkaian elektronika Menguhubungkan rangkaian elektronika dengan server pemantau
4
Menghubungkan perangkat pengirim SMS melalui USB Port
5
Majanemen nomor telepon
6
Setup sesi perangkat terminal pengirim SMS pada jendela “Set Terminal Parameter”
7
Jalankan pemantauan listrik
8
Kirim Notifikasi SMS
9
Menutup sesi koneksi terminal
Skenario sistem Tidak berhasil LED pada adaptor tidak LED pada adaptor aktif aktif LED pada rangkaian LED pada rangkaian elektronika aktif elektronika tidak aktif Berhasil
Terhubung pada port parallel server pemantau Perangkat terdeteksi oleh server pemantau ditandai munculnya hardware baru pada windows device manager Nomor telepon tujuan dapat di tambahkan, dihapus, dan disimpan Sesi koneksi terminal pengirim SMS dan server berhasil Label status listrk ON atau OFF SMS terkirim Koneksi terminal pengirim pesan SMS dengan server terputus
-
Perangkat tidak terdeteksi oleh server
Pengiriman AT Command kepada terminal gagal Label status listrik tidak muncul SMS tidak terkirim -
4.2.2 Pengujian Menu, Fitur Aplikasi dan Rangkaian Elektronika Pengujian menu dan fitur aplikasi bertujuan untuk mengetahui kinerja menu dan fitur dalam aplikasi beserta rangkaian elektronika yang sudah dibuat. 4.2.2.1 Manajemen Nomor Telepon Manajemen nomor telepon digunakan untuk menentukan nomor telepon selular administrator sebagai tujuan notifikasi pengiriman SMS jika terjadi
121
perubahan status kelistrikan dari keadaan normal menjadi padam ataupun sebaliknya. Datar pengujian fitur manajemen nomor telepon adalah sebagai berikut : Tabel 4.2 Pengujian manajemen nomor telepon No
1
2 3
4
5
Item pengujian Menambahkan daftar nomor telepon Administrator dengan menekan tombol “Add Number”. Karakter nomor telepon dibatasi hanya menggunakan angka, penggunaan huruf tidak diperbolehkan Apabila isian pada dialog tidak diisi Menambahkan nomor telepon yang sudah ada di daftar “combobox” Menghapus nomor telepon sesuai pilihan pengguna pada “combobox” Menyimpan daftar nomor telepon yang terdapat pada “combobox”
Keterangan Hasil
Text Field pada dialog box terisi angka nomor telepon tujuan
Validasi nomor telepon tidak berhasil dan muncul pesan kesalahan bahwa field isian harus diisi Validasi nomor telepon tidak berhasil dan muncul pean kesalahan bahwa nomor telepon yang ditambahkan sudah terdaftar
Status system
ok
ok ok
Nomor telepon yang dipilih akan terhapus dari “combobox”.
ok
Daftar nomor telepon yang ada pada listing “combobox” disimpan pada sebuah file berekstendikan “.txt”
ok
4.2.2.2 Jendela “Set Terminal Parameter” Untuk melakukan konfigurasi awal hubungan komunikasi antara perangkat terminal pengirim SMS dan server, disediakan jendela khusus bernama “Set Terminal Parameter”. Jendela ini merangkum berbagai jenis fungsi untuk keperluan akses terhadap perangkat terminal pengirim SMS dengan menggunakan AT Command. Beberapa parameter harus di konfigurasi oleh pengguna agar perangkat terminal pengirim SMS dapat berfungsi dengan benar.
122
Berikut adalah hasil pengujian terhadap fitur atau menu-menu yang ada pada jendela “Set Terminal Parameter”: Tabel 4.3 Manajemen nomor telepon No 1
2
3
Item pengujian
Keterangan Hasil
Apabila perangkat terminal pengirim SMS terdeksi oleh server Tes pengiriman AT Command pada jendela “Set Terninal Parameter” Apabila tombol “Start Connection” pada jendela “Set Terminal Parameter”
Status system
Dropdown List terisi nilai parameter yang dapat dipilih apabila server telah mengenali perangkat terminal pengirim SMS (gambar 4.3)
ok
Respon “OK” pada List Field jendela “Set Terminal Parameter”
ok
Perintah AT Command muncul pada List Field jendela utama aplikasi pemantau, tanda bahwa sesi koneksi perangkat terminal pengirim SMS berhasil terhubung dengan server (gambar 4.5)
ok
4.2.2.3 Tombol “Start Monitoring” Tombol “Start Monitoring” diperuntukkan untuk memulai proses pemantauan terhadap status kelistrikan pada ruang server. Berikut beberapa kondisi pengujian terhadap proses dan hasil yang dilakukan setelah mengaktikan tombol “Start Monitoring”
Tabel 4.4 Proses Monitoring No
1
2
Item pengujian Apabila setup perangkat terminal pengirim pesan tidak dilakukan dan terjadi perubahan status kelistrikan Apabila setup perangkat terminal pengirim pesan dilakukan dan terjadi perubahan status kelistrikan
Keterangan Hasil
Status system
Perubahan status listrik terdeteksi oleh aplikasi pemantau, namun aplikasi tidak dapat mengirimkan notifikasi SMS kepada administrator
ok
Perubahan status listrik terdeteksi oleh aplikasi pemantau, dan pengiriman notifikasi SMS kepada administrator berhasil terkirim
ok
123
4.2.2.4 Label pada “Current Electric Status” Berikut pengujian terhadap perubahan label pada “Current Electric Status” yang berada pada posisi sebelah kanan jendela utama aplikasi pemantau listrik: Tabel 4.5 Pengujian terhadap label “Current Electric Status” No
1
2
Item pengujian Apabila terjadi perubahan status kelistrikan dari posisi normal menjadi padam setelah dilakukannya pemantauan dengan menekan tombol “Start Monitoring” Apabila terjadi perubahan status kelistrikan dari posisi padam menjadi normal setelah dilakukannya pemantauan dengan menekan tombol “Start Monitoring”
Keterangan Hasil
Status system
Label pada “Current Electric Status” berubah yang semula “ON” menjadi “OFF” (gambar 4.6)
ok
Label pada “Current Electric Status” berubah yang semula “OFF” menjadi “ON”
ok
4.2.2.5 Ujicoba Adaptor dan Rangkaian Elektronika Berikut ini adalah tabel pengujian hubungan antara adaptor 5V dengan rangkaian elektronika yang terhubung pada port parallel server pemantau: Tabel 4.6 Uji coba adaptor 5V dan Rangkaian Elektronika No
1
2
Item pengujian Apabila terjadi perubahan status kelistrikan dari posisi normal menjadi padam Apabila terjadi perubahan status kelistrikan dari posisi padam menjadi normal
Keterangan Hasil
Status system
LED pada adaptor 5V berubah dari aktif menjadi tidak aktif begitu juga dengan LED yang ada ada rangkaian elektronika
ok
LED pada adaptor 5V berubah dari tidak aktif menjadi aktif begitu juga dengan LED yang ada ada rangkaian elektronika
ok
124
4.2.2.6 Pengiriman Notifikasi SMS Tabel 4.7 Pengujian pengiriman SMS No
1
2
Item pengujian Apabila terjadi perubahan status kelistrikan dari posisi normal menjadi padam Apabila terjadi perubahan status kelistrikan dari posisi padam menjadi normal
Keterangan Hasil Notifikasi SMS terkirim melaporkan keadaan listrik kepada administrator, isi pesan dan nomor telepon tujuan ditampilkan pada list field yang ada pada jendela utama aplikasi pemantau Notifikasi SMS terkirim melaporkan keadaan listrik kepada administrator, isi pesan dan nomor telepon tujuan ditampilkan pada list field yang ada pada jendela utama aplikasi pemantau
Status system ok
ok