&

Saturday, December 29, 2012

Membuat SMS GATEWAY dengan MSCOMM dan PORT DETECTION



Sekilas tentang sms gateway
Layanan pesan singkat atau Surat masa singkat (bahasa Inggris: Short Message Service disingkat SMS) adalah sebuah layanan yang dilaksanakan dengan sebuah telepon genggam untuk mengirim atau menerima pesan-pesan pendek. Pada mulanya SMS dirancang sebagai bagian daripada GSM, tetapi sekarang sudah didapatkan pada jaringan bergerak lainnya termasuk jaringan UMTS.

Sebuah pesan SMS maksimal terdiri dari 140 bytes, dengan kata lain sebuah pesan bisa memuat 140 karakter 8-bit, 160 karakter 7-bit atau 70 karakter 16-bit untuk bahasa Jepang, bahasa Mandarin dan bahasa Korea yang memakai Hanzi (Aksara Kanji / Hanja). Selain 140 bytes ini ada data-data lain yang termasuk. Adapula beberapa metode untuk mengirim pesan yang lebih dari 140 bytes, tetapi seorang pengguna harus membayar lebih dari sekali.
SMS bisa pula untuk mengirim gambar, suara dan film. SMS bentuk ini disebut MMS.
Pesan-pesan SMS dikirim dari sebuah telepon genggam ke pusat pesan (SMSC dalam bahasa Inggris), di sini pesan disimpan dan mencoba mengirimnya selama beberapa kali. Setelah sebuah waktu yang telah ditentukan, biasanya 1 hari atau 2 hari, lalu pesan dihapus. Seorang pengguna bisa mendapatkan konfirmasi dari pusat pesan ini.

SMS Gateway merupakan pintu gerbang bagi penyebaran Informasi dengan menggunakan SMS. Anda dapat menyebarkan pesan ke ratusan nomor secara otomatis dan cepat yang langsung terhubung dengan database nomor-nomor ponsel saja tanpa harus mengetik ratusan nomor dan pesan di ponsel anda karena semua nomor akan diambil secara otomatis dari database tersebut. Selain itu, dengan adanya SMS Gateway anda dapat mengcustomisasi pesan-pesan yang ingin dikirim. Dengan menggunakan program tambahan yang dapat dibuat sendiri, pengirim pesan dapat lebih fleksibel dalam mengirim berita karena biasanya pesan yang ingin dikirim berbeda-beda untuk masing-masing penerimanya.

SMS Gateway adalah jenis sms dua arah. Menariknya bahwa semua tarif yang diberlakukan adalah tarif sms normal sesuai dengan apa yang diberlakukan oleh operator. Karena sifatnya yang dua arah, maka jenis sms ini sangat cocok digunakan sebagai SMS Center sebuah organisasi atau perusahaan dalam rangka meningkatkan kualitas komunikasi antara anggota komunitas organisasi atau pegawai di dalam perusahaan.

Selain itu, dengan adanya SMS Gateway, Anda dapat mengatur pesan-pesan yang ingin dikirim. Dengan menggunakan program tambahan yang dapat dibuat sendiri, pengiriman pesan dapat lebih fleksibel dalam mengirim berita karena biasanya pesan yang ingin dikirim berbeda-beda untuk masing-masing penerimanya (kustomisasi pesan).

Kebutuhan Hardware
Untuk kebutuhan SMS Gateway tidak terlalu belebihan dan juga fleksibel karena bisa dibuat dengan :
1. PC maupun Notebook. Yang mutlak dibutuhkan adalah sebuah komputer tentunya ada USB atau port serial COM
2. Sebuah ponsel atau modem yang mendukung AT Command
3. Kabel data (Kabel berantarmuka serial yang dapat menghubungi ponsel dengan PC) atau dapat munggunakan InfraRed dan piranti lunak sebagai SMS Gateway.

Untuk menggunakan InfraRed anda membutuhkan sebuah ponsel yang juga memiliki fasilitas tsb, tapi tidak dianjurkan untuk kebutuhan SMS gateway karena komunikasi dengan InfraRed tidak terlalu baik (jika tergeser gampang putus).


