Program Terima SMS dengan Delphi Secara Live (Real Time)

Terkadang sistem yang kita inginkan membutuhkan respon yang cepat begitu ada SMS masuk. Sistem ini biasanya terdapat pada sistem kontroler berbasis SMS. Contoh mudahnya, bila kita ingin menghidupkan atau mematikan mobil/motor menggunakan SMS tentunya saat itu juga mobil/motor kita harus hidup/mati sesuai isi SMS. Nah, sesuai ilustrasi yang saya berikan, untuk sistem ini paling cocok menggunakan teknik ‘live/real time’ dalam proses handling SMS yang masuk. Jadi begitu ada SMS masuk, SMS tersebut langsung diproses, dibaca isinya, dicocokkan dengan keyword yang sudah kita tentukan dan langsung take action sesuai dengan kata kunci.

Berikut ini adalah tutorial sederhana  tentang bagaimana caranya melakukan handling SMS yang masuk dengan cara ‘live’, menggunakan program Delphi. Untuk teknik membaca SMS dengan cara polling dapat Anda baca pada artikel saya sebelumnya. Program ini ditulis menggunakan bahasa Delphi 7, komponen untuk handling SMS yang digunakan adalah CPORT (versi 310) dan modem yang digunakan adalah merk SpeedUp 8100 (USB modem 3G/HSDPA). Mengapa saya memilih modem 3G ketimbang modem GPRS atau handphone, dapat Anda baca – baca di artikel terdahulu.

Baiklah, sekarang mari kita coba membuat program sederhana untuk proses handling SMS secara live. Program ini akan menyalakan LED virtual (ComLED) jika SMS berisi keyword ‘LED ON’ dan akan mematikan LED jika keyword SMS adalah ‘LED OFF’. Dari contoh program ini saya harapkan dapat lebih memantapkan pemahaman Anda tentang teknik handling SMS secara ‘live’ dan dapat membandingkannya dengan teknik ‘polling’.

Buatlah project baru dalam Delphi 7, kemudian  ambil komponen Button (2 buah), Memo (1 buah),  ComPort (1 buah) dan komponen ComLED (1 buah). Aturlah komponen – komponen tersebut ke dalam form hingga tampilannya seperti pada gambar di bawah.

Sebelumnya,tambahkan script berikut untuk handling data serial yang masuk melalui ComPort di event OnRxchar

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
Str: String;
begin
memo1.clear;
ComPort1.ReadStr(Str, Count);
Memo1.Text := Memo1.Text + Str;
end;

Kemudian double click tombol yang bertuliskan ‘Setting’ dan isikan dengan baris program sebagai berikut:

procedure TForm1.Button1Click(Sender: TObject);

begin

comport1.ShowSetupDialog;

end;

Baris program  comport1.ShowSetupDialog; adalah untuk menampilkan jendela pengaturan modem meliputi nomor COM port, baudarate, flow control, parity dan start – stop bits secara runtime. Mengenai identifikasi nomor COM port dari USB modem dapat Anda pelajari pada artikel saya terdahulu.

Double click tombol 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;

