Membuat SMS Gateway, tak lengkap rasanya jika tak memiliki fitur menghapus SMS. Kalau SMS tidak dihapus, akan memenuhi memori modem atau simcard, dan bila sudah penuh SMS baru tidak akan masuk lagi. Nah, kalau sistem yang kita buat adalah remote control dengan SMS, maka sistem kendalinya tidak akan berfungsi karena tidak ada SMS yang masuk karena kepenuhan inbox.
Untuk mengatasinya, Anda dapat membuat sendiri program untuk menghapus SMS baik Anda jalankan dengan mengklik tombol atau berdasarkan waktu (misalnya sehari sekali semua SMS akan dihapus). Untuk melakukan penghapusan SMS, at command yang digunakan adalah AT+CMGD=index_memori, dengan index_memori adalah alamat/index memori yang dipilih. Pilihan memori tergantung pada jenis modem, tapi minimal ada 2, yakni “SM” (simcard) atau “ME” (modem). Jadi sebelum Anda menghapus SMS, Anda harus menentukan di memori mana SMS itu berada. Untuk menentukan memori sebagai media penyimpan SMS, at command yang digunakan adalah AT+CPMS=XX, dengan XX adalah “SM” atau “ME”. Untuk melihat option memori yang dimiliki modem Anda dapat menggunakan at command berikut : AT+CPMS=?
Dapat Anda lihat modem saya memiliki option memori “ME”, “MT”, “SM” dan “SR”. Ini bisa berbeda untuk tiap modem, tapi minimal akan memiliki option “SM” dan “ME”. Untuk melihat settingan eksisting dimana modem menyimpan memori dapat Anda gunakan command AT+CPMS?
Ternyata modem modem saya settingan default memorinya masih di ME (modem) sedangkan angka “0” menunjukkan jumlah SMS yang ada di memori “ME” dan angka “255” menunjukkan kapasitas penyimpanan SMS di “ME”
Sekarang kita akan mencoba mengarahkan pembacaan SMS yang ada di simcard, menggunakan command AT+CPMS=”SM”
Sekarang default penerimaan SMS ada di “SM”(simcard), dan sekaligus dapat Anda lihat ada berapa SMS di simcard (ditunjukkan dengan angka ‘0’ yang berarti tidak ada SMS yang disimpan) dan kapasitas SMS di simcard (ditunjukkan dengan angka “30”, yang berarti simcard hanya mampu menyimpan 30 SMS)
Karena masih kosong, kita kirimi dulu nomor yang ada di modem untuk percobaan
Tampak ada SMS masuk, yang ditunjukkan dengan indikator SMS masuk, +CMTI:”SM”,0 yang berarti “ada SMS masuk di “SM” di index memori “0”. Kemudian coba kita cek dengan command at+cpms=”SM” dan dapat balasan dari modem ‘+CPMS:1,30,1,30,1,30’. Bandingkan pada gambar sebelumnya yang masih ‘+CPMS:0,30,0,30,0,255” (cukup perhatikan dua angka dibelakang +CPMS). Ini berarti ada sms masuk sebanyak 1 SMS di memori “SM”. Karena penghapusan SMS membutuhkan informasi indeks memori mana yang akan dihapus, dapat Anda gunakan command at+cmgl=”ALL”
Tampak semua SMS yang masuk dan nomor indeks memori ditunjukkan dengan angka dibelakang ‘+CMGL:’ (pada gambar di atas ditunjukkan dengan angka ‘0’). Untuk menghapus SMS di atas, dapat Anda gunakan command at+cmgd=0, langsung pada program ‘7G Terminal’ di atas, atau jika ingin membuat program sendiri di Delphi dapat Anda lakukan sesuai langkah-langkah berikut ini.
Buat project baru dalam Delphi, dan ambil komponen button sebanyak (3 buah) dan kotak spinedit (1 buah) dan label (1 buah) ke dalam form. Atur komposisi dan properti komponen-komponen tersebut sesuai gambar di bawah:
Tambahkan baris program berikut di tombol dengan tulisan ‘Setting modem’
procedure TForm1.Button2Click(Sender: TObject);
begin
comport1.ShowSetupDialog;
end;
Double click tombol ‘Open’ dan tambahkan baris program sebagai berikut :
procedure TForm1.Button3Click(Sender: TObject);
begin
if ComPort1.Connected then
begin
ComPort1.Close;
button3.Caption:=’Open’;
end
else
begin
ComPort1.Open;
button3.Caption:=’Close’;
ComPort1.WriteStr(‘at+cmgf=1’+#13#10);
ComPort1.WriteStr(‘at+cscs=”GSM”‘+#13#10);
ComPort1.WriteStr(‘at+cpms=”SM”‘+#13#10);
end;
end;
Fungsi tombol ‘Setting modem’ adalah untuk menyetting modem dan tombol ‘Open’ adalah untuk melakukan koneksi dengan modem. Selanjutnya double click tombol dengan tulisan ‘Delete SMS’ dan isikan dengan baris program sebagai berikut.
procedure TForm1.Button1Click(Sender: TObject);
begin
ComPort1.WriteStr(‘at+cmgd=’+inttostr(spinedit1.Value)+#13#10);
end;
Sekarang running-lah program yang sudah Anda buat tadi, kemudian pilih index memori di simcard yang akan dihapus dan tekan tombol ‘Delete SMS’. Untuk membuktikan bahwa SMS sudah terhapus, bisa Anda lihat program Hyper terminal atau dengan ‘7G Terminal’ buatan saya.
Tampak bahwa dengan command at+cpms=”SM” sudah kembali menunjukkan angka ‘0’ dan ketika dicek dengan command at+cmgl=”ALL” juga menunjukkan sudah tidak ada SMS di memori.
Semoga bermanfaat dan happy programming ….
Note : Untuk program ‘7G Terminal’ akan saya bahas pada artikel selanjutnya dan Anda dapat mendownloadnya di sana. Program ini merupakan pengganti program Hyper Terminal, dan sangat berguna sekali jika Anda menggunakan OS Windows 7 karena hyper terminal sudah tidak ada di Win7
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Dear Mas Ajie
Mas ajie saya sudah buat aplikasi sms, untuk terima dan kirim sudah berhasil tetapi saat di hapus tidak berhasil padahal di memo1 statusnya “OK” dan untuk menangkap pesan pengirim serta isi sms tidak berhasil, mohon pencerahan… Trim’s. UDE
biasanya pembacaan sms belum diarahkan ke SIM card mas, coba cek apakah command at+cpms=’SM’ sudah ada?
Dear Mas Ajie Thanks banget Mas untuk hapus SMS nya dah berhasil, tapi untuk menangkap pesan isi dan waktu pengirim belum berhasil, apa ada kekurangan dengan pernyataan berikut ? procedure TFormSMS.Memo1Change(Sender: TObject); 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 awal := Pos(‘”‘,Memo1.Text); akhir := PosEx(‘”‘,Memo1.Text,awal+1); status:= copy(Memo1.Text,awal+1,akhir-awal-1); awal := PosEx(‘”‘,Memo1.Text,akhir+1); akhir := PosEx(‘”‘,Memo1.Text,awal+1); pengirim := copy(Memo1.Text,awal+1,akhir-awal-1); awal := PosEx(‘”‘,Memo1.Text,akhir+1); akhir := PosEx(‘”‘,Memo1.Text,awal+1); tgl := copy(Memo1.Text,awal+1,akhir-awal-1); awal := PosEx(‘”‘,Memo1.Text,akhir+1); akhir := PosEx(‘”‘,Memo1.Text,awal+1); waktu := copy(Memo1.Text,awal+1,akhir-awal-1); awal := PosEx(#13#10,Memo1.Text,akhir+1); akhir :=… Read more »
Makasih banyak pak. Sangat membantu saya yang sedang bingung dengan penggunaan gammu, dan ini ada solusinya. Semoga tugas akhir saya tentang sms gateway segera selesai.
assalam mas mau nanya kalo misalnya ada sms 10, tapi saya ingin menampilkan sms yang no 8 aja bisa gak mas, mohn bantuannya mas
bisa aja, pake at+cmgr=8, kemudian hasilnya ditampilkan
mas mau tanya bisa gak kalo misalnya ada sms masuk 10, tapi saya pingin menampilkan sms no 8 yang ada di kartu sim saya , terimah kasihmas mohon petunjuk mas