Kebutuhan Software
Disini penulis menggunakan bahasa pemrograman Visual Basic 6.0 dan untuk pengertian perintah yang dipakai menggunakan AT Command. AT Command adalah perintah-perintah yang digunakan dalam komunikasi dengan serial port. Dengan AT Command kita dapat mengetahui vendor dari Handphone yang digunakan, kekuatan sinyal, membaca pesan yang ada pada SIM Card, megirim pesan, mendeteksi pesan SMS baru yang masuk secara otomatis, menghapus pesan pada SIM Card dan masih banyak lagi.

Dalam program SMS Gateway yang akan kita buat nanti, tidak semua perintah AT Command digunakan. Kita hanya menggunakan beberapa perintah AT yang ada hubungannya dengan sistem kerja dari program SMS Gateway. Adapun perintah yang akan digunakan adalah sebagai berikut :

AT Command - Keterangan
AT Mengecek apakah Handphone telah terhubung
AT+CMGF Untuk menetapkan format mode dari terminal
AT+CSCS Untuk menetapkan jenis encoding
AT+CNMI Untuk mendeteksi pesan SMS baru masuk secara otomatis
AT+CMGL Membuka daftar SMS yang ada pada SIM Card
AT+CMGS Mengirim pesan SMS
AT+CMGR Membaca pesan SMS
AT+CMGD Menghapus pasan SMS
ATE1 Mengatur ECHO
ATV1 Mengatur input dan output berupa naskah
AT+CGMI Mengecek Merek HP
AT+CGMM Mengecek Seri HP
AT+CGMR Mengecek Versi Keluaran HP
AT+CBC Mengecek Baterai
AT+CSQ Mengecek Kualitas Sinyal
AT+CCLK? Mengecek Jam (waktu) pada HP
AT+CALM=< n > Mengecek Suara/dering HP saat di Telepon (ada Telepon Masuk)

‘n’ adalah adalah angka yang menunjukkan jenis dering
0 = berdering
1 dan 2 = Silent (Diam)

AT^SCID Mengecek ID SIM CARD
AT+CGSN Mengecek Nomor IMEI
AT+CLIP=1 Menampilkan nomor telepon pemanggil
AT+CLCC Menampilkan nomor telepon yang sedang memanggil
AT+COPN Menampilkan Nama Sumua Operator di dunia
AT+COPS? Menampilkan nama operator dari SIM yang digunakan
AT+CPBR=< n > Membaca nomor telepon yang disimpan pada buku telepon (SIM CARD)
‘n’ adalah nomor urut penyimpanan
AT+CPMS=< md > Mengatur Memori dari HP
‘md’ adalah memori yang digunakan
ME = Memori HP
SM = Memori SIM CARD



Langkah-langkah pengcodingan:
Nah sekarang buka Program Microsoft Visual Basic Anda dan ikuti langkah berikut ini:
1. Buka aplikasi VB 6 anda dan pilih standard exe lalu open
2. Tambahkan 1 modul dengan cara klik menu project - add module lalu tambahkan koding dibawah ini :

Option Explicit

Public Function RemoveInternationalDiallingCode _
(ByVal tTelNumber As String) As String
RemoveInternationalDiallingCode = "0" & Mid(tTelNumber, 4)
End Function


Public Function GetSMSNum(ByVal tSMSNotification As String) As String
Dim lCRPos As Long


lCRPos = InStrRev(tSMSNotification, vbCr)
If lCRPos > 0 Then GetSMSNum = Mid(tSMSNotification, lCRPos - 2, 2)
If Left(GetSMSNum, 1) = "," Then GetSMSNum = Right(GetSMSNum, 1)
End Function


Public Function ReadSMS(comms As MSComm, _
ByVal tSMSNum As String, tMessage As String, _
tSender As String, tDate As String, _
tTime As String, bRead As Boolean) As Boolean
Dim tChar As String * 1
Dim i As Long
Dim tRead As String
Dim lQuoteNum As Long
Dim tDateTime As String
Dim tData As String

Const TIMEOUT = 10000
On Error GoTo ErrHandler