Baris program di atas digunakan untuk membuka koneksi dengan modem (ComPort1.Open;) dan sekaligus untuk melakukan inisialisasi modem ke mode teks (ComPort1.WriteStr(‘at+cmgf=1’+#13#10); ), mengatur memori penyimpanan SMS di Simcard (ComPort1.WriteStr(‘at+cpms=”SM”‘+#13#10);) dan mengatur karakter set ke ‘GSM’ agar bisa terbaca oleh kita (ComPort1.WriteStr(‘at+cscs=”GSM”‘+#13#10);).

Kemudian double click komponen memo hingga Anda masuk ke event memochange, dan isikan beberapa baris program sebagai berikut :

procedure TForm1.Memo1Change(Sender: TObject);

var a,b,c,d,e: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

if posex (‘LED ON’,memo1.Text,d+1) <> 0 then ComLed1.State:=LsOn;

if posex (‘LED OFF’,memo1.Text,d+1) <> 0 then ComLed1.State:=LsOff;

end;

end;

Sebelumnya tambahkan unit StrUtils, dideklarasi unit (di bawah interface), karena function posex berada dalam unit StrUtils

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, CPort, CPortCtl, StrUtils;

Baris program dalam event memochange inilah sebenarnya inti dari program terima dan baca SMS secara real time, karena begitu ada SMS masuk (diindikasikan dengan unsolicited code ‘+CMTI’), data dari COM Port akan masuk ke kotak memo melalui komponen CPORT, dan begitu kotak memo berubah datanya (berubah=change), maka event OnChange (memochange) akan ter-trigger dan akan mengeksekusi baris program yang ada di dalamnya. Berikut ini adalah flowchart dan penjelasan dari program yang ada di event memochange

Berikut ini adalah implementasi flowchart di atas dalam bentuk program:

Ada SMS masuk ? (point 1). Jika ada SMS masuk, indikatornya adalah +CMTI:”SM”,0 akan muncul di kotak memo, dengan ‘+CMTI’ adalah unsolicited code jika ada SMS masuk, ‘SM’ menunjukkan SMS ada di Simcard, dan ‘0’ menunjukkan indeks memori nomor ‘0’ di SIMcard. Baris programnya adalah a:=pos (‘+CMTI’,memo1.Text);

Baca SMS-nya (point 2). Untuk membaca isi SMS, kita harus tahu di indeks berapa SMS itu berada. Caranya adalah mencari indeks tersebut setelah karakter ‘SM’ tadi (contoh di bawah, indeks SMS akan disimpan di variable string ‘s’).

b:=posex (‘,’,memo1.Text,a+1);

c:=posex (#13#10,memo1.Text,b+1);

s:=copy (memo1.Text,b+1,c-b-1);

Catatan : penjelasan mengenai sintaks function ‘pos’ dan ‘posex’ dapat Anda baca di menu ‘Help’ Delphi (inti dari function ini adalah untuk mencari karakter tertentu dalam variabel string)

Dan begitu indeks SMS di dapat, langsung dibaca isinya menggunakan at command ‘at+cmgr=indeks’. Baris programnya adalah : ComPort1.WriteStr(‘at+cmgr=’+s+#13#10);

Baca keyword (point 3 s/d 6). Setelah isi SMS berhasil dibaca, langkah selanjutnya adalah mencocokkan keyword yang sudah ditentukan, yakni jika isi SMS adalah ‘LED ON’ akan menghidupkan Led, dan jika    keyword adalah ‘LED OFF’ akan mematikan Led. Berikut adalah baris programnya.

d:=pos (‘+CMGR’,memo1.Text);

if d <> 0 then

begin

if posex (‘LED ON’,memo1.Text,d+1) <> 0 then ComLed1.State:=LsOn;

if posex (‘LED OFF’,memo1.Text,d+1) <> 0 then ComLed1.State:=LsOff;

end;

Setelah itu cobalah running program yang telah Anda buat tadi, dan lihatlah hasilnya. Setelah Anda setting modem (klik tombol ‘Setting’) dan buka koneksinya (klik tombol Open), cobalah mengirim SMS dengan keyword ‘LED ON’ ke nomor yang ada di dalm modem. Perhatikan apakah LED di atas kotak memo menyala atau tidak. Dan jika Anda mengirim SMS  ‘LED OFF’, harusnya LED akan padam.

LED ON
LED OFF

Demikian sedikit tutorial singkat tentang handling SMS dengan Delphi, semoga ada manfaatnya buat Anda. Jika ada pertanyaan bisa mengisi komentar di bawah atau hubungi saya di YM:saptaji2011 atau email: saptaji2011@yahoo.co.id

 

bersambung

0 0 votes
Article Rating

Leave a Reply

59 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
rohman

maaf maz _
kl misalkan mw menghubungkan langsung pada hardwarenya “LED beneran” gimana maz ?

Renandatta

maaf mas, saya tanya lagi,
saya sudah mengikuti langkah demi langkah seperti di atas
waktu saya run ..
saya tekan setting, lalu tekan open
di memo keluar tulisan OK
tetapi saat saya coba kirim sms ke nomer yg saya gunakan di modem
memo tiba tiba kosong dan tidak muncul apa apa setelah saya tunggu 5 menit

bagaimana solusinya ?

eeng

Wah, bagus bgt tutorial na mas, sangat membantu, terus berkarya. hehe.. 😀

Gan, mau tanya nie,…
Gmana ya mesisahkan isi pesan dan nomor pengirim nya?
Agar bisa di simpan di Database secara terpisah antara isi pesan dan SMS…. 😀

Mohon pencerahan na gan… Terimakasih.. Thank you… ;D

Moslem's

Maaf mas mau tanya, sy udah coba bikin seperti yg dicontohkan di atas,
tp ketika d run, stelah tekan tombol setting dan lalu tekan open,
d memo keluar tulisan OK,
setelah itu sy coba kirim sms LED ON, tp g ada respon apa2, bahkan setelah dikirim sms, programny sama sekali g masuk ke event onRxChar (jd seolah2 comportny g nyadar ada sms masuk),
d memo t2p aj tulisanny OK (g ada prubahan),
maaf, gmana solusiny y mas?
Mks byk mas…

Moslem's

Pagi Mas, Alhamdulillah td sy sudah coba pk hyperterminal, sy coba masukin at command sbb : ================================================= at+cgmi hslny => huawei OK at+cmgf=1 hslny => OK at+cpms=”SM” hslny => CPMS: 5,50,5,50,5,50 OK at+cscs=”GSM” hslny => OK ================================================= Alhamdulillah smuany bjalan mas, maaf langkah selanjutny apa lg y mas? O iy mks byk atas tutor2ny, sebelumny sy sudah bhasil mjalankan tutorial cara mengirim sms dari mas ajie, tp sedikit d modif berupa : – Connect k database SQL Server 2000, – ngambil data dari DB tsb, – kmudian data-nya dikirim ke 10 no hp. Jd kira2 masalah yg sy hadapi apa… Read more »

Moslem's

T2p g jalan mas,
setelah d masukin at+cnmi=1,1,0,0,0 jg t2p g ada respon apa2 d hyperterminalny,
sy jg udah nyoba pk nilai yg lain, seperti :
at+cnmi=2,1,0,0,0
at+cnmi=2,1,2,2,0 tp t2p cmti ny g mau muncul ktika ada sms baru.

Oiy sy pk modem Vodafone K3765 dari Huawei.
Mks byk mas.

Moslem's

O iy gpp mas, Mks byk nih udah bantu.
Sy lg trus nyari cara supaya cmti ny bisa aktif.
O iy mas kt ny cara ngaktifin cmti bisa beda2 tgantung modemny, bnr g sih?

Mas punya dokumentasi at command yg lengkap tp berbahasa Indonesia g?
Mks byk y mas.
Jazakallah Khairan Katsiro…

Assalamu’alaikum…

taufik

default save location for received SMS set ke SIM mas pada Seting Connect Manager nya, saya pernah ngalamin yang mirip kaya gitu, ternyata karena default save location for received SMS di set Ke PC

tyo

Askum bang ji,,,, mksh bwt share ilmunya…
langsung saja aku punya kendala bgni:
ketika dapet sms masuk, tampilan smsnya berupa kode (isinya tidak seperti isi sms)
padahal dah aku kasih:
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);

mohon pencerahannya

bima

siang mas, saya mau tanya ni mas..
bukannya listing program delphi yang d atas cuman support mode Text ya??
bagaimana dengan format PDU??
ada saran mas sebaiknya gimana?
soalnya saya terkendala di hp yang saya gunakan cuman bisa mode PDU..
thx mas.. 🙂

tutus

mas.
aku pake modem smartfren, pada memo cuma muncul ok
waktu tak coba sms,
sms kiriman ku cuma masuk di firmware modem tapi gak mau masuk di software delphi nya
minta tolong penyelesaiiannya mas?
,,
oh ya, mas pake modem seri apa ya?
terima kasih

fadli

Ass.. Mas..! klw eror (enable to open com port (eror:5)) itu apa mas..???

boy

saya juga ada kendala seperti yang diatas mas, kalau sms nya cuma 1 pesan ga masalah keluar teks nya, tp klo lebih dari 1 pesan (sms bersambung), munculnya kode angka dan huruf. mohon pencerahannya mas 🙂

KOTIB

MAS MAU TANYA KALO MISALNYA KIRIM SMS BEBERAPA NOMOR SATU KALI PROSES ITU YANG SAYA COBA KOK MASUK SATU NOMER SAJA, YANG NOMOR LAINNYA TIDAK MASUK, MOHON BANTUAN NYA MAS

KOTIB

mas maaf mas saya mau nanya masalah function ‘pos’ dan ‘posex’ itu fungsinya untuk apamas? bisa di kasik contohnya mas,

KOTIB

makasih jawabannya mas!! yang saya pakai delphi 6 td sy coba eror, sya akan coba menggunakan delphi 7

KOTIB

mas mau nanya
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;
ketika program sy jalankan sy tekan F5 ternyata saya cek a=0 sehingga tidak memproses syntak d bawahnya dia keluar dari if a 0 then
apakah ada yang salah dari syntak tsb
terus di memo cuma ada tulisan ok
tapi kalo sy tekan tombol all di memo keluar semua yang sms masuk
mohon petunjuknya mas

KOTIB

madsudnya if a tidak sama dengan 0
begin
xxx
xxx
xxx
end;
ternyatak sy cek F5 a=0 sehingga tidak melewati proses xxxx
mohon petunjuk nya mas

HARYO

assalam
mas saya ada problem dalam parsing data mungkin mas mengerti tolong bantuannya

saya ingin memparsing data dari micro
misalnya datanya
123A234B345D
yang ingin saya tampilkan adalah nilai angka pada fort edit bagaimana caranya

saya menggunakan delphi 7

rendy

Permisi mas, saya mau tanya ne tentang aplikasi sms gateway dari delphi yang bisa terhubung dengan arduino. jadi ketika saya mengirim sms,, data sms tersebut dapat di proses ke arduino (untuk mengatur relay). terima kasih

rendy

benar mas,, memang menggunakan 2 USB,, dan aplikasi untuk menerima sms nya juga sudah bisa, nah,, untuk coding supaya sms itu bisa di baca oleh arduino nya gimana mas ?

rendy

if posex (‘ON’,memo1.Text,d+1) 0 then Comport2.WriteStr(‘1’);

itu contoh punya saya,, comport2 nya berasa dari usb arduino nya..
tapi tetap tidak bisa..

rendy

sudah ada.
saya kira seperti ini
void loop() {

if( Serial.available() >0 )
{
val = Serial.read();
Serial.println(val);
}
if( val == ‘1’ )
{
digitalWrite(K1,HIGH);
}
apa ada yang salah dari coding di atas ?

rendy

saya krang taw, karna saya baru2 di bidang arduino ini, tapi saya baca2 untuk pendeklarasian di arduino nya memang menggunakan Val

rendy

oya,, tipe nya “char”

rendy

saya sudah dapat permasalahannya, karena coding memang sudah benar..
saya memiliki modul bluetooth hc05 di arduino nya, sehingga arduino tidak mau menerima perintah dari luar.. apakah ada solusi untuk ini ? ketika kabel tx dan rx dari bluetooth nya saya lepas,, kendali relay lewat sms saya bisa bekerja,

rendy

Mas, untuk mengirim pesan kan pake perintah at+CMGS=no. tujuan.
nah di no. tujuan ini di buat otomatis bisa gx mas,,. contoh nya ngambil no. yang barusan sms..

agus

mas maaf mau tanya,agak keluar dari tema tapi mungkin ada sedikit keterkaitan.
Cara mengakses multisensor dengan delphi gimanan ya mas?,saya masih bungung bagaimana cara memisahkan antara data satu dengan yang lain. trimakasih atas bantuannya.

permanawahyunugraha19598@gmail.com

mas kalo sms berformat untuk merubah database di arduino seperti apa

permanawahyunugraha19598@gmail.com

bukan eeprom mas jadi sms berformat merubah database delphi7 gitu mas
misal database nya jumlah barang kita sms #sabun3
maka di database berkurang 3

permanawahyunugraha19598@gmail.com

makasih mas

59
0
Would love your thoughts, please comment.x
()
x