Official StoreTekan tombol di atas untuk membeli semua alat dan bahan eksperimen di web ini

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

Incoming search terms:

membaca sms pdu di delphi, terima sms delphi, cara terima sms delphi7, baca sms dengan delphi, syntax memasukkan format sms pada delphi 7, menerima sms delphi comport, cara membaca timer agar tidak bertabrakan pada delphi, cara membaca data real time pada dhelpi#hl=id, cara buat program terima sms, baca sms aplikasi delphi

Leave a Reply

53 Comments on "Program Terima SMS dengan Delphi Secara Live (Real Time)"

avatar
  Subscribe  
newest oldest most voted
Notify of
rohman
Guest

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

Renandatta
Guest

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
Guest

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
Guest

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…

bima
Guest

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
Guest

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
Guest

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

boy
Guest

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
Guest

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
Guest

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

KOTIB
Guest

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

KOTIB
Guest

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
Guest

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
Guest

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
Guest

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

agus
Guest

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.

error: Content is protected !!