tData = "AT+CMGR=" & tSMSNum & vbCr
comms.InBufferCount = 0
comms.Output = tData
tData = ""


i = timeGetTime
Do While timeGetTime - i <= TIMEOUT And InStr(tData, "OK" & vbCrLf) = 0 And InStr(tData, "ERROR" & vbCrLf) = 0
DoEvents
If comms.InBufferCount > 0 Then
tChar = comms.Input
tData = tData & tChar
End If
Loop


If InStr(tData, "ERROR") = 0 And tData <> "" Then
For i = 1 To Len(tData)
tChar = Mid(tData, i, 1)
If tChar = """" Then lQuoteNum = lQuoteNum + 1
If lQuoteNum = 1 And tChar <> """" Then tRead = tRead & tChar
If lQuoteNum = 3 And tChar <> """" Then tSender = tSender & tChar
If lQuoteNum = 5 And tChar <> """" Then tDateTime = tDateTime & tChar
If lQuoteNum = 6 And tChar <> """" Then tMessage = tMessage & tChar
Next i


bRead = (tRead = "REC READ")
tDate = Left(tDateTime, 8)
tTime = Mid(tDateTime, 10, 8)
tMessage = Mid(tMessage, 3)
tMessage = Mid(tMessage, 1, InStr(tMessage, vbCr) - 1)
ReadSMS = True
End If
Exit Function


ErrHandler:
ReadSMS = False
End Function


Public Function DeleteAllSMSes(comms As MSComm) As Boolean
Dim i As Long


For i = 1 To 15
DeleteAllSMSes = InStr(TransmitAndReceiveData(comms, "AT+CMGD=" & i & vbCr), "OK")
Next i
End Function


Public Function DeleteSMS(comms As MSComm, ByVal lSMSNum As Long) As Boolean
DeleteSMS = InStr(TransmitAndReceiveData(comms, "AT+CMGD=" & lSMSNum & vbCr), "OK")
End Function


Public Function SendSMS(comms As MSComm, ByVal tSMSNum As String, ByVal tMessage As String) As Boolean
SendSMS = InStr(TransmitAndReceiveData(comms, "AT+CMGS=" & """" & tSMSNum & """" & vbCr & tMessage & Chr(26)), "OK")
End Function


Public Function TestModem(comms As MSComm) As String
TestModem = TransmitAndReceiveData(comms, "AT")
End Function


Public Function ManufacturerInfo(comms As MSComm) As String
ManufacturerInfo = TransmitAndReceiveData(comms, "AT+CGMI")
End Function


Public Function ModelInfo(comms As MSComm) As String
ModelInfo = TransmitAndReceiveData(comms, "AT+CGMM")
End Function


Public Function FirmwareInfo(comms As MSComm) As String
FirmwareInfo = TransmitAndReceiveData(comms, "AT+CGMR")
End Function


Public Function IMEIInfo(comms As MSComm) As String
IMEIInfo = TransmitAndReceiveData(comms, "AT+CGSN")
End Function


Public Function IMSIInfo(comms As MSComm) As String
IMSIInfo = TransmitAndReceiveData(comms, "AT+CIMI")
End Function


Public Function EF_CCIDInfo(comms As MSComm) As String
EF_CCIDInfo = TransmitAndReceiveData(comms, "AT+CCID")
End Function


Public Function NetworkRegStatus(comms As MSComm) As String
NetworkRegStatus = TransmitAndReceiveData(comms, "AT+CREG?")
End Function


Public Function AvailablePLMNs(comms As MSComm) As String
AvailablePLMNs = TransmitAndReceiveData(comms, "AT+COPS?")
End Function


Public Function NetworkFieldStrength(comms As MSComm) As String
NetworkFieldStrength = TransmitAndReceiveData(comms, "AT+CSQ")
End Function


Public Function MainCellMainParams(comms As MSComm) As String
MainCellMainParams = TransmitAndReceiveData(comms, "AT+CCED=0")
End Function


Public Function TransmitAndReceiveData(comms As MSComm, ByVal tData As String) As String
Dim lTime As Long

Const TIMEOUT = 10000
tData = tData & vbCr

With comms
.InBufferCount = 0
.Output = tData
tData = ""


lTime = timeGetTime
tData = ""
Do While timeGetTime - lTime <= TIMEOUT And InStr(tData, "OK") = 0 And InStr(tData, "ERROR" & vbCrLf) = 0
DoEvents
If .InBufferCount > 0 Then tData = tData & .Input
Loop
End With


TransmitAndReceiveData = tData
End Function


4. Tambahkan komponen mscomm punyanya microsoft
5. Set boudrate dan lainnya sesuai dengan setingan HP atau modem anda lalu pada form load isikan perintah inisialisasi modem/hp.
6. Silahkan test send sms dengan menggunakan fungsi SendSMS dan silahkan coba-coba fungsi lainnya.
7. Selamat mencoba.



Mendeteksi Port Modem Secara Otomatis

untuk mengetahui port modem Anda lakukan langkah di bawah ini:
  1. Klik tombol start (sebelah kiri bawah)
  2. Selanjutnya klik Settings >> Control Panel >> System
  3. Klik tab Hardware Klik tombol Device Manager
  4. Klik Node Ports (COM & LPT)
  5. Carilah di sana akan ada port modem Wavecom Anda.
Sungguh merepotkan sekali, setiap kali port modemnya berubah kita harus selalu mengulangi dan mengulangi langkah-langkah di atas. Mulai saat ini, tinggalkan cara di atas, dan beralihlah pada deteksi port modem secara otomatis.Adapun kode untuk mendeteksi port modem secara otomatis menggunakan VB6 adalah sebagai berikut: 

Deteksi port modem secara otomatis
Option Explicit

Dim strBuffer As String
Dim intPortNumber As String

Private Sub Command2_Click()
    On Error Resume Next
    Dim i As Integer
    For i = 1 To 20
    If MSComm1.PortOpen Then MSComm1.PortOpen = False
        intPortNumber = i
        MSComm1.CommPort = i
        MSComm1.PortOpen = True
        MSComm1.Output = "AT" & vbCrLf
        Wait Me, 50
    Next
End Sub

Private Sub Form_Load()
    With MSComm1
        .Settings = "115200,n,8,1"
        .Handshaking = comRTS
        .RTSEnable = True
        .DTREnable = True
        .RThreshold = 1
        .SThreshold = 1
        .InputMode = comInputModeText
        .InputLen = 0
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    End
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            strBuffer = strBuffer & MSComm1.Input
    End Select
    Do
        strBuffer = strBuffer & MSComm1.Input
    Loop While MSComm1.InBufferCount
    If InStr(1, strBuffer, "OK") > 0 Then
        Caption = "COM" & intPortNumber
        Text1.Text = intPortNumber
    End If
End Sub




Menambahkan Fitur Auto Reply


Adapun contoh kode VB6 membalas SMS otomatis adalah seperti di bawah ini: 

Option Explicit

Dim strBuffer As String
Dim blnFirstLoad As Boolean

Private Sub Command1_Click()
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    With MSComm1
        .PortOpen = True
        .Output = "AT+CMGS=" & Chr(34) & TxtNumber.Text & Chr(34) & vbCrLf
        .Output = TxtMessage.Text & Chr(26)
    End With
End Sub

Private Sub Form_Load()
    With MSComm1
        .CommPort = 7 'port disesuaikan atau beri kode auto detect port modem
        .Settings = "115200,N,8,1"
        .Handshaking = comRTS
        .RTSEnable = True
        .DTREnable = True
        .RThreshold = 1
        .SThreshold = 1
        .NullDiscard = True
        .InputMode = comInputModeText
        .InputLen = 0
        .PortOpen = True
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then
        MSComm1.PortOpen = False
    End If
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            strBuffer = strBuffer & MSComm1.Input
    Do
        strBuffer = strBuffer & MSComm1.Input
    Loop While MSComm1.InBufferCount
    If InStr(1, strBuffer, "+CMGR") Then
        If InStr(1, strBuffer, "OK") Then
            Text1.Text = strBuffer
        End If
    End If
    If InStr(1, strBuffer, "+CMTI") > 0 Then
        If Right(strBuffer, 1) = vbLf Then
            Dim s() As String
            s = Split(strBuffer, ",")
            Debug.Print s(UBound(s))
             ReadSMSByIndex Trim$(s(UBound(s)))
             Delay 1
             Command1_Click 'Auto reply
            strBuffer = ""
        End If
    End If
    End Select
End Sub

Private Sub ReadSMSByIndex(Index As Integer)
    strBuffer = ""
    MSComm1.Output = "AT+CMGR=" & Index & vbCrLf 'baca SMS yang berada di index ke-1
End Sub

Private Sub Delay(ByVal HowLong As Date)
    Dim endDate As Date
    endDate = DateAdd("s", HowLong, Now)
    While endDate > Now
        DoEvents
    Wend
End Sub






Mengirim SMS Disertai Verifikasi Terkirim - VB Source Code



Option Explicit

Dim strBuffer As String

Private Sub Command1_Click()
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    With MSComm1
        .CommPort = 7
        .Settings = "115200,N,8,1"
        .Handshaking = comRTS
        .RTSEnable = True
        .DTREnable = True
        .RThreshold = 1
        .SThreshold = 1
        .InputMode = comInputModeText
        .InputLen = 0
        .PortOpen = True
    End With
    MSComm1.Output = "AT+CMGS=" & Chr(34) & TxtNumber.Text & Chr(34) & vbCrLf
    Delay 1
    MSComm1.Output = TxtMessage.Text & Chr(26)
    If WaitForSuccess Then
        MsgBox "SMS telah terkirim", vbInformation + vbOKOnly
    Else
        MsgBox "SMS gagal terkirim", vbCritical, "SMS Gagal"
    End If
    
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then
        MSComm1.PortOpen = False
    End If
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            strBuffer = strBuffer & MSComm1.Input
    End Select
    Debug.Print strBuffer
End Sub

Private Function WaitForSuccess() As Boolean
    Dim i As Integer
    Dim strInput As String
    Dim strPart As String
    Dim c As String, b As String
    For i = 1 To 5
        Do
            Delay 1
            c = strBuffer
            strBuffer = ""
            If c = "" Then Exit Do
            b = strInput & c
        Loop
        strPart = b
        strInput = strInput & strPart
        If InStr(1, strInput, vbCrLf & "OK" & vbCrLf) > 0 Then Exit For
        If strPart = "" Then
            Delay 1
        End If
    Next
    WaitForSuccess = InStr(1, strInput, vbCrLf & "OK" & vbCrLf) > 0
End Function

Private Sub Delay(ByVal HowLong As Date)
    Dim endDate As Date
    endDate = DateAdd("s", HowLong, Now)
    While endDate > Now
        DoEvents
    Wend
End Sub
 
 

AT Command Tester Sederhana

Option Explicit 

Dim strBuffer As String 

Private Sub cmdSend_Click()
    txtResult.Text = ""
    txtProcess.Text = ""
    strBuffer = ""
    If UCase$(Left$(txtATCommand.Text, 2)) <> "AT" Then
        MSComm1.Output = txtATCommand.Text & Chr(26)
    Else
        MSComm1.Output = txtATCommand.Text & vbCrLf
    End If
End Sub

Private Sub Form_Load()
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    With MSComm1
        .CommPort = 7
        .Settings = "115200,N,8,1"
        .Handshaking = comRTS
        .RTSEnable = True
        .DTREnable = True
        .RThreshold = 1
        .SThreshold = 1
        .InputMode = comInputModeText
        .InputLen = 0
        .PortOpen = True
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then
        MSComm1.PortOpen = False
    End If
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            strBuffer = strBuffer & MSComm1.Input
    End Select
    txtProcess.Text = strBuffer
    txtProcess.SelStart = Len(txtProcess.Text)
    Do
        strBuffer = strBuffer & MSComm1.Input
    Loop While MSComm1.InBufferCount
    If InStr(1, strBuffer, "OK") > 0 Then
        txtResult.Text = strBuffer
        txtResult.SelStart = Len(txtResult.Text)
    ElseIf InStr(1, strBuffer, "ERROR") Then
        txtResult.Text = strBuffer
        strBuffer = ""
    End If
End Sub
 
 
 

Mengirim SMS Menggunakan Modem Wavecom - VB6 Code

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Sub Command1_Click() With MSComm1 .CommPort = 7 'Port disesuaikan terhadap modem Wavecom yang terdeteksi .Settings = "115200,n,8,1" .Handshaking = comRTS .RTSEnable = True .DTREnable = True .RThreshold = 1 .SThreshold = 1 .InputMode = comInputModeText .InputLen = 0 .PortOpen = True End With MSComm1.Output = "AT+CMGS=" & Chr(34) & TxtNumber.Text & Chr(34) & vbCrLf Sleep 1000 MSComm1.Output = TxtMessage.Text & Chr(26) End Sub
Option Explicit

Dim strBuffer As String

Private Sub Form_Load()
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    With MSComm1
        .CommPort = 3
        .Settings = "115200,N,8,1"
        .Handshaking = comRTS
        .RTSEnable = True
        .DTREnable = True
        .RThreshold = 1
        .SThreshold = 1
        .InputMode = comInputModeText
        .InputLen = 0
        .PortOpen = True
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen = True Then
        MSComm1.PortOpen = False
    End If
End Sub

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            strBuffer = strBuffer & MSComm1.Input
            Do
                strBuffer = strBuffer & MSComm1.Input
            Loop While MSComm1.InBufferCount
            If InStr(1, strBuffer, "+CMTI") > 0 Then
                If Right(strBuffer, 1) = vbLf Then
                    Text1.Text = strBuffer
                End If
            End If
    End Select
End Sub
 
Sampai dengan kode di atas, apabila ada SMS baru, maka modem akan memberitahukan kepada kita dengan diawali "+CMTI" misalnya: +CMTI: "SM",11. SM artinya memory yang digunakan adalah SIM card, sedangkan angka 11 mewakili indeks dari SMS tersebut, jadi apabila kita ingin mengakses/membaca SMS tersebut harus menggunakan 11 sebagai indeksnya. Gantilah kode yang terdapat dalam event MSComm1_OnComm() diatas dengan kode dibawah ini, apabila Anda berkeinginan membaca isi SMS baru tersebut. 

 
Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive
            strBuffer = strBuffer & MSComm1.Input
            Do
                strBuffer = strBuffer & MSComm1.Input
            Loop While MSComm1.InBufferCount
            If InStr(1, strBuffer, "OK") > 0 Then
                Text1.Text = strBuffer
                Dim d() As String
                d = Split(strBuffer, vbCrLf)
                strBuffer = ""
            End If
            If InStr(1, strBuffer, "+CMTI") > 0 Then
                Do
                    strBuffer = strBuffer & MSComm1.Input
                Loop While MSComm1.InBufferCount
                If Right(strBuffer, 1) = vbLf Then
                    Text1.Text = strBuffer
                    Dim s() As String
                    s = Split(strBuffer, ",")
                    ReadSMSByIndex Trim$(s(UBound(s)))
                End If
            End If
    End Select
End Sub

Private Sub ReadSMSByIndex(Index As Integer)
    strBuffer = ""
    MSComm1.Output = "AT+CMGR=" & Index & vbCrLf 'baca SMS yang berada di index ke-1
End Sub
Setelah kita modifikasi, maka akan menghasilkan: 
+CMGR: "REC UNREAD","+6281315673456",,"12/06/26,01:43:51+28"
Test SMS. Test SMS.

OK
 

Lakukan parse (urai, pisah, memilih dan memilah) jika Anda terganggu dan tidak nyaman dengan perolehan response data yang selalu diawali dengan "+CMGR: "REC UNREAD" kemudian koma dan diakhiri dengan kata "OK". Terutama jika Anda bermaksud memasukan data tersebut ke dalam objek ListView atau MSHFlexgrid, dan lain-lain, demikian pula jika bermaksud menghubungkannya dengan database Access, SQLite, MySQL, atau database apa saja tergantung selera Anda, tidak ada paksaan dalam hal ini


Perbedaan fungsi sleep kali ini dengan fungsi sleep sebelumnya adalah:  Fungsi sleep menggunakan Sleep Kernel32.dll: 
  • Mem-freeze GUI (membekukan tampilan)
  • Hitungan dalam millisecond
Fungsi sleep kali ini (lebih tepatnya delay time): 
  • Tidak mem-freeze GUI
  • Hitungan dalam second
Adapun fungsi sleep atau wait tanpa fungsi API adalah sebagai berikut: 
Private Sub Sleep(ByVal HowLong As Date)
    Dim endDate As Date
    endDate = DateAdd("s", HowLong, Now)
    While endDate > Now
        DoEvents
    Wend
End Sub
Jika Anda mau bereksperimen maka buatlah kodenya seperti di bawah ini kemudian bandingkan antara fungsi sleep Kernel32.dll dengan fungsi sleep tanpa API.
Option Explicit

'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
    Label1.Caption = "Mulai menjalankan fungsi sleep atau wait"
    Label1.Refresh
    Sleep 5 'sleep/wait/hentikan eksekusi kode ke baris berikutnya selama 5 detik
    Label1.Caption = "Terhenti selama 5 detik"
End Sub

Private Sub Command2_Click()
    Dim frm As New Form1
    frm.Show
End Sub

Private Sub Timer1_Timer()
    Static i As Integer
    Caption = i
    i = i + 1
End Sub

Private Sub Sleep(ByVal HowLong As Date)
    Dim endDate As Date
    endDate = DateAdd("s", HowLong, Now)
    While endDate > Now
        DoEvents
    Wend
End Sub
Demikianlah seputar fungsi sleep atau wait, menggunakan API dan tanpa menggunakan API.
Option Explicit

Private Function Sleep(mSecs As Long) As Double
    Dim Duration!
    Duration! = Timer + mSecs
    Do Until Timer > Duration!
        DoEvents
    Loop
End Function

Private Sub Command1_Click()
    Sleep 0.9
    MsgBox "Test"
End Sub



SMS Gateway: Contoh Mengirim Kode USSD

USSD merupakan singkatan dari Unstructured Supplementary Service Data. USSD biasanya diawali dengan tanda bintang (*) dan diakhiri dengan tanda pagar (#). Contoh USSD: 
  • *888#
  • *101#
  • *109*72348937857623#
Dibawah ini merupakan contoh mengirim kode USSD, yang digunakan untuk mengecek pulsa Simpati: 
Option Explicit

Dim strBuffer As String

Private Sub Command1_Click()
    Text1.Text = ""
    strBuffer = ""
    If MSComm1.PortOpen = True Then MSComm1.PbortOpen = False
    With MSComm1
        .CommPort = 3
        .Settings = "115200,N,8,1"
        .Handshaking = comRTS
        .RTSEnable = True
        .DTREnable = True
        .RThreshold = 1
        .SThreshold = 1
        .InputMode = comInputModeText
        .InputLen = 0
        .PortOpen = True
        .Output = "AT+CUSD=1," & Chr(34) & "*888#" & Chr(34) & ",15" & vbCrLf
    End With
End Sub

Private Sub MSComm1_OnComm()
    strBuffer = strBuffer & MSComm1.Input
    Dim x As String
    If InStr(1, strBuffer, ",15") Then
        Dim s() As String
        s = Split(strBuffer, vbCrLf)
        Dim i As Integer
        For i = 0 To UBound(s)
            If InStr(1, s(i), "+CUSD") Then
                x = s(i)
            End If
        Next
    End If
    If x <> "" Then
       s = Split(x, ",")
       Text1.Text = Mid$(s(1), 2, Len(s(1)) - 2)
    End If
End Sub
Maka hasilnya adalah seperti gambar di bawah ini:
VB6 USSD Cek Pulsa
sumber  : www.seven-technology.blogspot.com  , www. source-code-sms-gateway.blogspot.com

3 comments:

FNK said...

bro itu codingan masukin'a kmn, trus di form'a kudu masukin yg mana, sorry msh newbie . tolong penjelasan'a ya ..

JR said...

klau untk delphi 7 gmna gan?

Unknown said...

thank you for this wonderful article on bulk sms gateway

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Best CD Rates