Untuk dapat menyimpan SMS ke dalam database MySQL -seperti halnya gammu- ada beberapa persiapan yang harus dilakukan, yakni menginstal komponen ZEOS dan database MySQL itu sendiri. Untuk lebih jelasnya bisa Anda baca di artikel saya sebelumnya.
Berikut ini adalah program sederhana yang berfungsi untuk menyimpan data SMS begitu ada SMS masuk. Data yang disimpan meliputi status SMS (dibaca/belum), nomor pengirim, tanggal dan waktu diterimanya SMS, dan isi SMS. Semuanya akan disimpan dalam tabel ‘inbox’ di database MySQL dengan nama ‘contohsms’.
Sebelum memulai programming dengan Delphi, Anda harus meng-create sebuah database dan tabel terlebih dahulu. Caranya : buka XAMPP Control Panel, dan aktifkan Apache dan MySql-nya. Setelah itu, buka web browser dan ketikkan alamat localhost/phpmyadmin. Setelah itu akan muncul web admin pengelolaan database MySQL. Kemudian create sebuah database baru dengan nama ‘contohsms’ dan tekan tombol ‘Create’
Dalam database ‘contohsms’ inilah kita akan meletakkan sebuah tabel yang berisi data-data SMS yang masuk. Untuk itu, buatlah sebuah tabel dengan nama ‘inbox’ dengan cara seperti gambar di bawah
Isikan ‘Number of fields’ dengan angka ‘5’. Angka ini menunjukkan kolom (field) dari tabel ‘inbox’. Kemudian tekan tombol ‘Save’ yang ada di bawah, untuk menciptakan sebuah tabel baru. Langkah berikutnya adalah men-define masing-masing field dengan settingan sebgai berikut :
Jadi inti dari settingan di atas adalah akan tercipta sebuah tabel ‘inbox’ yang memiliki 5 kolom/field yang nantinya akan berisi data status SMS, nomor pengirim SMS, tanggal dan waktu diterimanya SMS dan isi SMS itu sendiri.
Setelah selesai menciptakan database dan tabel untuk menyimpan data SMS, barulah dilanjutkan dengan programming Delphi. Untuk itu buatlah sebuah form baru dan atur komponen-komponen yang diperlukan sebagai berikut:
Komponen-komponen yang dibutuhkan adalah memo, button (3 buah), dbnavigator, dbgrid (ada di tab Data Controls), ComPort, ZConnection, ZQuery (tab Zeos Access) dan DataSource (tab Data Access). Berikut adalah property masing-masing komponen yang harus diset di awal agar program berjalan dengan baik
Komponen | Tab Comp Pallete | Properties | Nilai |
Button1 | Standard | caption | Setting |
Buton2 | Standard | caption | Open COM |
Button3 | Standard | caption | Open db |
ZConnection1 | Zeos Access | Database | contohsms |
HostName | localhost | ||
Protocol | Mysql-5 | ||
User | root | ||
Connected | true | ||
ZQuery1 | Zeos Access | Connection | ZConnection1 |
SQL | Select * from inbox | ||
DataSource1 | Data Access | Dataset | ZQuery1 |
dbGrid1 | Data Controls | DataSource | DataSource1 |
dbNavigator1 | Data Controls | DataSource | DataSource1 |
Jadi untuk melakukan koneksi dengan database MySQL setidaknya dibutuhkan tiga komponen utama yakni ZConnection, ZQuery dan DataSource. ZConnection berfungsi untuk menghubungkan Delphi dengan database ‘luar’ yakni MySQL, ZQuery berfungsi untuk melakukan pengolah data tabel melalui perintah query SQL setelah database terhubung, dan DataSource merupakan penghubung interface database Delphi seperti dbGrid/dBNavigator.
Setelah Anda atur tata letak dan property komponen seperti pada gambar di atas, programming Delphi sudah dapat dilakukan. Seperti biasa, isikan baris program berikut untuk handling SMS yang masuk di event OnRxChar milik komponen ComPort1.
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var Str: String; begin memo1.clear; ComPort1.ReadStr(Str, Count); Memo1.Text := Memo1.Text + Str; end; |
Dan isikan baris program berikut di tombol dengan tulisan ‘Setting’ dan ‘Open COM’
procedure TForm1.Button1Click(Sender: TObject);
begin comport1.ShowSetupDialog; end; |
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; |
Untuk membuka koneksi dengan database Anda harus menuliskan baris program berikut di tombol ‘Open db’
procedure TForm1.Button3Click(Sender: TObject);
begin zquery1.Open; end; |
Sampai dengan langkah di atas Anda sudah berhasil membuat program yang mampu melakukan handling SMS masuk dan melakukan koneksi dengan database MySQL. Agar SMS masuk langsung mengisi tabel ‘inbox’ sesuai kolom masing-masing, maka Anda perlu mengisikan baris program berikut di event OnChange milik komponen Memo1.
procedure TForm1.Memo1Change(Sender: TObject);
var a,b,c,d:integer; kar_awal,kar_akhir:integer; s:string; begin a:=pos (‘+CMTI’,memo1.Text); if a <> 0 then begin b:=posex (‘,’,memo1.Text,a+1); c:=posex (#13#10,memo1.Text,b+1); s:=copy (memo1.Text,b+1,c-b-1); ComPort1.WriteStr(‘at+cmgr=’+s+#13#10); end;
d:=pos (‘+CMGR’,memo1.Text); if d <> 0 then begin zquery1.insert; kar_awal:=pos (‘”‘,memo1.Text); kar_akhir:=posex (‘”‘,memo1.Text,kar_awal+1); zquery1.FieldValues[‘status’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);
kar_awal:=posex (‘”‘,memo1.Text,kar_akhir+1); kar_akhir:=posex (‘”‘,memo1.Text,kar_awal+1); zquery1.FieldValues[‘sender’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);
kar_awal:=posex (‘”‘,memo1.Text,kar_akhir+1); kar_akhir:=posex (‘,’,memo1.Text,kar_awal+1); zquery1.FieldValues[‘tanggal’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);
kar_awal:=kar_akhir; kar_akhir:=posex (‘”‘,memo1.Text,kar_awal+1); zquery1.FieldValues[‘waktu’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);
kar_awal:=posex (#13#10,memo1.Text,kar_akhir+1); kar_akhir:=posex (#13#10,memo1.Text,kar_awal+1); zquery1.FieldValues[‘isi’]:=copy(memo1.Text,kar_awal+1,kar_akhir-kar_awal-1);
zquery1.Post; end; end;
|
Baris program dalam event OnChange Memo inilah sebenarnya program utama dari program menyimpan SMS ke MySQL ini. Jadi inti dari baris program di atas adalah melakukan pembacaan SMS begitu ada indikasi SMS masuk (mendeteksi karakter +CMTI sebagai indikator SMS masuk) dan memasukkan data-data SMS (status SMS, nomor pengirim, tanggal, waktu dan isi SMS) ke dalam database MySQL. Oh ya, Anda harus menambahkan unit StrUtils, karena function ‘posex’ berada di unit ini. Selamat mencoba ya, semoga bermanfaat bagi Anda. Jika ada pertanyaan bisa ditujukan email atau YM saya. Happy programming…..
bersambung
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
mas kan kemaren ada buat tutor ttg mengirim sms dengan AT command, kalo misalnya saya kirim ke banyak itu prosedurnya gimana mas??? apa tinggal tambah aja tanda koma di samping nomornya terus tambahin nomornya gitu ya???
tergantung modemnya. kalo modemnya support dengan tanda koma, berarti bisa. tapi kalo tidak ya berarti bikin perulangan untuk mengirim sms ke banyak nomor. Gunakan komponen timer utk melakukan fungsi iterasi
mantap tutorialnya
matur suwun mas. great job.
sangat detil dan berurutan. terima kasih tutorialnya mas. sukses selalu, terimakasih telah berbagi ilmu.
Hehe,. Terimakasih banyak gan,…
mas maaf mau tanya, sy pake kabel data buetech dan hp siemens c55, setelah sy jalankan program diatas, saat blom ada sms di memo keluar ‘ok’, tpi klo ada sms kok gak bisa baca ya? mohon bantuannya
Terimakasi sebelumnya.
tambahkan command : at+cnmi=1,1,0,0,0 itu untuk mengaktifkan indikasi sms masuk (+CMTI). Kemungkinan settingan default hape-nya tdk ditampilkan indikator sms masuk.
–cut–
zquery1.insert;
kar_awal:=pos(‘”‘,memo1.text);
kar_akhir:=posex(‘”‘,memo1.text,kar_awal+1);
zquery1.FieldValues[‘status’]:=copy(memo1.text,kar_awal+1,kar_akhir-kar_awal-1);
——-
tolong dijelaskan maksud dari pos, posex, copy dan kar_awal, Kar_akhir yang ditambah 1 dan kikurangi 1 itu ?
trimakasih…
om.. boleh minta tolong kirim ke email saya ga om artikel dalm bentuk PDF atau document tentang proses pembuatan program sms gateway dari A-Z..
Trims untuk artikelnya mas.
Ada pertanyaan nih, kalau dapat sms yang panjang (lebih dari 160) handlingnya gimana supaya messagenya dapat lengkap?
Trims.
Trimakasih untuk artikelnya sangat membantu mas.
aku juga ada pertanyaan, kalau terima/kirim SMS lebih dari 160 karakter gmana ya mas. mohon pencerahanya lg.
Terimakasih.
kalo pake at command hrs dua kali mas. kalo mau mudah pake gammu
Mohon maaf mas..
maksudnya dua kali pengiriman gmn mas??
listing bagian mana yang harus diulang prosesnya..??
Terima kasih sebelumnya..
sori mas, udah nemu cara yg lebih baik, yakni pake cara kirim long sms (ada caranya di buku saya 🙂 )
Wahh..
Berarti harus beli bukunya bang ajie donk..?? hehe
Kalo bagi tutorialnya disini gak bisa mas?? lagi butuh ini soale..hehe
Mohon bantuannya bag ajie [terdesak skripsi]..hehe
Terimakasih sebelumnya..
cara mudah dan murah adalah …… googling, he he he. Sy juga dapet caranya jg dari internet kok. Kalo saya bisa, mas rifki jg pasti bisa 🙂
Mas aq pakai HP motorola L6 tapi kok pas aq running aplikasix kalo ada sms kok gak masuk di memo ama databasex ya.mohon pencerahan NEWBei delphi ni mas
tutorialnya sangat berurutan,,,,mudah di mengerti…trimakasih banyak ya mas…..
mas kenapa ouput yang tampil di field [isi] pada project saya terbaca karakter (|).misalkan pada contoh diatas, kalo pada project saya keluar
kaya gini |Tes simpan sms di mysql
seharusnya kan gini “Tes simpan sms di mysql”
saya coba hapus #13#10 pada coding program di bagian [isi] tapi error mas gimana tuh..?
coba hilangkan karakter #10 aja
omm
saya eror di sini …
Dialogs, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, CPort,
kenapa ya…???
tambahkan library yg sesuai om
mas aji mau tanya nih ,,
di CD buku mas aji yang tentang sms gateway kan ada source contoh program2nya ,,,
nah, saya coba jalankan program yang “menyimpan sms ke mysql” ko ga jalan ya ,,
waktu di klik tombol “open Com” memang muncul tulisan ‘OK’,, tapi ketika saya coba( ‘testing terima sms’ ),ko seperti engga ada di respon apa2 ya ,,, ?kenapa ya ?
modem saya pake huawei e173 (GSM),,,
terima kasih
kalo modem huawei biasanya com yg dipake adl yg di bawah ‘Modem’ di Device Manager. Mas Septi bisa hubungi no contact sy (bisa via SMS/chat) spy bs sy bantu scr lebih optimal
mas aji punya YM atau Line ?
YM : ajiew
Line : 081910026910
problem solved, ya
mas saya mencoba dan srip sama persis tp data yg masuk ke database cuma statusnya saja,yg lain tidak masuk ke database,gmn mas solusinya?
harus ngecek satu persatu string-nya mas
om muncul error +CMS ERROR: 321, dimana y salahnya om, darurat ni om
error 321 artinya : invalid memory index. Coba cek lagi indeks memori sms yg dibaca delphi
Mas Aji saya mau tanya..
Saya coba listing mas aji untuk mengirim dan menerima sms menggunakan perangkat modem huawei..
Pada waktu mengirim SMS bisa mas tapi pada waktu menerima SMS, isi SMS tidak muncul di memo (program tidak bisa mendeteksi SMS yang masuk)..
Itu gimana mas..?? Padahal Listing untuk AT+CMGR nya udah saya masukkan..
mohon pencerahan..Terimakasih
tambahkan at+cnmi=1,2,2,1,0
Mas Aji saya mau tanya..
Saya coba listing mas aji untuk mengirim dan menerima sms menggunakan perangkat modem smartfren. pada saat openport hasil di memo
+CPMS: 0,30,8,99,8,99
OK
tetapi pada saat terima sms hasil dari memo
COMMAND NOT SUPPORT
mohon pencerahan mas ..Terimakasih..
hanya berlaku untuk modem gsm/3G ya. Utk modem CDMA, at command-nya sedikit beda
Mas Aji,klo mau nyimpan pesan keluarnya bagaiamana ya?
mohon bantuannya. .
terima kasih
Mas ajie sya mhon bimbingannya.
terima kasih sebelumnya
Om lok nyimpan sms yg formatny #nama#alamat#nope# gimana cranya om jd yg kita simpan nama,almat,nope ny aja. Mohon bantuany om
gunakan kombinasi pos, posex dan copy utk melakukan parsing isi sms
mas ajie, kalau modem dalam kondisi connect sms bisa langsung masuk ke database mySql, akan tetapi ketika modem dalam kondisi disconnect atau offline ada sms masuk lebih dari 1 (katakan ada 3 sms). saat modem di connect-kan SMS yang ketarik cuma 1 SMS aja, ada solusi ga mas? agar ketika modem offline sms tetap bisa masuk kedatabase, trimakasih
oh ya terimakasih kiriman emailnya kemarin mas 🙂
kalo offline harus pake metode polling utk narik sms-nya, ga bisa pake metode real time (sdh dijelaskan di dlm buku)
mas ajie, bagaimana coding delphi “pesan diterima” saat sms berhasil sampe no. tujuan
hrs mengaktifkan ‘delivery report’ lwt at command
setelah at command diaktifkan untuk menampilkan pesan sms terkirim lewat messagebox caranya gimana bang? atw sudah otomatis keluar messageboxnya?
tinggal panggil procedure showmessage atau messagebox
mas kalau saya buat variable baru type string misal : Vinbox
nah di ComPort1RxChar saya tambahin Vinbox :=str;
tapi ada masalah kalau sms banyak karakter selalu kepotong.
atasinnya gmn ya ?
sms normal maks hanya 160 karaker. Nah, variabel Vinbox ini kepotongnya dibawah 160 karakter atau di atasnya?
gak sampai 160 sudah kepotong
oh ya ini kepotongnya kalau saya jadin variabel.
kalau di memo gak kepotong sampai 160 karakter
coba modifikasi dikit : Vinbox :=Vinbox+str;
sudah coba itu malah error baca cmgr nya .
dan akhirnya balik lagi ke memo aja dah sambil cari atasin masalah di variabel :D.
makasi mas bantuannya
mas kalau metode polling gak bisa ambil jam + tgl ya ?
kan hasil CMGL gak ada jam nya.
ada kok mas, tinggal di-parsing aja
bisa di jelaskan lebih detail mas parsing gmn ?
parsing = dipilah-pilah informasi yang dibutuhkan secara progam
maaf mas masih kurang paham nih 😀
kalau saya sementara cuma ambil index terus saya CMGR.
tapi cara ini menurut saya lambat 😀
Mas, kok di Zeos saya ga ada ComPort y?
jadi ga bisa buat.
saya pakai windows xp
mmg ga ada mas, itu dua komponen yg berbeda
mas saya memakai modem movi max, untuk ngirim sms bisa tetapi untuk menerima tidak bisa, gmana solusinya mas
kalo pake software bawaan modem bisa ga?
mana lanjutannya ni mas tutornya….
jangan lupa di sambung y trimakasih
kang…. mohon bantuan… gmna cara nampilin form 5 duluan waktu program dieksekusi… make Delphi 7…. mohon banruannya kang….
di atur di file project-nya kang. Bisa dibuka mll menu Project-View Source. Trus atur application.createfrom -nya
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
makasih bos atas listingnya. oh ya bos bantu dong tampilkan contoh sederhana untuk multi user atau server dan clien.
Assalamu’alaikum, Wr, Wb, Mas 3G saya sudah mencoba mengirim Long SMS dan berhasil karena pakai fungsi GetPDU, tetapi saya mempunyai masalah bagaimana cara mengubah dari PDU ke text soalnya begitu long sms masuk, sms pertama berupa file PDU sedangkan sms ke dua normal karena di bawah 153 karakter mohon pencerahan nya bagaimana membuat fungsi GetSMS nya (merubah mode PDU ke Mode SMS). Terima kasih. Wassalam
Terima kasih, tutorialnya sangat bermanfaat. Mas ajie punya list AT Command buat CDMA ? jika berkenan mohon kirim ke email saya. Terima kasih, salam.
mas,saya tes pake delphi xe4 kok error di bagian comport.readstr(Str,Count);
knapa yah..padahal variabel Str sudah di deklarasikan tapi error
pake delphi XE4 ya? variabel string-nya ganti jadi AnsiString
klo mau nanya mas
klo mau simpan ke access dengan dehpi melalui comport bagaimana skripnya ya mas
maksudnya gimana mas? sy masih bingung dengan pertanyaannya, karena tidak ada relasinya antara comport dengan access
note: comport adl komponen untuk menangani komunikasi serial
gan izin tanya udah ngikutin tahapan diatas, hasil nya ada 2 error yang pertama 1) undeclared identifier: ‘posex’ dan yang ke 2) could not compile used unit menu.pas.. mohon bantuannya gan.. ane pake delphi 7
tambahkan unit ‘StrUtils’ di bagian ‘uses’