--Selamat Berkunjung. Jika Ingin Mendapatkan Update Artikel Dari Fisika-Koe, Klik Button Follow Disebelah Kanan--

Sabtu, 24 November 2012

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 Memerlukan contoh Source Codenya silahkan KLIK DISINI
Sumber: http://saptaji.com/2011/06/11/program-terima-sms-dengan-delphi-secara-live-real-time/#comment-3612

4 komentar:

  1. gan sehubungan dengan TA saya, saya boleh minta tutorial bikin SMS GATEWAY pake delphi 7 ga..?
    ke email saya aja ya gan.. unuckhvrebex@gmail.com

    BalasHapus
    Balasan
    1. Cari tutor yang legkap dari buku. Banyak di toko buku tutorial tentang delphi!

      Hapus
  2. yah tu dia masalahnya,saya carinya sms gateway pake delphi, eh malah dapatnya pake gammu. tapi yah TQ aja lah nanti lebih giat lagi carinya..

    BalasHapus
  3. coba ke sini om http://saptaji.com/

    BalasHapus