3 BAB II TINJAUAN PUSTAKA 2.1 Short Message Service (SMS

advertisement
BAB II
TINJAUAN PUSTAKA
2.1 Short Message Service (SMS)
SMS adalah layanan untuk mengirim dan menerima pesan tertulis (teks)
dari maupun kepada perangkat bergerak (mobile device). Pesan teks yang
dimaksud tersusun dari huruf, angka atau karakter alfanumerik. Pesan teks
dikemas dalam satu paket / frame yang berkapasitas maksimal 160 byte yang
dapat direpresentasikan dalam 160 karakter huruf latin atau 70 karakter alfabet
non-latin seperti alfabet Arab atau Cina.
SMS adalah data tipe asynchoronous message yang pengiriman datanya
dilakukan dengan mekanisme protokol store and forward. Hal ini berarti bahwa
pengirim dan penerima SMS tidak harus berada dalam status terhubung
(connected / online) satu sama lain ketika akan saling bertukar pesan SMS.
Pengiriman pesan SMS secara store and forward berarti bahwa pengirim
menuliskan pesan dan nomor telepon tujuan kemudian mengirimkannya (store) ke
server SMS (SMS-Center) yang kemudian bertanggung jawab untuk mengirimkan
pesan tersebut (forward) ke nomor telepon tujuan. Keuntungan mekanisme store
and forward pada SMS adalah penerima tidak perlu dalam status online ketika ada
pengirim yang bermaksud mengirimkan pesan kepadanya karena pesan akan
dikirim oleh pengirim ke SMSC yang kemudian dapat menunggu untuk
meneruskan pesan tersebut ke penerima ketika ia siap dan dalam status online di
lain waktu. Ketika pesan SMS telah terkirim dan diterima oleh SMSC, pengirim
akan menerima pesan singkat (konfirmasi) bahwa pesan telah terkirim (message
sent). Hal-hal inilah yang menjadi kelebihan SMS dan populer sebagai layanan
praktis dari sistem telekomunikasi bergerak.
3
Gambar 2.1 Mekanisme store and forward pada pengiriman pesan SMS
Keterbatasan SMS adalah pada ukuran pesan yang dapat dikirimkan yaitu
maksimal 160 byte (Gupta, 2000). SMS dikirimkan menggunakan signalling
frame pada kanal frekuensi atau time slot frame GSM yang biasanya digunakan
untuk mengirimkan pesan untuk kontrol dan sinyal setup panggilan telepon,
seperti pesan singkat tentang kesibukan jaringan atau pesan CLI (Caller Line
indentification).
2.2 Sistem Kerja SMS
Sistem kerja SMS didasari oleh konsep perintah AT Command dan konsep
mode PDU (Protocol Data Units).
2.2.1
AT Command
AT Command 2x berperan di balik tampilan menu messages sebuah ponsel
yang bertugas mengirim / menerima data ke / dari SMS-Centre. Salah satu
software yang dapat digunakan untuk menguji AT Command ini adalah Windows
HyperTerminal. HyperTerminal biasanya telah tersedia bersama Windows
Installer. Salah satu hal yang perlu diperhatikan dalam pengujian ini adalah nilai
properties yang harus diisi yang bergantung pada jenis / alat komunikasi yang kita
gunakan, misalnya ukuran bit per second atau baud rate dari SMS device yang
dipergunakan.
AT Command sebenarnya hampir sama dengan perintah “>” (prompt) pada
DOS. Perintah-perintah yang dimasukkan ke port dimulai dengan kata AT
kemudian diikuti oleh karakter lainnya yang memiliki fungsi-fungsi unik.
Misalnya ATE1 yang digunakan untuk menanyakan status port. Jika sudah tidak
dipakai lagi maka disarankan untuk menutup connection ini agar port / modem
tersebut bisa digunakan untuk keperluan lainnya.
Beberapa
AT
Command
yang
berkomunikasi dengan SMS-Centre adalah :
4
penting
yang
digunakan
untuk
 AT+CMGS 
untuk mengirim SMS
 AT+CMGL 
untuk memeriksa SMS
 AT+CMGD 
untuk menghapus SMS
AT Command untuk SMS biasanya diikuti oleh data I / O yang diwakili oleh unitunit PDU.
2.2.2
PDU sebagai bahasa SMS dan bagian-bagiannya
Pada prinsipnya terdapat dua mode untuk mengirim dan menerima SMS,
yaitu mode text dan mode PDU (Protocol Data Unit). Akan tetapi sistem mode
text tidak didukung oleh semua operator GSM maupun terminal yang ada. Pada
terminal,
kita
dapat
mengeceknya
dengan
menggunakan
perintah
“AT+CMGF=1”. Jika hasilnya error, dapat dipastikan bahwa terminal anda tidak
mendukung mode text.
2.2.2.1 Text mode
Mode ini merupakan cara termudah untuk mengirim pesan. Pada mode text,
pesan yang kita kirim tidak dilakukan konversi. Teks yang dikirim tetap dalam
bentuk aslinya dengan panjang mencapai 160 (7 bit default alphabet) atau 140
(8 bit) karakter. Kelemahannya, kita tidak dapat menyisipkan gambar dan
nada dering ke dalam pesan yang akan dikirim serta terbatasnya tipe enkoding.
2.2.2.2 Protocol Data Unit (PDU) mode
PDU mode adalah format message dalam heksadesimal octet dan semidecimal octet dengan panjang mencapai 160 (7 bit default alphabet) atau 140 (8
bit) karakter. Kelebihan menggunakan PDU mode adalah dapat melakukan
enkoding sendiri yang tentunya harus didukung oleh hardware dan operator GSM,
melakukan kompresi data, menambahkan nada dering dan gambar pada pesan
yang akan dikirimkan. Kita dapat mengeceknya dengan menggunakan perintah
“AT+CSCS”. Kita dapat menambahkan header ke dalam pesan yang akan dikirim
seperti timestamp, nomor SMSC dan meta-informasi lainnya.
Data yang mengalir ke / dari SMS-Centre harus berbentuk PDU (Protocol
Data Unit). PDU berisi bilangan-bilangan heksadesimal yang mencerminkan
5
bahasa I / O. PDU terdiri atas beberapa header. Header untuk kirim SMS ke SMSCentre berbeda dengan header SMS yang diterima dari SMS-Centre.
 PDU untuk kirim SMS ke SMS-Centre
PDU untuk mengirim SMS terdiri atas delapan header, yaitu :
1. Nomor SMS-Center
Header pertama ini terbagi atas tiga subheader, yaitu :
a. Jumlah pasangan heksadesimal SMS-Centre dalam bilangan heksa.
b. National / International code.
 Untuk nasional, kode subheader-nya 81
 Untuk internasional, kode subheader-nya 91
c. No SMS-Centre dalam pasangan yang dibalik-balik. Jika tertinggal satu
angka heksa yang tidak memiliki pasangan maka angka tersebut
dipasangkan dengan huruf ‘F’ di depannya.
Misalkan No SMS-Centre untuk telkomsel adalah 0811000000 untuk kode
nasional atau 62811000000 untuk kode internasional, bisa diubah menjadi
kode PDU 06818011000000 atau 07912618010000F0. Langkah-langkahnya
adalah sebagai berikut :
 Cara I
SMS-Centre : 0811000000
• 06
 ada 6 pasang
• 81
 1 pasang
Total = 6 pasang
• 80-11-00-00-00  5 pasang
Digabung menjadi kode PDU : 06818011000000
 Cara II
SMS-Centre : 62811000000
• 07
 ada 7 pasang
• 91
 1 pasang
• 26-18-01-00-00-F0  6 pasang
Total = 7 pasang
Digabung menjadi kode PDU : 07912618010000F0. Masing-masing
nomor SMSC untuk masing-masing operator GSM di Indonesia tercantum
seperti tabel di bawah.
6
Tabel 2.1 Nomor SMSC operator-operator GSM di Indonesia
Kode Nasional
Kode Internasional
No Operator Seluler
No SMSC
Kode PDU
No SMSC
Kode PDU
1 Telkomsel
0811000000 06818011000000 62811000000 07912618010000F0
2 Satelindo
0816125
3 Excelcom
0818445009 06818081440590 62818445009 07912618485400F9
4 Indosat - M3
0855000000 06818055000000 62855000000 07912658050000F0
0581806121F5
62816125
059126181652
2. Tipe SMS
Untuk mengirim SMS (SEND) maka tipe SMS-nya adalah 1. Jadi bilangan
heksanya adalah 01.
3. Nomor Referensi SMS
Nomor referensi ini diberikan nilai default 0 (heksadesimal = 00).
4. Nomor Ponsel Penerima
Aturan penulisan header PDU untuk nomor ponsel penerima sama halnya
dengan aturan penulisan header PDU SMS-Centre. Header ini juga terbagi
atas tiga bagian yaitu :
a. Jumlah bilangan desimal nomor ponsel yang dituju dalam bilangan heksa.
b. Kode Nasional / Internasional.
 Subheader untuk kode nasional adalah 81
 Subheader untuk kode internasional adalah 91
c. Nomor ponsel yang dituju dalam dalam pasangan bilangan heksa yang
dibalik-balik. Jika tertinggal satu angka heksa yang tidak mendapat
pasangan maka angka tersebut dipasangkan dengan huruf ‘F’ di depannya.
Misalkan bahwa nomor ponsel yang dituju adalah 081338720083 maka kode
PDU-nya dapat ditulis dengan 2 cara yaitu :
 Cara I
No Ponsel yang dituju : 081 338 72 0083
• 0C
 ada 12 angka
• 81
• 80-31-83-27-00-38
Digabung menjadi kode PDU : 0C81803183270038
7
 Cara II
No Ponsel yang dituju : 6281 338 72 0083
• 0D
 ada 13 angka
• 91
• 26-18-33-78-02-80-F3
Digabung menjadi kode PDU : 0D91261833780280F3
5. Bentuk SMS
Bentuk-bentuk SMS biasanya dibedakan menjadi tiga tipe yaitu :
0 00  dikirim sebagai SMS
1 01  dikirim sebagai telex
2 02  dikirim sebagai fax
Jadi untuk mengirimkan data dalam bentuk SMS, digunakan kode PDU 00.
6. Skema Encoding Data I/O
Skema encoding SMS yang ada sekarang ini menggunakan 2 bentuk skema
encoding yaitu :
a. Skema 7 bit  ditandai dengan angka 0  00 (bilangan heksadesimal)
b. Skema 8 bit  ditandai dengan angka yang lebih besar dari 0 kemudian
diubah menjadi angka heksadesimal yang sesuai.
Kebanyakan ponsel / SMS Gateway yang ada di pasaran sekarang ini
menggunakan skema 7 bit sehingga kita harus menggunakan kode 00.
7. Jangka waktu sebelum SMS habis waktunya (expired)
Jika bagian ini di-skip maka kita tidak akan membatasi waktu berlakunya
SMS. Sedangkan jika kita isi dengan suatu bilangan integer yang kemudian
diubah ke pasangan heksadesimal tertentu maka bilangan yang kita berikan
tersebut akan mewakili jumlah waktu validitas SMS tersebut. Rumus yang
digunakan untuk menghitung jangka waktu validitas SMS adalah sebagai
berikut :
8
Tabel 2.2 Jangka waktu validitas SMS
Integer
(INT)
0 – 143
Jangka waktu validitas SMS
(INT +1) x 5 menit (berarti : 5 menit s/d 12 jam)
144 – 167 12 jam + ((INT -143) x 30 menit)
168 – 196 (INT – 166) x 1 hari
197 – 255 (INT – 192) x 1 minggu
Supaya SMS yang kita kirim pasti bisa diterima di ponsel yang dituju maka
sebaiknya kita tidak memberikan batasan waktu validitasnya.
8. Isi SMS
Header ini terdiri dari 2 subheader, yaitu :
a. Panjang isi (jumlah huruf)
Misalnya untuk kata “kirim sms”  ada 9 huruf  09
b. Isi yang berupa pasangan bilangan Heksadesimal
Jika kita menggunakan ponsel / SMS Gateway berskema encoding 7 bit maka
ketika kita mengetikkan suatu huruf dari keypadnya berarti kita telah membuat
7 angka 1 / 0 secara berurutan. Skema 7 bit tersebut diperlihatkan oleh tabel
berikut ini.
9
Tabel 2.3 Skema encoding 7 bit
b7
0
0
0
0
1
1
1
1
b6
0
0
1
1
0
0
1
1
b5
0
1
0
1
0
1
0
1
0
1
2
3
4
5
6
7
b4 b3
b2 b1
0
0
0
0
0
@
Δ SP 0
-
P
..
P
0
0
0
1
1
£
!
1
A
Q
A
Q
0
0
1
0
2
$
Φ
“
2
B
R
B
R
0
0
1
1
3
¥
Γ
#
3
C
S
C
S
0
1
0
0
4
è
Λ
4
D
T
D
T
0
1
0
1
5
é
Ω
%
5
E
U
E
U
0
1
1
0
6
ù
Π
&
6
F
V
F
V
0
1
1
1
7
ì
Ψ
‘
7
G W G W
1
0
0
0
8
ò
Σ
(
8
H
X
H
X
1
0
0
1
9
Ç
Θ
)
9
I
Y
i
Y
1
0
1
0
10 LF
Ξ
*
:
J
Z
J
Z
1
0
1
1
11
Ø
+
;
K
Ä
K
Ä
1
1
0
0
12
ø
,
<
L
Ö
L
Ö
1
1
0
1
13 CR
-
= M
M
Ñ
1
1
1
0
14
Å
ß
.
> N
Ü
N
Ü
1
1
1
1
15
å
É
/
?
§
O
À
O
Ada dua langkah yang harus dilakukan untuk mengkonversikan isi SMS ke
kode PDU, yaitu :

Langkah Pertama adalah mengubahnya menjadi kode 7 bit.

Langkah Kedua adalah mengubah kode 7 bit menjadi 8 bit yang diwakili
oleh pasangan heksadesimal.
Pesan “kirim sms” dikodekan menjadi 7 bit default alphabet (septet) sehingga
harus di-enkode menjadi 8 bit (octet) untuk mendapatkan deretan kode
PDUnya. Tabel di bawah ini menunjukkan cara pengkodean 7 bit menjadi 8
bit.
10
Tabel 2.4 Pengkodean 7 bit (septet) menjadi 8 bit (octet)
Karakter Desimal (ASCII) Septet (7 bit) Octet(8 bit) Hexa
k
107
1101011
1 1101011 EB
i
105
110100 1
10 110100 B4
r
114
11100 10
001 11100 3C
i
105
1101 001
1101 1101 DD
m
109
110 1101
00000 110
<spasi>
32
01 00000
110011 01 CD
s
115
1 110011
1101101 1 DB
m
109
1101101
0 1110011
s
115
1110011
06
73
Dengan demikian hasil konversi kata “kirim sms” menjadi bilangan
heksadesimal (kode PDU) adalah EBB43CDD06CDDB73.
Setelah kita mendapatkan masing-masing header maupun subheader untuk
mengirimkan SMS maka langkah selanjutnya adalah menggabungkan menjadi
sebuah PDU yang lengkap. Misalkan untuk mengirimkan kata “kirim sms” ke
ponsel dengan nomor 081338720083 melalui SMS-Centre Telkomsel tanpa
membatasi jangka waktu validitas
SMS
maka PDU lengkapnya
adalah:
0681801100000001000C81803183270038000009EBB43CDD06CDDB73
2.3
Mengirim dan memeriksa SMS menggunakan Hyperterminal
Beberapa AT Command yang penting untuk SMS adalah sebagai berikut :
 AT+CMGS
AT+CMGS digunakan untuk mengirim SMS. Syntax penulisannya adalah
AT+CMGS = n. n merupakan jumlah pasangan heksa PDU SMS setelah
nomor SMSC (maksimal 140 untuk sekali kirim) .
Contoh:
Untuk
mengirimkan
kata
“hello”
ke
ponsel
dengan
nomor
6281338720083 melalui SMSC Telkomsel tanpa membatasi jangka waktu
validitas SMS, maka :
SMS-Centre : 07912618010000F0
11
PDU berikutnya :
01000D91261833780280F3000005E8329BFD06
(ada 19 pasangan heksa)
PDU lengkapnya :
07912618010000F001000D91261833780280F3000005E8329BFD06
Jumlah pasangan heksa di atas adalah 19 sehingga nilai n = 19. Ini berarti AT
Command-nya menjadi AT+CMGS = 19. Akhiri dengan “ENTER” setelah itu
akan muncul respons sebuah prompt > seperti terlihat pada gambar di bawah
ini :
Gambar 2.2 AT+CMGS
Setelah tanda prompt > isikanlah PDU yang sudah kita buat diatas lalu akhiri
dengan CTRL+Z. Jika SMS sukses terkirim akan muncul pesan OK.
Sebaliknya jika komunikasi gagal, akan muncul pesan +CMS ERROR.
12
Gambar 2.3 Melakukan input dan sent PDU
 AT+CMGL
AT+CMGL mempunyai syntax penulisan AT+CMGL = n. AT+CMGL
digunakan untuk memeriksa SMS antara lain :
a. n = 0 untuk SMS baru di Inbox
b. n = 1 untuk SMS lama di Inbox
c. n = 2 untuk SMS unsent di Outbox
d. n = 3 untuk SMS sent di Outbox
e. n = 4 untuk semua SMS
Contoh :
Untuk memeriksa semua SMS maka kita menggunakan AT+CMGL = 4
kemudian akhiri dengan “ENTER”.
13
Gambar 2.4 Memeriksa SMS dengan AT+CMGL
Dari gambar output diatas maka dapat diketahui ada 4 SMS yang ada di SIMCard, yaitu :
2.4

sebuah SMS Unsent di Outbox (n = 2)

3 buah SMS lama di Inbox (n = 1)
Arsitektur Jaringan GSM
Gambaran Umum arsitektur dari sebuah jaringan GSM dapat ditunjukan pada
gambar berikut;
Gambar 2.5 Arsitektur Jaringan GSM
14
Secara prinsip GSM dapat dibagi menjadi tiga subsystem antara lain;
Mobile Station (MS) atau ponsel
Base Station Sub-system (BSS), terdiri dari BSC dan beberapa BTS
Network and Switching Subsystem (NSS), terdiri dari MSC dan beberapa register
seperti (VLR,HLR,EIR,etc)
2.4.1
Mobile Station (MS)
Mobile Station (MS) merupakan perangkat yang dapat berkomunikasi
dengan menggunakan jaringan GSM. Telepon Selular dan PCMCIA plug-in
cards. Meskipun MS bukan merupakan bagian dari wired network, MS
mempunyai peran yang penting dalam fungsionalitas jaringan. MS membantu
jaringan dalam mengukur kualitas sinyal radio untuk menentukan handover.
2.4.2
Base Station Subsystem (BSS)
BSS terdiri dari BTS (Base Transceiver Station) dan BSC (Base Station
Controller). BTS menyediakan dan mengelola akses radio ke Mobile Station dan
ke system secara keseluruhan. Didalam BTS biasanya kita akan menemukan TRX
(Radio Transmitter/Receiver ), perangkat untuk kontrol dan proses “signalling”
dan tentu saja antena. BSC bertugas untuk mengalokasikan channel selama proses
call berlangsung dan juga memonitor kualitas dari proses call tersebut seperti
kekuatan signalling dari Mobile Station dan BTS serta mengelola proses
“Handover” (jika MS berpindah posisi dari satu “cell” ke “cell” lain.
Gambar 2.6 : Arsitektur logical structure pada BSS.
15
BSC merupakan unit kontrol dari BSS, dimana satu BSC dapat terhubung dengan
beberapa BTS. BSC menangani alokasi dari kanal radio, frequency hopping,
handover dari BTS ke BTS (kecuali pada inter-MSC-handover di mana
pengontrolan berada pada tangung jawab MSC). Fungsi penting BSC adalah
sebagai konsentrator dimana berbagai koneksi berkecepatan rendah yang
terhubung ke BTS akan berkurang sampai sejumlah kecil koneksi yang menuju
MSC.
BSC menyediakan informasi yang dibutuhkan untuk Network Managemen
tSubsystems (NMS). Database untuk semua tempat, termasuk informasi seperti
frekuensi pembawa, daftar frekuensi hopping, level pengurangan daya,
penerimaan sinyal untuk perhitungan batas sel, semuanya disimpan di BSC. Data
ini diperoleh langsung dari bagian perencanaan radio yang mengikutsertakan
pemodelan dari propagasi sinyal begitupula dengan proyeksi trafik.
Dalam BTS terdapat radio penerima dan pengirim dalam satu sel jaringan GSM
yang menangani protokol hubungan radio dengan telepon pelanggan. Daerah
perkotaan yang besar sangat membutuhkan sejumlah besar BTS, dengan begitu
kebutuhan untuk BTS adalah keharusan, mudah dipindahkan dan biayanya yang
seminimum mungkin. BTS yang jangkauan luasnya lebih besar dari picocell
memiliki beberapa pengirim dan penerima (TRX), yang melayani beberapa
frekuensi yang berbeda dan sektor sel yang berbeda. BTS pada umumnya
memiliki 1 sampai 12 TRX dalam 1, 2, atau 3 sektor walaupun jumlah ini
berbeda-beda.
2.5
Fastrack Supreme 20
FASTRACK yang digunakan dalam pembuatan aplikasi ini adalah
FASTRACK Supreme 20, di bawah ini adalah gambaran/deskripsi umum dari
FASTRACK Supreme 20:
16
Gambar 2.7 Deskripsi Umum FASTRACK Supreme 20
Seperti yang terlihat dari Gambar 2.7 diatas Gambar pertama menunjukkan
konektor DB-15 (Sub HD) yang berfungsi untuk menerima dan mengirim data
kepada PC. Micro-Fit konektor berfungsi untuk memberikan supply tegangan
pada FASTRACK. Pada gambar kedua terdapat dua bagian penting yaitu konektor
SMA yang berfungsi sebagai interface dengan antena dan konektor SIM yang
berfungsi sebagai tempat penyimpan kartu SIM. Pada gambar ke tiga terdapat
konektor IES yang dapat digunakan untuk menambahkan fitur pada FASTRACK
antara lain GPS, USB,I/O. Konektor ini terdapat di bagian belakang plat besi yang
dapat dibuka bila dibutuhkan. Masing-masing konektor di atas akan dijelaskan
lebih lanjut pada sub-bagian di bawah ini.
2.5.1
Konektor Antena
Antena konektor yang digunakan memiliki tipe SMA untuk koneksi RF
50Ώ. Dibawah ini adalah gambar konektor antena dari FASTRACK.
17
Gambar 2.8 Gambar Konektor Antena pada FASTRACK
Konektor antena ini sangat penting dalam penggunaan FASTRACK, sebelum
menghidupkan FASTRACK konektor harus terlebih dahulu disambungkan, bila
tidak dilakukan maka kemungkinan besar FASTRACK akan rusak. Antena yang
di gunakan harus disesuaikan dengan kebutuhan pemakaian.
2.5.2
Konektor HD-15pin
Fungsi dari konektor ini adalah:

Koneksi serial RS232

Koneksi Audio

Koneksi sinyal BOOT dan RESET
Gambar 2.9 Konektor HD 15-pin
Pin 3 pada konektor ini adalah pin BOOT dan memiliki peran penting untuk
melakukan re-install Firmware pada FASTRACK.
Pin 14 adalah RESET, yang memiliki fungsi untuk melakukan reset secara
hardware pada FASTRACK atau dapat disebut Hard RESET. Untuk melakukan
Hard RESET pin ini harus dihubungkan pada GND (Ground) atau diberi sinyal
18
LOW. Selain itu reset juga dapat di lakukan dengan AT command melalui
HyperTerminal dengan mengetikkan AT+CFUN=1.
2.5.3
Konektor IES
Konektor IES adalah konektor board-to-board 50 pin yang digunakan untuk
menambahkan fitur pada FASTRACK seperti GPS/USB/IO expander.
Gambar 2.10 Konektor IES
Selain itu FASTRACK SUPREME 20 memiliki fitur tambahan Serial Port Auto
Shut Down yang berfungsi untuk menghemat konsumsi daya saat tidak ada
komunikasi data antara FASTRACK dengan DTE (Data Terminal Equipment)
yang dalam hal ini adalah komputer PC kita.
2.6 Pengaturan Komunikasi FASTRACK Supreme 20 Dengan Komputer
Pengaturan komunikasi ini sangat penting agar data yang dikirimkan oleh
DTE yaitu komputer kepada FASTRACK dan sebaliknya dapat diterima dengan
baik. Beberapa tahap penting yang harus dilakukan dalam pengaturan ini adalah:

Hubungkan RS232 antara FASTRACK dengan port COM pada komputer.

Untuk menentukan pada port COM berapa komunikasi dapat dilakukan
adalah lewat:
Control Panel  System  Pilih tab Hardware  klik Device Manager
Maka akan tampil menu seperti di bawah ini:
19
Gambar 2.11 Menu Tampilan Pada Device Manager
Pada pilihan PORT (COM & LPT) maka akan tampil keterangan port
COM mana yang sedang digunakan.

Jalankan HyperTerminal lewat:
Start All Program  Accessories  Communication  HyperTerminal.
Gambar 2.12 Tampilan Menu Awal pada HyperTerminal
Setelah masuk pada menu isikan nama yang ingin di berikan lalu pilih OK.
Maka akan muncul menu baru pilih pada bagian “Connect Using:” sesuai
koneksi port yang sedang dijalankan.
20
Gambar 2.13 Tampilan Menu HyperTerminal
Maka akan muncul menu baru. Pada menu ini ada beberapa hal yang perlu
diperhatikan yaitu:

Bit per second : 115.200 bps

Data bit: 8

Parity: None

Stop Bit: 1

Flow Control: Hardware
Setelah setting ini dilakukan pilih OK maka akan tampil halaman putih.
Di halaman inilah kita akan mengetikkan perintah-perintah AT command .

Untuk melakukan test apakah port COM sudah siap berkomunikasi
dengan koneksi Serial dengan FASTRACK dapat dilakukan dengan
mengetikkan perintah-perintah dibawah ini:
o AT lalu Enter, maka Hyperterminal akan merespon dengan OK
yang berarti port komunikasi sudah siap digunakan
o AT+CPIN? Untuk melakukan test apakah pin SIM card sudah siap
dimasukkan. Bila sudah maka akan terlihat respon
READY
21
+CPIN:
2.7 Program Pendukung Aplikasi Polling SMS
2.7.1
Java
Berbicara mengenai Java berarti ada dua bagian yang menjadi topik
pembicaraan, yakni Java sebagai bahasa pemrograman dan Java sebagai platform.
Sebagai bahasa pemrograman, Java dikenal sebagai bahasa pemrograman tingkat
tinggi dengan fitur-fitur utama antara lain : Simple, Object Oriented, Robust &
Secure, Architectre Neutral & Portable serta High Performance. Sebagai sebuah
platform, Java terdiri atas dua bagian utama, yakni : Java Virtual Machine (JVM)
dan Java Application Programming Interface (Java API) (Wicaksono, 2002).
Dalam bahasa pemrograman Java dikenal dua istilah yang sangat penting
dan perlu dipahami secara mendalam yaitu kelas (class) dan objek (object). class
merupakan blueprint atau template yang menggambarkan data (variabel) dan
method (fungsi-fungsi) dari object yang bersangkutan. Jadi class merupakan
prototipe yang mendifinisikan variabel-variabel dan method-method secara
umum. Sedangkan object merupakan instansiasi dari suatu class tertentu. Sebuah
class pada prinsipnya merupakan deskripsi dari bagaimana sebuah objek dibuat.
Untuk setiap objek, terdapat sebuah class yang menentukan bagaimana objek
tersebut dibuat, variabel apa yang akan dimuat dan pesan apa yang akan
ditanggapi. Sebuah objek merupakan kombinasi dari kode (fungsi) dan data
(variabel) yang digabung menjadi satu entitas. Fungsi di dalam objek disebut
method dan data
di dalamnya disebut sebagai variabel. Pemanggilan suatu
method di objek dapat diartikan sebagai pengiriman pesan ke objek. Java adalah
sebuah bahasa pemrograman berorientasi object (Object Oriented Programming)
yang mendukung konsep encapsulation, inheritance dan polymorphism.
Encapsulation merupakan suatu mekanisme dalam bahasa pemrograman
berorientasi objek untuk menyembunyikan data, struktur internal dan detail
implementasi dari beberapa elemen. Seluruh komunikasi ke dalam objek akan
dilakukan melalui public interface-nya (method yang dideklarasikan public).
Inheritance merupakan suatu ciri dari bahasa pemrograman berorientasi objek
dimana suatu class merupakan implementasi khusus dari suatu base class (kelas
induk), atribut-atribut dan method-method dari dari base class-nya akan secara
langsung dimiliki oleh sub class-nya. Polymorphism merupakan suatu konsep
22
bahwa dua atau lebih class dari suatu objek bisa memberikan respon yang berbeda
untuk message yang sama.
Sebagai bahasa pemrograman java cukuplah unik. Pada umumnya sebuah
bahasa pemrograman dikelompokkan ke dalam bahasa yang compiled atau
interpreted. Tetapi java menganut keduanya. Pada proses kompilasi java akan
diubah menjadi bahasa tingkat menengah (intermediate language) yang disebut
dengan bytecodes. Kemudian bahasa tingkat menengah yang dihasilkan dari
proses kompilasi ini akan oleh JVM (Java Virtual Machine) akan dijalankan pada
platform yang digunakan.
Editor / IDE
. Java File
Java Compiler
javac.exe
. class File (Byte Codes)
JavaVirtual Machine
(Interpreter)
java.exe
Gambar 2.14 Proses kompilasi Java
Sebagai sebuah platform, java memiliki motto yang sangat terkenal yaitu
“write once run anywhere”. Jika kita mengembangkan aplikasi dengan Java maka
kita bisa menjalankan aplikasi kita di komputer dengan sistem operasi yang
berbeda-beda tanpa perlu melakukan perubahan pada source code aplikasi kita.
Sebagai kumpulan library atau API, Java memiliki cukup banyak library
yang siap digunakan untuk membangun aplikasi. Kita sebagai developer tidak
akan terlalu direpotkan menciptakan library baru untuk mengembangkan aplikasi
dengan Java. Library-library Java yang sudah ada sekarang ini adalah : Java
Foundation Classes (JFC), Java 2D API, Java Database Connectivity (JDBC),
Java Cryptography Extension (JCE), Java Speech API (JSAPI), Java 3D dan
JavaServer Pages (JSP).
Pada saat sekarang ini Java dibagi menjadi 3 platform yaitu Standar
Edition, Enterprise Edition, dan Micro Edition. Pada dasarnya ketiga edisi ini
memiliki kesamaan dari segi syntax dan arsitektur, hanya dari namanya sudah
23
terlihat bahwa masing-masing edisi digunakan untuk mengembangkan aplikasi di
platform yang berbeda.

Java 2 Standard Edition (J2SE)
Merupakan versi standar dari Java 2 SDK (Standard Develompent Kit) yang
berisikan tools untuk melakukan kompilasi dan menjalankan aplikasi Java dan
terdiri dari API (Application Programming Interface) yang akan digunakan
oleh para developer untuk mengembangkan aplikasi Java seperti applets
ataupun aplikasi-aplikasi berbasis dekstop seperti GUI (Graphical User
Interface).

Java 2 Enterprise Edition (J2EE)
Versi enterprise ini memudahkan untuk mengembangkan aplikasi-aplikasi
untuk kelas enterprise karena java telah menyediakan komponen-komponen
standar untuk mengembangkan aplikasi multitier. Dengan disediakannya
komponen-komponen ini pengembangan aplikasi dapat dilakukan dengan
lebih mudah, lebih cepat dan lebih terfokus ke arah implementasi bisnis
daripada ke implementasi infrastruktur. Adapun komponen-komponen yang
disediakan adalah Enterprise Java Bean (EJB), Servlet, JavaServer Pages,
JDBC dan lain-lain.

Java 2 Micro Edition (J2ME)
Versi ini lebih digunakan ke arah awal dari lahirnya Java yaitu untuk
mengembangkan aplikasi-aplikasi pada handheld device seperti Handphone,
Pocket PC, PDA. Java micro edition bisa dikatakan sebagai versi Java yang
di-optimezed sehingga bisa digunakan untuk mengontrol peralatan-peralatan
kecil baik kecil dari segi fisik maupun kecil dari memori yang dimiliki.
2.7.2
2.7.2.1
Sebagian Fitur dari Java
Java Virtual Mechine (JVM)
JVM adalah sebuah mesin imajiner (maya) yang bekerja dengan
menyerupai aplikasi pada sebuah mesin nyata. JVM menyediakan spesifikasi
hardware dan platform dimana kompilasi kode Java terjadi. Spesifikasi inilah
yang membuat aplikasi berbasis Java menjadi bebas dari platform manapun
karena proses kompilasi diselesaikan oleh JVM.
24
Aplikasi program Java diciptakan dengan file teks berekstensi .java.
Program ini dikompilasi menghasilkan satu berkas bytecode berekstensi .class
atau lebih. Bytecode adalah serangkaian instruksi serupa instruksi kode mesin.
Perbedaannya adalah kode mesin harus dijalankan pada sistem komputer dimana
kompilasi ditujukan, sementara bytecode berjalan pada java interpreter yang
tersedia di semua platform sistem komputer dan sistem operasi.
2.7.2.2
Code Security
Code Security terimplementasi pada Java melalui penggunaan Java
Runtime Environment (JRE). Java menggunakan model pengamanan 3 lapis
untuk melindungi sistem dari untrusted Java Code.
1. Pertama, class-loader menangani pemuatan kelas Java ke runtime interpreter.
Proses ini menyediakan pengamanan dengan memisahkan kelas – kelas yang
berasal dari local disk dengan kelas – kelas yang diambil dari jaringan. Hal ini
membatasi aplikasi Trojan karena kelas – kelas yang berasal dari local disk
yang dimuat terlebih dahulu.
2. Kedua, bytecode verifier membaca bytecode sebelum dijalankan dan
menjamin bytecode memenuhi aturan – aturan dasar bahasa Java.
3. Ketiga, manajemen keamanan menangani keamanan tingkat aplikasi dengan
mengendalikan apakah program berhak mengakses sumber daya seperti sistem
file, port jaringan, proses eksternal dan sistem windowing.
Setelah seluruh proses tersebut selesai dijalankan, barulah kode program di
eksekusi.
Java juga menyediakan beragam teknik pengamanan lain :
1. Bahasa dirancang untuk mempersulit eksekusi kode perusak. Peniadaan pointer
merupakan langkah besar pengamanan. Java tidak mengenal operasi pointer.
Di tangan pemrogram handal, operasi pointer merupakan hal yang luar biasa
untuk optimasi dan pembuatan program yang efisien serta mengagumkan.
Namun mode ini dapat menjadi petaka di hadapan pemrogram jahat. Pointer
merupakan sarana luar biasa untuk pengaksesan tak diotorisasi. Dengan
peniadaan operasi pointer, Java dapat menjadi bahasa yang lebih aman.
25
2. Java memiliki beberapa pengaman terhadap applet. Untuk mencegah program
bertindak mengganggu media penyimpanan, maka applet tidak diperbolehkan
melakukan open, read ataupun write terhadap berkas secara sembarangan.
Karena Java applet dapat membuka jendela browser yang baru, maka jendela
mempunyai logo Java dan teks identifikasi terhadap jendela yang dibuka. Hal
ini mencegah jendela pop-up menipu sebagai permintaan keterangan
username dan password.
2.7.3 Pengenalan JDBC
Java Database Connectivity (JDBC) merupakan Application Programming
Interface (API), dalam paket java.sql.*, yang memungkinkan untuk mengakses
segala database menggunakan Java. Dari JDBC ini kemudian muncul konsep
konsep yang berdiri di atas JDBC, Akses database dengan Java dan JDBC Pada
dasarnya, untuk mengakses database dengan Java JDBC, diperlukan langkah
langkah berikut :
 Load Database Driver
 Buat koneksi
 Lakukan pemrosesan query
 Tutup koneksi
Berdasarkan langkah di atas maka kita memerlukan Database Driver dari masing masing
vendor database (misalnya untuk MySQL bisa diunduh dari http://mysql.com ) .
2.8
MySql Sebagai Database
MySql adalah sebuah Relational Database Management System
(RDBMS) yang berfungsi sebagai database server yang memiliki beberapa
keistimewaan yaitu : Portability, Open Source, Multiuser, Performance Tuning
yang tinggi, Column Types yang komplek, Command & Function yang
mendukung perintah SELECT dan WHERE secara penuh dalam query, Security,
Scalability, Connectivity, Interface serta struktur tabel yang lebih fleksibel.
Kehandalan suatu sistem database (DBMS) dapat diketahui dari cara kerja
optimizer-nya dalam melakukan proses perintah-perintah SQL yang dibuat oleh
26
user maupun program-program aplikasinya. MySql dapat dikatakan lebih unggul
dibandingkan dengan database server lainnya dalam query data. Hal ini terbukti
untuk query yang dilakukan oleh single user, kecepatan query MySql bisa sepuluh
kali lebih cepat dari PostgreSQL dan lima kali lebih cepat jika dibandingkan
Interbase.
27
3.4
Perancangan dan Pembuatan Aplikasi Layanan Polling SMS
Pada tahap perancangan aplikasi ini, akan dijelaskan mengenai struktur
tabel serta beberapa algoritma program yang digambarkan dalam bentuk flowchart
program.
3.4.1
Skema database
Aplikasi ini menggunakan 5 buah tabel yang digunakan, yaitu:
a. Tabel SMS Masuk
Membuat tabel SMS Masuk pada jendela polling maka langkah selanjutnya
adalah memasukan beberapa perintah SQL ke dalam layar SQL pada NetBean
dengan :
table ( klik kanan)  execute command  memasukkan command SQL
sebagai berikut :
CREATE TABLE SMS_MASUK (id_masuk int(11) NOT NULL
auto_increment, no_telepon_masuk varchar(100) NOT NULL default '',
tanggal_masuk varchar(100) NOT NULL default '', jam_masuk
varchar(100) NOT NULL default '', isi_pesan_masuk varchar(160)
NOT NULL default '', status_masuk varchar(100) NOT NULL default
'',
PRIMARY
KEY
(id_masuk))
ENGINE=MyISAM
DEFAULT
CHARSET=latin1;
perintah tersebut adalah untuk membuat tabel data_sms_masuk dengan format
sebagai berikut;
Tabel 3.1 SMS Masuk
No.Telp. Masuk
Tanggal
Jam Masuk
Masuk
Isi Pesan Masuk
Status
Masuk
Dimana primary key adalah Id_masuk, semua format kolom berupa varchar.
31
Gambar 3.1 Tabel SMS Masuk pada Data Base
b. Tabel Data Base Polling
Membuka MySQL Command Line Client , untuk membuat database yang
akan digunakan dalam aplikasi ini, dengan nama polling seperti yang terlihat pada
Gambar dibawah ini:
Gambar 3.2 Membuat data base polling pada MySQL
32
MySQL Command Client ini hanya digunakan untuk membuat nama database,
untuk selanjutnya manambah tabel ke dalam database ini, menggunakan NetBean
IDE 6.0, Adapun langkah – langkahnya adalah sebagai berikut:
Gambar 3.3 Data Base Polling
SERVICE  Database (klik kanan)  new connection New Database
Connection seperti yang terlihat pada gambar diatas.
c. Tabel Data Pertanyaan Polling
Untuk membuat dan menambah tabel data pertanyaan polling pada data base
polling ini , maka langkah selanjutnya adalah memasukan beberapa perintah SQL
ke dalam layar SQL pada NetBean dengan ;
table ( klik kanan)  execute command  memasukkan command SQL
sebagai berikut :
CREATE
TABLE
data_pertanyaan_polling
(kode_pertanyaan
varchar(100) NOT NULL default '', isi_pertanyaan varchar(100) NOT
NULL default '', pilihan_a varchar(100) NOT NULL default '',pilihan_b
varchar(100) NOT NULL default'', pilihan_c varchar(100) NOT NULL
33
default'', PRIMARY KEY (kode_pertanyaan)) ENGINE=MyISAM
DEFAULT CHARSET=latin1;
Gambar 3.4 Tabel Data Pertanyaan Polling
perintah tersebut adalah untuk membuat tabel data_pertanyaan_polling dengan
format sebagai berikut;
Tabel 3.2 Data Pertanyaan Polling
Kode
Dimana
Isi Pertanyaan
Pilihan A
primary key adalah kode_pertanyaan,
Pilihan B
Pilihan C
semua format kolom berupa
varchar.
d. Tabel Data Hasil Polling
Untuk membuat dan menambah tabel hasil polling pada data base polling ini ,
maka langkah selanjutnya adalah memasukan beberapa perintah SQL ke dalam
layar SQL pada NetBean dengan ;
34
Gambar 3.5 Tabel Data Hasil Polling
table ( klik kanan)  execute command  memasukkan command SQL
sebagai berikut :
CREATE TABLE data_hasil_polling (no_urut int(11) NOT NULL
auto_increment,kode_pertanyaan varchar(100) NOT NULL default '',
pilihan varchar(100) NOT NULL default
varchar(100)
NOT
NULL
default'',
'',no_telepon_pengirim
PRIMARY
KEY
(no_urut))
ENGINE=MyISAM DEFAULT CHARSET=latin1;
perintah tersebut adalah untuk membuat tabel data_hasil_polling dengan format
sebagai berikut;
Tabel 3.3 Data Hasil Polling
Kode
Pilihan
No. Telp Pengirim
Dimana primary key adalah no_urut, semua format kolom berupa varchar.
35
e. Tabel SMS Keluar
Membuat tabel SMS keluar pada jendela polling maka langkah selanjutnya
adalah memasukan beberapa perintah SQL ke dalam layar SQL pada NetBean
dengan :
table ( klik kanan)  execute command  memasukkan command SQL
sebagai berikut :
CREATE TABLE SMS_KELUAR (id_keluar int(11) NOT NULL
auto_increment, no_telepon_keluar varchar(100) NOT NULL default '',
tanggal_keluar varchar(100) NOT NULL default '', jam_keluar
varchar(100) NOT NULL default '', isi_pesan_keluar varchar(160) NOT
NULL default '', status_keluar varchar(100) NOT NULL default '',
PRIMARY
KEY
(id_keluar))
ENGINE=MyISAM
DEFAULT
CHARSET=latin1;
perintah tersebut adalah untuk membuat tabel data_sms_keluar dengan format
sebagai berikut;
Tabel 3.4 SMS Keluar
No.Telp. Keluar
Tanggal
Jam Keluar
Keluar
Isi Pesan Keluar
Status
Keluar
Dimana primary key adalah Id_keluar, semua format kolom berupa varchar.
36
Gambar 3.6 Tabel SMS Keluar
3.4.2
Flowchart program
Algoritma program dalam aplikasi ini akan dijelaskan dalam bentuk
flowchart. Beberapa flowchart dari fungsi-fugsi penting yang digunakan adalah
sebagai berikut :
3.4.2.1 Flowchart program untuk Proses Pendukung Aplikasi Polling SMS
Flowchart program pada aplikasi Polling SMS terdiri dari berbagai proses
didalamnya yang mendukung aplikasi ini, tapi dalam hal ini ada beberapa proses
yang diambil pada aplikasi ini dengan fungsi-fungsi tertentu. Beberapa proses
tersebut yang dijelaskan dalam bentuk flowchart adalah sebagai berikut:
1. Flowchart private void koneksiDatabase()
37
START
boolean driver = false




Class.forName(this.driverJDBC)
tulis_proses("Mencoba Loading Driver JDBC")
tulis_proses(this.driverJDBC)
driver = true
Exception
try
catch (ClassNotFoundException not)
SKIP BODY
SmitDev.SmsServer.Server.proses_Gagal("Sms Server Error", "Tidak Menemukan Driver -- " +
this.driverJDBC +"\n" + not.getMessage())
tulis_proses("Tidak Menemukan Driver -- " + this.driverJDBC + "\n"+not.getMessage())
driver == true


tulis_proses("Loading Driver JDBC Sukses")
tulis_proses("Mencoba melakukan sambungan dengan Database Server")




tulis_proses(url)
koneksi = java.sql.DriverManager.getConnection(url, user, password)
tulis_proses("Koneksi Database Server Sukses")
koneksiPerangkat()
Exception
try
SKIP BODY
catch (java.sql.SQLException sqln)


SmitDev.SmsServer.Server.proses_Gagal("Sms Server Error", "Gagal Koneksi Database -- " + sqln.getMessage())
tulis_proses("Gagal Koneksi Database -- " + sqln.getMessage())
END
38
2. Flowchart untuk koneksi perangkat (private void koneksiPerangkat())
START
SmitDev.SmsServer.Server.koneksiTerminal
(nilaiSerialPort, nilaiBitPerSecond, nilaiDataBits, nilaiParity, nilaiStopBit, nilaiFlowControl)
Exception
try
SKIP BODY
catch (java.util.TooManyListenersException tmle)
System.out.print(tmle.getMessage())







SmitDev.SmsServer.Server.kirimAT("ATE1" + "\15", 1000)
SmitDev.SmsServer.Server.kirimAT("AT+CNMI=1,1,2,2,1" + "\15",
1250)
SmitDev.SmsServer.Server.kirimAT("AT+CGMI" + "\15", 1000)
SmitDev.SmsServer.Server.kirimAT("AT+CGMM" + "\15", 1000)
SmitDev.SmsServer.Server.kirimAT("AT+CGSN" + "\15", 1000)
SmitDev.SmsServer.Server.kirimAT("AT+COPS?" + "\15", 1000)
SmitDev.SmsServer.Server.kirimAT("ATH0" + "\15", 500)
END
39
3. Flowchart public void inputDataTabelSmsMasuk(String notlp, String pesan)
START





String notlp
String pesan
getWaktu()
String tanggalHari = tanggal + "-" + bulan + "-" + tahun
String jamHari = jam + ":" + menit + ":" + detik
java.sql.PreparedStatement pStatement = koneksi.prepareStatement("Insert Into
SMS_KELUAR(NO_TELEPON_KELUAR,ISI_PESAN_KELUAR,STATUS_KELUAR,TANGGAL_KELUAR,
JAM_KELUAR) Values (?,?,?,?,?)")
Exception e
try
SKIP BODY







pStatement.setString(1, notlp)
pStatement.setString(2, pesan)
pStatement.setString(3, "WAIT")
pStatement.setString(4,
tanggalHari)
pStatement.setString(5, jamHari)
pStatement.executeUpdate()
statusInputSmsKeluar = true
Exception ei
Catch(Exception e)
try
catch (Exception ei)
SKIP BODY
pStatement.close()
END
40
4. Flowchart private void terimaResponAT(String buffer)
START
String buffer




String tanggal_sms = ""
String jam_sms = ""
String tlp_sms = ""
String isi_sms = ""
java.util.StringTokenizer st = new java.util.StringTokenizer(buffer, "\r\n")
st.hasMoreTokens()
false
true


merek
false
seri
true
false
imei
respons.starts
With
("+COPS:")



nilaiIMEI = respons
imei = false
false
respons.starts
With
("AT+CGSN")
true
true
seri = true
imei = true
41
respons.starts
With
("ATH0")
true
java.util.regex.Pattern pattern =
java.util.regex.Pattern.compile(",")
String[] hasil = pattern.split(respons.trim())
nilaiOperator = hasil[2].trim()
false
false
true
true
true
respons.starts
With
("AT+CGMM")
false
nilaiSeri = respons
seri = false
respons.starts
With
("AT+CGMI")
merek = true
C
true
nilaiMerek = respons
merek = false
false
respons = st.nextToken()
tulis_proses(respons)
false
Sedang terhubung
respons.starts
With
("+CMGR:")
true
bacaSMS = true
bacaSMS
A
B
respons.starts
With("+CMTI:")
false
true







java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(":")
String[] hasil = pattern.split(respons.trim())
pattern = java.util.regex.Pattern.compile(",")
hasil = pattern.split(hasil[1].trim())
Index = Integer.parseInt(hasil[1].trim())
SmitDev.SmsServer.Server.kirimAT("AT+CPMS=" + hasil[0].trim() + "\15", 1250)
SmitDev.SmsServer.Server.kirimAT("AT+CMGR=" + Index + "\15", 1250)
false
(respons.starts
With("+CMGS:")
true



tulis_proses("Pesan Berhasil Dikirim")
new prosesDatabaseSmsServer(koneksi).updateStatusData(id_Sms_Kirim, “SEND")
this.thKirim.resume()
respons.startsWith
("+CMS ERROR:")
true



tulis_proses("Pesan GAGAL Dikirim")
new prosesDatabaseSmsServer(koneksi).updateStatusData(id_Sms_Kirim, "NO")
this.thKirim.resume()
st.hasMoreTokens()
false
END
42
true
C
A







SmitDev.SmsServer.Server.terimaSMS(respons.trim()
id_sms = String.valueOf(Index)
tlp_sms = SmitDev.SmsServer.Server.noTlpPengirim
isi_sms = SmitDev.SmsServer.Server.isiPesanTerima
new prosesDatabaseSmsServer(koneksi).inputDataTabelSmsMasuk(tlp_sms, isi_sms)
SmitDev.SmsServer.Server.kirimAT("AT+CMGD=" + id_sms + "\15", 1250)
bacaSMS = false
Exception e
try
true
SKIP BODY
catch (Exception e)
e.getMessage()
B
5. Flowchart public void tulis_proses(String data)
START
String data










getWaktu()
String waktu = jam + ":" + menit + ":" + detik
String ddmmyy = tanggal + bulan + tahun
data = "\"" + waktu + "\", \"" + data + "\"\015"
byte b[] = data.getBytes()
java.io.File outputx = new java.io.File(ddmmyy + ".SmitDevSmsServer")
java.io.RandomAccessFile random = new java.io.RandomAccessFile(outputx, "rw")
random.seek(outputx.length())
random.write(b)
random.close()
IOException ex
try
SKIP BODY
catch (java.io.IOException ex)
System.out.println(ex)
END
43
6. Flowchart private void tampilTabelSmsMasuk()
START
int row = tabSMSMasuk.getRowCount()
int i = 0
false
i < row
true
tabSMSMasuk.removeRow(0)
i++
getWaktu()
String tanggal_hari_ini = tanggal+"-"+bulan+"-"+tahun;
String sql = "SELECT COUNT(id_MASUK) as jml FROM
SMS_MASUK WHERE tanggal_MASUK = '"+tanggal_hari_ini+"'"
String sql2 = "SELECT * FROM SMS_MASUK WHERE tanggal_MASUK =
'"+tanggal_hari_ini+"' ORDER BY TANGGAL_MASUK DESC , JAM_MASUK
DESC"
String sql3 ="SELECT COUNT(id_MASUK) as jml2 FROM SMS_MASUK WHERE
status_MASUK = 'WAIT' AND TANGGAL_MASUK = '"+tanggal_hari_ini+"'"




String jml_all = ""
String jml_antri = ""
java.sql.Statement stat = koneksi.createStatement()
java.sql.Statement statu = koneksi.createStatement()
Exception
try
C
java.sql.ResultSet rSet = stat.executeQuery(sql)
A
44
A
java.sql.ResultSet rSet = stat.executeQuery(sql)
Exception
try
D
(rSet.next())


jml_all = rSet.getString("jml")
this.labelJumlahMasuk.setText(jml_all)
(rSet.next())
false
true
java.sql.ResultSet rSt = stat.executeQuery(sql2)
rSt.next()
false
true






String no = rSt.getString("NO_TELEPON_MASUK")
String psn = rSt.getString("ISI_PESAN_MASUK")
String sts = rSt.getString("STATUS_MASUK")
String time = rSt.getString("JAM_MASUK")
String tg = rSt.getString("TANGGAL_MASUK")
String nama = ""
String sqlKontak = "SELECT * FROM data_buku_telepon
WHERE nomor_telepon = '"+no+"'"
java.sql.ResultSet rStN = statu.executeQuery(sqlKontak)
false
rStN.next()
true
nama = rStN.getString("NAMA_KONTAK")
Object[] data = {no, nama, tg, time, psn, sts}


tabSMSMasuk.addRow(data);
int adi = this.tabelSmsMasukHariIni.getRowCount()
rSt.next()
true
B
45
false
B
java.sql.ResultSet rSet2 = stat.executeQuery(sql3)
rSet2.next()


jml_antri = rSet2.getString("jml2")
this.labelAntriProses.setText(jml_antri)
this.labelSuksesProses.setText
(String.valueOf(Integer.parseInt(jml_all) Integer.parseInt(jml_antri)))
rSet2.next()
D
C
tulis_proses(e.getMessage())
System.out.println(e.getMessage() + " tampil_kirim")
END
46
7. Proses Pemeriksaan Perubahan dan Status Data SMS Masuk
START
getWaktu()
String tanggal_hari_ini = tanggal+""+bulan+"-"+tahun
Exception
koneksi.isClosed()
try
A
catch (Exception ex1)
END
47
B
C
D
A
 String sqljml = "SELECT COUNT(id_masuk) as jmlnya FROM
SMS_MASUK WHERE tanggal_masuk = '"+tanggal_hari_ini+"'"
 java.sql.PreparedStatement pStatement = koneksi.prepareStatement(sqljml)
 java.sql.ResultSet rs = pStatement.executeQuery()
Exception
catch (java.sql.SQLException ex)
try
rs.next()
String jm2 = rs.getString("jmlnya")
(jm2.equalsIgnoreCase
(this.labelJumlahMasu
k.getText()))
true
tampilTabelSmsMasuk()
rs.next()
rs.close()
tulis_proses(ex.getMessage())
END
(Flowchart periksa data bagian A.)
48
B



String sqljml = "SELECT COUNT(id_masuk) as jmlnya FROM SMS_MASUK WHERE
status_masuk = 'ok' AND tanggal_masuk = '"+tanggal_hari_ini+"'";
java.sql.PreparedStatement pStatement = koneksi.prepareStatement(sqljml);
java.sql.ResultSet rs = pStatement.executeQuery();
Exception
try
rs.next()
String jm2 = rs.getString("jmlnya")
catch (java.sql.SQLException
ex)
jm2.equalsIgnoreCase
(this.labelSuksesPros
es.getText())
tampilTabelSmsMasuk()
rs.next()
rs.close()
tulis_proses(ex.getMessage())
END
(Flowchart periksa data bagian B)
49
C


String sql ="Select * From SMS_MASUK Where STATUS_MASUK = 'WAIT'"
java.sql.PreparedStatement pStatement = koneksi.prepareStatement(sql)
Exception
try
java.sql.ResultSet rSet = pStatement.executeQuery()
try
Exception
rSet.next()




String dataId = rSet.getString("ID_MASUK")
String dataNotlp = rSet.getString("NO_TELEPON_MASUK")
String dataPesan = rSet.getString("ISI_PESAN_MASUK")
new prosesDatabaseSmsServer(koneksi).prosesTabelMasuk(dataId, dataNotlp, dataPesan)
rSet.next()
pStatement.close()
catch (Exception e)
rSet.close()
END
(Flowchart periksa data bagian C)
50
catch (Exception ie)
D


String sql ="Select * From SMS_MASUK Where STATUS_MASUK = 'WAIT'"
java.sql.PreparedStatement pStatement = koneksi.prepareStatement(sql)
try
Exception
java.sql.ResultSet rSet = pStatement.executeQuery()
Exception
try
rSet.next()




catch (Exception ie)
String dataId = rSet.getString("ID_MASUK")
String dataNotlp = rSet.getString("NO_TELEPON_MASUK")
String dataPesan = rSet.getString("ISI_PESAN_MASUK")
new prosesDatabaseSmsServer(koneksi).prosesTabelMasuk(dataId, dataNotlp, dataPesan)


pStatement.close()
rSet.close()
END
Flowcart periksa data bagian D
51
catch (Exception e)
8. Flowchart private void jBSimpanDataActionPerformed
Start
String kode = dataKodePertanyaan.getText();
String pertanyaan = dataIsiPertanyaanPolling.getText();
String pilih_a = dataPilihan_A.getText();
String pilih_b = dataPilihan_B.getText();
String pilih_c = dataPilihan_C.getText();
String sql = "INSERT INTO
data_Pertanyaan_Polling(kode_Pertanyaan,
isi_Pertanyaan, pilihan_a, pilihan_b,
pilihan_c) VALUES(?,?,?,?,?)";
(kode.length()==0 || pertanyaan.length()==0 ||
pilih_a.length()==0 || pilih_b.length()==0
|| pilih_c.length()==0)
SmitDev.SmsServer.Server.proses_Gagal("Proses Simpan Data Gagal !!",
"Terdapat Data yang Belum Dimasukkan");
try
java.sql.PreparedStatement stat =
koneksi.prepareStatement(sql);
catch (java.sql.SQLException s)
try
catch (Exception se)
stat.setString(1, kode);
stat.setString(2, pertanyaan);
stat.setString(3, pilih_a);
stat.setString(4, pilih_b);
stat.setString(5, pilih_c);
stat.executeUpdate();
tampilTabelDataPertanyaan();
new jendelaTabelInputPertanyaan(koneksi).setEnabled(true);
SmitDev.SmsServer.Server.proses_Gagal("Gagal
Menyimpan Data Pertanyaan", s.getMessage());
SmitDev.SmsServer.Server.proses_Gagal("Gagal
Menyimpan Data Pertanyaan", se.getMessage());
javax.swing.JOptionPane.showMessageDialog(null,
" Data Pertanyaan Berhasil Disimpan!!");
End
52
9. Flowchart private void jBUpdateDataActionPerformed
Start
String kode = dataKodePertanyaan.getText();
String pertanyaan = dataIsiPertanyaanPolling.getText();
String pilih_a = dataPilihan_A.getText();
String pilih_b = dataPilihan_B.getText();
String pilih_c = dataPilihan_C.getText();
boolean hapus = this.cekHapusHasilPolling.isSelected();
(pertanyaan.length()==0 ||
pilih_a.length()==0 ||
pilih_b.length()==0 ||
pilih_c.length()==0)
String sql = "UPDATE data_Pertanyaan_polling SET
isi_Pertanyaan = ?, pilihan_a = ?, pilihan_b = ?,
pilihan_c = ? WHERE kode_Pertanyaan = ?";
java.sql.PreparedStatement stat =
koneksi.prepareStatement(sql);
try
Z
stat.setString(1, pertanyaan);
stat.setString(2, pilih_a);
stat.setString(3, pilih_b);
stat.setString(4, pilih_c);
stat.setString(5, kode);
stat.executeUpdate();
tampilTabelDataPertanyaan();
(hapus)
int hapus2 =
javax.swing.JOptionPane.showConfirmDialog(null,
"Pertanyaan dengan kode : "+kode+" Telah dirubah"+
"\nAnda Ingin Menghapus Semua
Hasil Polling dari Kode Pertanyaan Tersebut ???",
"Konfirmasi Hapus Data",
javax.swing.JOptionPane.YES_NO_OPTION);
A
(hapus2 == 0)
String sql2 = "DELETE FROM data_hasil_polling
WHERE kode_pertanyaan = ?";
java.sql.PreparedStatement stat2 = koneksi.prepareStatement(sql2);
try
B
S
53
C
B
C
S
(java.sql.SQLException s)
catch (Exception se)
stat2.setString(1, kode);
stat2.executeUpdate();
SmitDev.SmsServer.Server.proses_
Gagal("Gagal Menghapus Data",
s.getMessage());
SmitDev.SmsServer.Server.proses_Gagal("Gagal
Menghapus Data", se.getMessage());
A
new jendelaTabelInputPertanyaan(koneksi).setEnabled(true);
catch (Exception se)
catch (java.sql.SQLException s)
Z
SmitDev.SmsServer.Server.proses_Gagal("
Gagal Merubah Data Pertanyaan",
s.getMessage());
SmitDev.SmsServer.Server.proses_Gagal("
Gagal Merubah Data Pertanyaan",
se.getMessage());
End
54
10. Flowchart private void cariHasilPolling
Start
String hasilAll = "0";
String hasil_A = "0";
String hasil_B = "0";
String hasil_C = "0";
double persen_A = 0;
double persen_B = 0;
double persen_C = 0;
int valuePersen_A = 0;
int valuePersen_B = 0;
int valuePersen_C = 0;
try
String sqlAll = "SELECT COUNT(kode_pertanyaan) as jmlSMS FROM
data_hasil_polling WHERE kode_pertanyaan = '"+kode+"'";
java.sql.Statement statAll = koneksi.createStatement();
java.sql.ResultSet rSetAll = statAll.executeQuery(sqlAll);
(rSetAll.next())
hasilAll = rSetAll.getString("jmlSMS");
String sqlAll = "SELECT COUNT(kode_pertanyaan) as jmlSMS FROM
data_hasil_polling WHERE kode_pertanyaan = '"+kode+"'";
java.sql.Statement statAll = koneksi.createStatement();
java.sql.ResultSet rSetAll = statAll.executeQuery(sqlAll);
String sqlPilihA = "SELECT COUNT(pilihan) as jmlPilihanA FROM
data_hasil_polling WHERE kode_pertanyaan = '"+kode+"' AND pilihan = 'A'";
java.sql.Statement statA = koneksi.createStatement();
java.sql.ResultSet rSetA = statA.executeQuery(sqlPilihA);
(rSetA.next())
hasil_A = rSetA.getString("jmlPilihanA");
String sqlPilihB = "SELECT COUNT(pilihan) as jmlPilihanB FROM
data_hasil_polling WHERE kode_pertanyaan = '"+kode+"' AND pilihan = 'B'";
java.sql.Statement statB = koneksi.createStatement();
java.sql.ResultSet rSetB = statB.executeQuery(sqlPilihB);
(rSetB.next()
S
55
Z
S
hasil_B = rSetB.getString("jmlPilihanB");
String sqlPilihC = "SELECT COUNT(pilihan) as jmlPilihanC FROM data_hasil_polling
WHERE kode_pertanyaan = '"+kode+"' AND pilihan = 'C'";
java.sql.Statement statC = koneksi.createStatement();
java.sql.ResultSet rSetC = statC.executeQuery(sqlPilihC);
(rSetC.next())
hasil_C = rSetC.getString("jmlPilihanC");
(!hasil_A.equalsIgnoreCase("0"))
(!hasil_B.equalsIgnoreCase("0"))
(!hasil_C.equalsIgnoreCase("0"))
persen_A = 100/
(Double.parseDouble(hasilAll)/
Double.parseDouble(hasil_A));
java.util.StringTokenizer token = new
java.util.StringTokenizer(String.valueOf(
persen_A), ".");
valuePersen_A =
Integer.parseInt(token.nextToken());
persen_B = 100/
(Double.parseDouble(hasilAll)/
Double.parseDouble(hasil_B));
java.util.StringTokenizer token = new
java.util.StringTokenizer(String.valueOf(
persen_B), ".");
valuePersen_B =
Integer.parseInt(token.nextToken());
persen_C = 100/
(Double.parseDouble(hasilAll)/
Double.parseDouble(hasil_C));
java.util.StringTokenizer token = new
java.util.StringTokenizer(String.valueOf(
persen_C), ".");
valuePersen_C =
Integer.parseInt(token.nextToken());
this.persenPilihanA.setText("("+persen_A+"%)");
this.persenPilihanB.setText("("+persen_B+"%)");
this.persenPilihanC.setText("("+persen_C+"%)");
this.barPilihanA.setValue(valuePersen_A);
this.barPilihanB.setValue(valuePersen_B);
this.barPilihanC.setValue(valuePersen_C);
this.jumlahSMS.setText(hasilAll);
this.jumlahPilihanA.setText(hasil_A);
this.jumlahPilihanB.setText(hasil_B);
this.jumlahPilihanC.setText(hasil_C);
Z
catch(java.sql.SQLException e)
System.out.println(e.getMessage());
End
56
11. public prosesSmsPolling(java.sql.Connection koneksi, String notlp, String
kode2, String kode3)
Start
String sql = "INSERT INTO data_hasil_Polling(kode_Pertanyaan, pilihan,
no_telepon_pengirim) VALUES(?,?,?)";
java.sql.PreparedStatement stat = koneksi.prepareStatement(sql);
catch (Exception se)
try
stat.setString(1, kode2);
stat.setString(2, kode3);
stat.setString(3, notlp);
stat.executeUpdate();
try
catch (java.sql.SQLException s)
System.out.println(s.getMessage());
System.out.println(se.getMessage());
End
57
12. public void prosesTabelMasuk(String id, String notlp, String pesan)
Start
String kode_1_salah = null;
String kode_1_format = null;
String pesanSalahKode_1 = null;
String[] hasil;
updateStatusData(id, "OK");
java.util.StringTokenizer st = new
java.util.StringTokenizer(pesan);
int i = 0;
String awal = "";
StringBuffer kode = new StringBuffer(200);
String kode1 = "";
String kode2 = "";
(st.hasMoreTokens())
YES
awal = st.nextToken();
i = i + 1;
(i == 1)
NO
java.util.regex.Pattern pattern =
java.util.regex.Pattern.compile(" ");
hasil = pattern.split(pesan.trim());
YES
kode1 = awal.toUpperCase();
kode2 = "null";
kode.append("null");
(i == 3)
NO
YES
kode1 = hasil[0].trim().toString().toUpperCase();
kode2 = hasil[1].trim().toString().toUpperCase();
for (int b = 2; b < i; b++) {
String kod = hasil[b].toString().toUpperCase();
kode.append(kod);
kode1 = hasil[0].trim().toString().toUpperCase();
kode2 = hasil[1].trim().toString().toUpperCase();
String kod = hasil[2].toString().toUpperCase();
kode.append(kod);
String kode3 = kode.toString();
kode3 = kode3.replaceAll(" ", "");
System.out.println(notlp+" "+kode1+" "+kode2+" "+kode3);
NO
(kode1.equalsIgnoreCase("POLLING"))
kode_1_salah = "Kode1 yang Anda Masukkan Salah" + "\nkode : " + kode1 +
"\nTidak terdaftar";
kode_1_format =
"\nTerima Kasih\nSmitDev SMS Server";
pesanSalahKode_1 = kode_1_salah + kode_1_format;
YES
new prosesSmsPolling(koneksi, notlp, kode2, kode3);
End
58
3.4.2.2 Proses-proses yang Dilakukan pada Aplikasi sesuai dengan Flowchart
Program
Proses dari alur algoritma flowchart diatas dapat dijelaskan dengan prosesproses yang dilakukan pada aplikasi ini seperti dibawah ini:
1. Koneksi dengan Database
Pada saat tampilan GUI dari jendela utama SMS terbuka, belum terjadi
koneksi antara SMS Server dengan perangkat dan database. Untuk itu pada
jendela utama SMS sengaja diberi fasilitas submenu Koneksi Terminal. Pada
proses penyambungan terminal, terdapat dua penyambungan yang dilakukan oleh
SMS Server, yaitu penyambungan dengan database dan perangkat. Alur dari
proses koneksi terminal adalah pertama-tama SMS Server mencoba untuk
melakukan penyambungan dengan database itu berhasil, maka proses selanjutnya
adalah memanggil metode untuk melakukan penyambungan dengan perangkat.
Proses yang dilakukan pada metode ini adalah sebagai berikut:
a.
Memanggil driver dari MySQL Database Server.
b.
Apabila proses pemanggilan driver berhasil, maka dilanjutkan dengan
proses koneksi dengan database. Parameter nilai URL, pengguna, dan
password yang digunakan adalah nilai-nilai yang diperoleh dari jendela
Pengaturan Terminal.
c.
Apabila proses koneksi dengan database berhasil dilakukan, maka proses
selanjutnya adalah memanggil metode koneksiPerangkat() yang berfungsi
untuk melakukan penyambungan dengan perangkat.
2. Proses Koneksi dengan Perangkat
Setelah proses penyambungan database berhasil dilakukan, maka proses
koneksi selanjutnya adalah dengan perangkat. Proses koneksi antara perangkat
dengan terminal dilakukan oleh metode koneksiTerminal yang terdapat pada paket
SmitDev SMS Server (kelas SmitDev.SmServer.Server). Adapun proses yang
dilakukan pada metode ini adalah sebagai berikut:
a. ATE1, untuk mengatur ECHO sehingga perintah AT yang dikirim atau
yang diterima dapat ditampilkan.
59
b. AT+CNMI=1,1,2,2,1, untuk mendeteksi pesan SMS baru yang diterima
atau masuk.
c. AT+CGMI, untuk meminta nilai merek dari perangkat yang digunakan
d. AT+CGMM, untuk meminta nilai seri atau tipe dari perangkat yang
digunakan.
e. AT+CGSN, untuk meminta IMEI dari perangkat yang digunakan.
f. AT+COPS?, untuk meminta provider dari SIM Card yang digunakan.
g. ATH0, untuk mencoba kembali status koneksi perangkat dengan terminal.
3. Proses Input Data Tabel SMS masuk
Dalam proses penyimpanan SMS masuk ke tabel sms_masuk yang
terdapat pada basis data, untuk itu dibutuhkan suatu metode dalam proses tersebut.
Proses yang dilakukan pada metode ini adalah sebagai berikut:
a. Mengambil nilai waktu sekarang dengan cara memanggil metode
getWaktu().
b. Menyimpan data SMS baru yang masuk dengan nilai masukkan adalah
nomor telepon pengirim dan isi pesan SMS masuk. Status data dari SMS
baru yang masuk adalah WAIT.
c. Data-data yang disimpan pada tabel sms_masuk adalah nomor telepon
pengirim, tanggal SMS masuk, jam SMS masuk, isi pesan SMS masuk,
dan status SMS masuk.
4. Proses Terima Respon AT dari Terminal
Metode metode ini adalah menerima respons dari perintah AT yang
dikirimkan ke terminal. Adapun proses yang dilakukan pada metode ini adalah
sebagai berikut:
a. Mengambil nilai input Stream dari variabel Serial Port
b. Apabila terdapat nilai respons dari terminal, maka proses yang dilakukan
adalah memisahkan respons – respons tersebut dengan parameter pemisah
adalah Carriage Return(13) dan Line Feed (10).
c. Selanjutnya meberikan nilai respon tersebut ke metode terima ResponAT
untuk diproses lebih lanjut.
60
d. Akhirnya nilai bufferOffset kembali menjadi 0 untuk memungkinkan
aplikasi SMS Server untuk kembali menerima respons dari terminal.
Serta dilakukan juga suatu proses penanganan Respon AT yang Diterima dari
Terminal. Metode ini dibuat untuk menindaklanjuti respon serial port yang telah
diproses oleh metode serialEvent(). Metode ini akan melakukan proses – proses
berdasarkan nilai respon yang diterima. Misalnya respon yang diterima dengan
karakter +CNMI , ini menandakan bahwa ada pesan yang masuk sehingga harus
dilakukan pembacaan kemudian dilakukan proses – proses selanjutnya. Adapun
proses yang dilakukan pada metode ini adalah sebagai berikut;
a. Memisahkan input buffer yang diterima menjadi beberapa bagian token,
dengan parameter pemisah CRLF(”r\n”)
b. Mengambil nilai token tersebut , kemudian berikan nilai token
yang
didapat ke variabel respons. Proses ini dilakukan secara terus – menerus
sampai tidak ada lagi token yang terdapat pada buffer.
c. Jika nilai respon yang didapat dari terminal diawali dengan karakter
”+CMTI ”, ini menandakan bahwa ada pesan baru yang masuk Unuk intu
dilakukan pengambilan nilai indeks pesan memory tempat pesan
tersimpan, dengan cara mengirim perintah ”AT+CPMS =” + memory Dan
pembacaan pesan berdasarkan nilai index yang didapat dengan
mengirimkan perintah ”AT+CMGR="+index.
d. Jika respon terminal yang didapat diawali dengan karakter ” +CMGR” , ini
merupakan hasil respon dari pengiriman perintah ”AT+CMGR=<index>”
yang menandakan bahwa terminal telah melakukan pembacaan terhadap
pesan yang masuk. Selanjutnya membrikan nilai bacaSMS menjadi true
yang menunjukkan bahwa pesan yang dibaca siap untuk diproses lebih
lanjut.
e. Jika nilai bacaSMS = true lakukan perubahan pesan SMS dari format
PDU menjadi format teks yaitu dengan cara memberikan nilai respons ke
metode terimaSMS yang terdapat pada kelas SmitDev.SmsServer.Server,
mengambil nilai nomor telepon pengirim, dan isi pesan dari SMS yang
diterima.
61
f. Jika respon terminal yang didapat diawali dengan karakter ”ATH0”, ini
menandakan bahwa SMS server telah berhasil terhubung dengan terminal
dan siap menerima AT command yang dikirim oleh aplikasi. Untuk itu
panggil metode sedang_Terhubung, untuk mengubah status SMS
Server dari belum terhubung menjadi sedang terhubung.
5. Proses Aktivitas Sistem ke File
Proses ini berfungsi untuk mencatat segala sesuatu yang dilakukan oleh
SMS Server yang dianggap penting ke dalam sebuah file. Langkah ini dilakukan
untuk mengetahui proses-proses yang dilakukan oleh SMS Server dan apabila
terdapat kesalahan yang terjadi pada SMS Server, maka kesalahan tersebut dapat
diketahui dan selanjutnya dapat ditindaklanjuti. Adapun proses yang dilakukan
pada metode ini adalah:
a. Mengambil nilai waktu yang digunakan sebagai nama file parameter data
didalam file.
b. Apabila file pada tanggal yang bersangkutan belum ada maka akan
membuat file baru berdasarkan tanggal yang didapat.
c. Selanjutnya menuliskan data ke dalam file yang diakhiri dengan menutup
akses file.
6. Proses Menampilkan Data Tabel SMS masuk ke Jendela Utama SMS
Server
Data-data tabel SMS masuk yang ditampilkan pada jendela utama Polling
SMS Server adalah hanya data-data SMS masuk pada hari yang bersangkutan atau
pada hari ini. Dengan kata lain, data-data SMS masuk yang akan ditampilkan
disaring berdasarkan tanggal dan diterimanya SMS tersebut sesuai dengan tanggal
pada hari ini. Dengan demikian, tidak semua data SMS masuk ditampilkan pada
jendela utama Polling SMS Server, tetapi hanya data-data SMS masuk yang
diterima pada hari ini. Secara garis besar tiga buah proses yang dilakukan pada
metode ini, yaitu proses menghapus daftar data-data yang ada pada tabel di
jendela utama Polling SMS Server, proses menampilkan data tabel SMS masuk
yang ada pada database ke jendela utama Polling SMS Server, dan proses untuk
62
menampilkan nilai-nilai traffic SMS masuk berupa banyaknya SMS yang
diterima, antrian SMS untuk diproses, serta SMS yang sukses diproses. Adapun
proses yang dilakukan pada metode iniadalah sebagai berikut:
a. Mengambil banyaknya baris yang ada pada tabel.
b. Melakukan pengulangan sebanyak nilai baris yang diperoleh dan
menghapus baris tersebut.
c. Memanggil metode getWaktu() untuk mengambil waktu sekarang.
d. Mengambil nilai banyaknya data SMS masuk pada database yang
masuk pada hari ini. Perintah SQL yang digunakan adalah “SELECT
COUNT(id) as jml FROM SMS_MASUK WHERE tanggal =
“”+tanggal_ hari_ ini+””. Nilai yang diperoleh selanjutnya ditampilkan
ke traffic SMS masuk hari ini.
e. Mengambil data-data SMS masuk yang ada pada database yang masuk
pada hari ini. Data-data tersebut selanjutnya ditampilkan pada tabel
SMS masuk hal ini di jendela utama SMS. Adapun nilai-nilai kolom
yang diambil adalah nomor telepon pengirim, tanggal terima, jam
terima, isi pesan yang diterima, dan status terima.
7. Proses Pemeriksaan Perubahan dan Status Data pesan Masuk
Metode ini melakukan proses untuk memeriksa perubahan banyaknya data
yang terdapat pada tabel SMS masuk di jendela SMS Server dengan tabel SMS
masuk di database, memeriksa status_masuk data SMS masuk yang bernilai
WAIT. Adapun urutan proses yang terjadi adalah:
a. Membandingkan banyaknya data yang terdapat pada tabel di jendela
SMS Server dengan data pada tabel SMS_MASUK di database,
apabila terjadi perbedaan ini menandakan ada pesan baru yang masuk
yang kemudian data – data tersebut ditampilkan ke tabel jendela SMS
Server, dengan cara memanggil metode tampilTabelSmsMasuk().
b. Mengambil nilai data pesan masuk yang memiliki status_masuk
adalah”WAIT”. Status ini berfungsi untuk mengindikasi ke SMS
Server untuk memproses pesan masuk tersebut .
63
8. Proses Menyimpan Data Pertanyaan Baru
Proses menyimpan data pertanyaan polling baru ke basis data dilakukan
pada saat tombol Simpan Data ditekan. Proses ini akan menyimpan data berupa
kode pertanyaan, pertanyaan polling, pilihan A, pilihan B, dan pilihan C yang
didapat dari komponen kotak teks ke dalam tabel data_pertanyaan_polling yang
ada di dalam basis data. Proses yang terjadi pada metode ini adalah sebagai
berikut:
a. Mengambil nilai kode pertanyaan, pertanyaan polling, pilihan A, pilihan
B, dan pilihan C.
b. Melakukan validasi terhadap nilai-nilai tersebut. Apabila salah satu
komponen
teks
belum
dimasukkan
atau
kosong,
maka
proses
penyimpanan tidak akan dilanjutkan dan menampilkan kotak dialog yang
berisi pesan “Proses Simpan Data Gagal!!!”, “Terdapat Data yang Belum
Dimasukkan.”
c. Sedangkan apabila semua data sudah dimasukkan atau diisi maka proses
yang dilakukan adalah menyimpan nilai-nilai tersebut kedalam tabel
data_pertanyaan_polling yang terdapat pada database.
d. Apabila proses penyimpanan berhasil dilakukan, dilanjutkan dengan
proses menampilkan data pertanyaan polling ke jendela input pertanyaan
dan tampilan jendela input data berpindah ke tampilan daftar pertanyaan
polling.
9. Proses Memperbarui Data pertanyaan Polling
Proses memperbarui data pertanyaan polling di basis data dilakukan pada
saat tombol Update Data ditekan. Proses ini akan mengubah atau memperbarui
data pertanyaan polling berupa isi pertanyaan polling, pilihan A, pilihan B, dan
pilihan C yang didapat dari komponen kotak teks berdasarkan kode pertanyaan.
Proses yang terjadi pada metode ini adalah sebagai berikut:
a. Mengambil nilai dari pertanyaan polling, pilihan A, pilihan B, dan pilihan
C.
b. Melakukan validasi terhadap nilai-nilai tersebut. Apabila salah satu
komponen teks belum dimasukkan atau masih kosong maka proses
64
memperbarui data tidak akan dilanjutkan dan menampilkan kotak dialog
yang berisikan pesan “Proses Rubah Data Gagal!!!”, “Terdapat Data yang
belum Dimasukkan”.
c. Sedangkan apabila semua data sudah dimasukkan atau diisi, maka proses
yang dilakukan adalah memperbarui atau mengubah data pertanyaan
polling dengan nilai-nilai tersebut ke dalam tabel data_pertanyaan_polling
yang terdapat pada basis data berdasarkan kode pertanyaan.
d. Pada tampilan memperbarui data pertanyaan polling, terdapat sebuah
komponen checkbox yang aktif. Fungsi dari komponen tersebut adalah
sebagai pilihan apakah data hasil polling dari kode pertanyaan yang akan
diubah yang telah ada pada tabel data_hasil_polling akan dihapus atau
tidak.
e. Apabila komponen checkbox dipilih, maka proses update data akan
dilanjutkan dengan proses penghapusan semua data hasil polling dari kode
pertanyaan tersebut, yang terdapat pada tabel data_hasil_polling.
f. Apabila proses update data berhasil dilakukan, maka selanjutnya adalah
mengubah tampilan jendela ke daftar pertanyaan polling.
10. Proses Mencari Data Hasil polling dari Pertanyaan yang dipilih
Fungsi dari proses ini adalah mencari dan mengambil hasil polling yang
telah dikirimkan oleh responden yang masuk ke data hasil polling. Proses ini
dilakukan apabila proses pencarian data pertanyaan berhasil dilakukan pada
langkah sebelumnya. Proses yang dilakukan pada metode ini adalah:
a. Mengambil nilai jumlah keseluruhan pesan polling SMS yang masuk
berdasarkan nilai kode pertanyaan yang telah ditentukan.
b. Mengambil nilai jawaban A, B, C dari kode pertanyaan tersebut.
c. Hasil dari nilai-nilai tersebut ditampilkan ke jendela hasil polling dan
dijadikan persentase untuk masing-masing jawaban tersebut.
d. Nilai persentase tersebut kemudian diimplementasikan ke komponen
”JprogressBar” dari masing-masing pilihan jawaban.
65
Download