Berikut ini penulis coba sajikan tutorial menerima dan membaca SMS menggunakan program Delphi. Proses penerimaan data SMS sebenarnya hanya berlangsung di modem. Program Delphi di sini hanya akan membaca data SMS dari modem. Ada dua macam teknik membaca SMS dari modem, yakni polling dan live/real time. Cara polling dilakukan tanpa mengecek ada SMS yang masuk atau tidak dan dilakukan berdasarkan interval waktu tertentu, sedakan cara ‘live/real time’ dilakukan setelah program Delphi mengetahui ada indikasi SMS masuk yang dikirim oleh modem. Jadi tugas program di sini adalah mengecek ada indikasi SMS masuk atau tidak, kemudian langsung membaca isi SMS setelah indikator terbaca. Diagram Alir di bawah ini mungkin akan membantu pemahaman Anda.
1. Skema polling data SMS dari modem
2. Skema baca SMS berdasar indikator (cara Live/real time)
Setelah Anda memahami skema prinsip membaca SMS di atas, mari kita coba mengimplementasikan dalam bentuk baris program Delphi.
1. Program baca SMS menggunakan teknik polling
Buat program baru dalam Delphi, ambil komponen Button (2 buah), Memo, Timer, ComPort ke dalam Form, dan atur seperti gambar di bawah
Double click tombol dengan tulisan ‘Setting’, dan isikan baris program sebagai berikut :
procedure TForm1.Button1Click(Sender: TObject);
begin
comport1.ShowSetupDialog;
end;
Double click tombol dengan tulisan ‘Open, dan isikan baris program sebagai berikut :
procedure TForm1.Button2Click(Sender: TObject);
begin
if ComPort1.Connected then
begin
ComPort1.Close;
button2.Caption:=’Open’;
end
else
begin
ComPort1.Open;
button2.Caption:=’Close’;
ComPort1.WriteStr(‘at+cmgf=1’+#13#10);
ComPort1.WriteStr(‘at+cpms=”SM”‘+#13#10);
ComPort1.WriteStr(‘at+cscs=”GSM”‘+#13#10);
end;
end;
Kemudian tambahkan baris program berikut untuk meng-handle data serial yang masuk ke serial Port (Com Port) di event OnRxChar di komponen ComPort1
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Str: String;
begin
ComPort1.ReadStr(Str, Count);
Memo1.Text := Memo1.Text + Str;
end;
Kemudian masukkan baris program sebagai berikut ke komponen Timer. Program di dalam timer inilah yang bertindak sebagai program inti dalam proses pembacaan isi SMS dengan interval waktu tertentu.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
memo1.Clear;
comport1.WriteStr(‘at+cmgl=”all”‘+#13#10);
end;
Pada program di atas, baris comport1.WriteStr(‘at+cmgl=”all”‘+#13#10); dimaksudkan untuk mengeluarkan perintah ‘at+cmgl’ dari Com Port ke modem. Sedangkan arti dari at command ‘at+cmgl’ adalah memerintahkan modem supaya memberikan semua data sms yang tersimpan di memori.
Untuk mengatur interval waktu pembacaan isi SMS, Anda dapat mengisi property Interval milik komponen Timer. Nilai (Value) dalam property interval Timer ini dalam satuan ms (mili second), jadi bila Anda ingin tiap satu menit membaca SMS, Anda harus mengisi property Interval dengan nilai 60×1000 ms=60000. Untuk nilai lain bisa Anda sesuaikan sendiri sesuai kebutuhan.
Setelah Anda lengkap mengisi script di atas, cobalah untuk me-running program (F9), dan lihatlah hasilnya.
Tampak pada gambar di atas, semua SMS yang ada di SIM card berhasil dibaca oleh program Delphi. Data – data SMS yang ikut terbaca selain isi SMS antara lain : indeks memori tempat isi SMS (berguna untuk penghapusan SMS atau pembacaan ulang), status SMS (read / unread), nomor pengirim, dan waktu (tanggal dan jam) penerimaan SMS. Data – data ini dapat Anda olah untuk kebutuhan program Anda.
Demikian sedikit tutorial program baca SMS dengan Delphi dengan teknik polling. Untuk program baca SMS dengan teknik Live / real time akan penulis sajikan dalam artikel selanjutnya.
Jika Anda mengalami kesulitan, ada baiknya Anda membaca tulisan – tulisan saya sebelumnya, dan jika masih kesulitan, Anda bisa menghubungi saya di YM:ajiew atau email: [email protected]
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
lanjutane dimana mas??
saya sudah mengikuti langkah demi langkah, tetapi tidak muncul tulisan apa apa di memo ..
setelah saya konsultasi dengan pak ajie di chat, akhirnya saya bisa menyelesaikan masalahnya
solusi = menambahkan perintah at+cfun=1 pada button open
mas.. punya source code unutk melisting com berapa aja yang bisa dipakai gak mas? tapi listing devicenya yang make “friendly name” bukan com1,com2,com3 dst.. tapi misal nokia modem, huwawei modem.. jadi user lebih gampang makenya
belum ada, mas. Tp ini good idea, sy suka ini……..suatu saat nanti sy akan coba membuatnya
permisi mas ajie, saya mau tanya.
saya sudah mengikuti langkah2 seperti diatas, tapi hasil yang saya dapatkan,muncul ERROR seperti ini,
at+cmgf=1
at+cpms=”SM”
at+cfun=1
ERROR
ERROR
mohon pencerahan mas, terima kasih
mas, pada saat sy kirim sms pulsa habis dan respon gagal agak lama. saat tunggu respon tersebut saya coba kirim sms. kok smsnya nggak bisa masuk ya? ,mohon petunjuknya, terima kasih
kan pulsanya habis mas
maksudku bukan sms keluar tapi sms masuk. sms yang masuk ke nomor yg digunakan tidak kebaca
selain itu juga mas, saya pakai teknik poling juga nggak berhasil. saat ada sms masuk ada indikator +CMTI:”ME”,-1 begitu dibuka dengan AT+cmgl=”ALL” hanya keluar ok, tidak keluar smsnya
yg pertama, ada unsolicited code +CMTI:ME,-1. tanda “-1” artinya memori penyimpanan SMS sedang full, harus dihapus manual dulu
yg kedua, coba dipastikan sms ada di memori yg mana apakah di “SM” (simcard) atau “ME” memori modem/handphone. Caranya kasih command “at+cpms?” Ssaya lihat masih di ME, coba pindah ke simcard dg command “at+cpms=”SM”
di saya kok cuma muncul jumlah sms masuk aja ya ?
isi pesan gak muncul
coba troubleshoot pake putty atau hyperterminal, ketikkan at+cpms=”SM” kemudian at+cmgl=”ALL”
sudah ketikan seperti yg di saranin tapi tetep cuma muncul +CMTI: “SM”,14
maaf sudah bisa baca kalau command saya ganti at+cpms=”SM”. padahal sebelumnya juga gak bisa2 walaupun sudah benar simpannya di simcard.
itukan kalau ada sms selalu bersihin memo.
kalau gak harus bersihin bisa gak ya ?
jadi ada sms nambah line.
saya coba nambah line terus menerus.
bisa aja, tergantung dari aplikasinya
mas saya pakai MOTOROLA L6 kok tdk bisa ya ?
sms tdk kebaca
bisa jadi salah com atau conflict dg software bawaan
mas..kalau eror Port Not Open ap mslhnya..
bisa salah COM atau port COM-nya sedang diakses software lain (mis. softwr bawaan modem)
maaf ni gan pertanyaan nya agak melenceng, soal na saya tidak tau mw tanya kemana lagi. uda mentok…. 🙁
kenapa y saya pakek huawei selalu ada indicator d terminal seperti : “^Mode” “RSSI” dll , tp ketika saya pakai sierra tidak ada muncul indikator tersebut secara runtime. soal na saya ada project mw buat aplikasi seperti mobile partner untuk modem sierra. klo untuk masalah at command nya saya sudah tau, tp untuk indicator RSSI and RAT nya tidak ada yg masuk d terminal secara runtime 🙁
itu karena scr default, command tsb diaktifkan oleh software bawaan modem huawei. Pernah lihat kan kalo di software bawaan modem ada indikator sinyal yang realtime naik turun sesuai kuat lemahnya sinyal? Nah itu ngambil datanya dari command tsb. Solusinya adl mematikan command tsb lwt app terminal client spt putty/hyper terminal, cuma masalahnya hrs tau commandnya. Saran saya coba googling dulu at command spesific utk modem tsb dan coba utk dimatikan lwt command yg tersedia
makasih uda d jawab mas…
tp bukan seperti itu mksd saya mas, mksd saya tu bukan mw mematikan indikator sinyal melalui at command mas, tp cara menampilkan indikator sinyal di sierra, sperti yg d huawei yg keluar secara realtime. saya uda coba seh buat nya melalui timer, kirim at command “AT+CSQ” setiap 5 detik sekali, untuk mengetahui kekuatan sinyal dari device sierra tersebut. klo saya kirim command tersebut terus menerus setiap 5 detik sekali, buat modem rusak enggk y mas ?
ngga rusak
init = AT^CURC=0 < menghilangkan RSSI yg selalu muncul di Modem Huawei 153 saya 😀
terima kasih atas informasinya
ini dimana diletakan procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Str: String;
begin
ComPort1.ReadStr(Str, Count);
Memo1.Text := Memo1.Text + Str;
end;
di event onRxChar milik komponen comport
gan sms yg terbaca di memo nya berupa angka dan huruf kira2 apa yg salah ya gan ?
cek apakah modem berada di mode teks atau pdu pake command ‘at+cmgf?’ Kalo modem reply-nya ‘0’ berarti msh di mode pdu dan harus diset ke mode teks. Caranya pake command at+cmgf=1
Gan, di ComPort1.ReadStr(Str, Count); yang terbaca hanya OK saja saat dilakukan perintah baca SMS (at+cmgl=”ALL”), itu kenapa ya??
~ Mode sudah Text (At+cmgf=1)
~ At+CFUN=1
tp hasilnya tetap hanya tulisan OK,
sedangkan jika di jalankan di hyperterminal, hasilnya keluar semua sms yg ada di memori.
saya pakai mode Huawei e173 + kartu 3,
Tolong bantuannya..
kemungkinan masih membaca inbox sms di perangkat. Coba diganti ke inbox sms di SIM card lewat command at+cpms=”SM”