Wednesday, March 7, 2007

SMS Gateway Part 2

MENGGUNAKAN RS232 DENGAN BAHASA PROGRAM JAVA

Bahasa pemrograman java mendukung komponen RS232 tersebut. Yang disebut dengan javacommapi yang terdiri dari comm.jar, javax.comm.properties, dan win32com.dll yang dapat diunduh/download pada web site http://java.sun.com/products/javacomm/index.jsp.

Untuk system operasi Ms. Windows 2000 dan XP, hasil install-an sering kali bermasalah. Cara penanganannya adalah sebagai berikut :

1. Copy comm.jar pada direktori \jre\lib\ext

2. Copy win32com.dll pada direktori \jre\bin

3. Copy javax.comm.properties pada direktori \jre\lib

Hal-hal yang perlu diketahui pada komunikasi yaitu kecepatan pengiriman, data bits, parity, stop bits, dan flow control.

1. Kecepatan pengiriman, 300 bps sampai dengan 921600

2. Data bits, 5 sampai dengan 8 bits

3. Parity terdiri dari even, odd dan none

4. Stop bits, 1, 1.5 dan 2

5. Flow Control None

Pada salah satu contoh program pada web site www.sun.com untuk menggunakan alat RS232 adalah SimpleRead.java dan SimpleWrite.java. SimpleRead.java adalah program untuk membaca data yang didapatkan dari RS232 dan SimpleWrite.java adalah program untuk mengirimkan data melalui RS232.

Dengan catatan kecepatan, data bit, stop bit, dan pariti harus sama antara satu dengan lainnya. Sebagai contoh jalankan program program penerima di komputer penerima dan program pengirim dikomputer pengirim.

Program Penerima

/*

* @(#)SimpleRead.java 1.12 98/06/25 SMI

* Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.

* Program untuk Menerima data

*/

import java.io.*;

import java.util.*;

import javax.comm.*;

public class SimpleRead implements Runnable, SerialPortEventListener {

static CommPortIdentifier portId;

static Enumeration portList;

InputStream inputStream;

SerialPort serialPort;

Thread readThread;

public static void main(String[] args) {

//Mengidentifikasikan jumlah port pada komputer

portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) {

portId = (CommPortIdentifier) portList.nextElement();

if (portId.getPortType()

== CommPortIdentifier.PORT_SERIAL) {

//yang dibuka hanya port pertama atau COM1

if (portId.getName().equals("COM1")) {

//jika menggunakan Unix

//if (portId.getName().equals("/dev/term/a")) {

SimpleRead reader = new SimpleRead();

}

}

}

}

public SimpleRead() {

try {

serialPort = (SerialPort)

portId.open("SimpleReadApp", 2000);

} catch (PortInUseException e) {}

try {

inputStream = serialPort.getInputStream();

} catch (IOException e) {}

try {

serialPort.addEventListener(this);

} catch (TooManyListenersException e) {}

serialPort.notifyOnDataAvailable(true);

try {

//speed 9600, databit 8, stopbit 1, parity none

serialPort.setSerialPortParams(9600,

SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,

SerialPort.PARITY_NONE);

} catch (UnsupportedCommOperationException e) {}

readThread = new Thread(this);

readThread.start();

}

public void run() {

try {

Thread.sleep(20000);

} catch (InterruptedException e) {}

}

public void serialEvent(SerialPortEvent event) {

switch(event.getEventType()) {

case SerialPortEvent.BI:

case SerialPortEvent.OE:

case SerialPortEvent.FE:

case SerialPortEvent.PE:

case SerialPortEvent.CD:

case SerialPortEvent.CTS:

case SerialPortEvent.DSR:

case SerialPortEvent.RI:

case SerialPortEvent.OUTPUT_BUFFER_EMPTY:

break;

case SerialPortEvent.DATA_AVAILABLE:

//Menangkap data yang masuk ke komputer

byte[] readBuffer = new byte[20];

try {

while (inputStream.available() > 0) {

int numBytes = inputStream.read(readBuffer);

}

//tampilkan ke layar

System.out.print(new String(readBuffer));

} catch (IOException e) {}

break;

}

}

}

Program Pengirim

/*

* @(#)SimpleWrite.java 1.12 98/06/25 SMI

* Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.

* Program Untuk Mengirim Data

*/

import java.io.*;

import java.util.*;

import javax.comm.*;

public class SimpleWrite {

static Enumeration portList;

static CommPortIdentifier portId;

static String messageString = "Hello, world!\n";

static SerialPort serialPort;

static OutputStream outputStream;

public static void main(String[] args) {

portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements()) {

portId = (CommPortIdentifier) portList.nextElement();

if (portId.getPortType() ==

CommPortIdentifier.PORT_SERIAL) {

// if (portId.getName().equals("COM1")) {

if (portId.getName().equals("/dev/term/a")) {

try {

serialPort = (SerialPort)

portId.open("SimpleWriteApp", 2000);

} catch (PortInUseException e) {}

try {

outputStream = serialPort.getOutputStream();

} catch (IOException e) {}

try {

//speed 9600, databit 8,

//stopbit 1, parity none

serialPort.setSerialPortParams(9600,

SerialPort.DATABITS_8,

SerialPort.STOPBITS_1,

SerialPort.PARITY_NONE);

} catch (UnsupportedCommOperationException e) {}

try {

//kirim Hello, World!

outputStream.write(messageString.getBytes());

} catch (IOException e) {}

}

}

}

}

}


RS232 DAN MODEM

Apabila interface RS232 di gunakan secara lengkap, maka penggunaannya lebih cenderung pada penggunaan modem. Dan pada modem, umumnya, telah disediakan perintah-perintah yang dapat digunakan oleh pengembang program. Perintah–perintah tersebut disebut dengan sebutan AT Command. Adapun perintah AT, bukan At atau at, adalah sebagai berikut :

+++

Mode data dirubah menjadi mode perintah tanpa harus melakukan pemutusan hubungan. Perintah ini harus disertai dengan Enter

A/

Mengulangi perintah terakhir

ATA

Menjawab panggilan secara manual

ATBn

Memilih protocol Bell or CCITT (ITU-T), model ini hanya berpengaruh pada modem dengan model V.22 atau V.21

n=0, CCITT V.22 atau V.21

n=1, Bell212 atau 103

ATDTn

Melakukan kontak ke nomor telpon

Contoh : ATDT021777777

ATEn

Perintah Echo. Semua perintah yang dilakukan akan tampil kembali pada layar

n=0, menon-aktifkan echo

n=1, mengaktifkan echo

ATHn

Hangup

n=0, Hang Up

n=1, off

ATIn

Pendeteksi identitas pabrikan dan setting

n=0, product code/merk

n=1, pengkalkulasian pertama/IMEI

n=2..3, prakiraan

n=4, OEM String

n=5..11, nilai ok

n=12, Pengkakulasian ROM

n=13, Versi RC

n=14, Nama Pabrik Pembuat

n=15, Pilihan Negara

n=17, GSM Option

n=18, Cek GSM Support

ATLn

Speaker Volume

n=0, Suara Terkecil

n=1, Suara Kecil

n=2, Suara Sedang

n=3, Suara Keras

ATMn

Pengontrolan Speaker

n=0, speaker tidak bersuara

n=1, speaker aktif jika terdapat penerimaan/pengiriman

n=2, speaker selalu aktif

n=3 speaker hanya aktif jika modem menjawab

ATQn

Respon balik modem ke computer

n=0, modem melakukan respon pada computer

n=1, modem tidak melakukan respon

ATSn

Melakukan penge-set-an dan membaca register atau melakukan autoanswer

ATSn=x, Melakukan penge-set-an variable n dengan nilai 1

ATSn?, membaca register n

ATZn

Reset modem

n=0, restore ke profil 0

n=1, restore ke profil 1

Perintah-perintah modem yang terdapat pada tabel merupakan sebagian dari perintah modem.

Tuesday, March 6, 2007

SMS Gateway Part 1






Memahami Cara Kerja SMS
•SMS ( Short Message Service ) merupakan salah satu fitur dari GSM yang dikembangkan dan distandarisasi oleh ETSI. SMS yang biasa kita kirim , biasanya tidak langsung ke nomor tujuan tetapi terlebih dahulu ke sms center (SMSC) dengan prinsip Store and Forward, setelah itu baru ke nomor tujuan.
•Dgn SMSC , kita dapat mengetahui status dari SMS yang dikirim.
MENGENAL FORMAT PDU
•Format PDU adalah format yang digunakan dalam penerimaan dan pengiriman sms.
•Dalam hal ini , terdapat 2 mode yaitu mode teks dan mode Protocol Data Unit (PDU ). Mode teks adalah format pesan dalam bentuk teks asli yang ditulis pada saat mengirim pesan. Dan mode teks ini adalah hasil pengkodean dari format PDU. Sedangkan format PDU adalah format pesan dalam bentuk oktet heksadesimal dan oktetsemidesimal dengan panjang mencapai 170 (7 bit) atau 140 ( 8 bit ) karakter. Pada pengiriman pesan terdapat 2 jenis mobile yaitu Mobile Terminal ( Hp penerima ) dan Mobil Originated ( Hp pengirim ) .
SMS PDU PENGIRIM ( Mobile Originated )
•SMS PDU Pengirim adalah pesan yang dikirim dari handphone ke terminal yang kemudian di kirimkan ke SMSC.
•Pesan yang dikirimkan dari handphone terminal masih dalam bentuk teks, sedangkan dalam pengiriman ke SMSC harus dalam bentuk PDU. Untuk itu sebelum dikirim , terminal atau handphone akan melakukan konversi dari perubahan dari format teks menjadi format PDU , proses in disebut proses encodec.
•Adapun skema dari format PDU pengirim pesan telah ditetapkan dari ETSI sebagai berikut :
SCA| PDU type| MR|DA| PID| DCS| VP|UDL| UD
SMS PDU PENGIRIM ( Mobile Originated )
•Example :
Kita mengirim pesan SMS ke nomor 628122898840 dengan pesan “ Pesan Pendek “ dengan batas waktu pengiriman ( waktu penyimpanan pesan di SMSC , jk no tujuan tidak dapat menerima pesan ) adalah 5 hari. Maka format PDU adalah :
0011000C912618229888040000AB0CD0F23CEC06C1CB6E72790D
Service Center Address (SCA)
•SCA adalah informasi dari alamat ( nomor ) SMSC. SCA memiliki 3 komponen utama yaitu len, type of nunmber, dan service center number. Dalam pengiriman pesan SMS, nomor SMSC tidak dicantumkan.
Service Center Address (SCA)
Oktet
Keterangan
Hasil
Len
Panjang informasi SMSC dalam oktet
00
Type of Number
Format nomor dari SMSC
81 Hexa = format lokal
91 hexa = format internasional

Service Center Number
Nomor SMSC dari operator pengirim. Jika panjangnya ganjil mk pada karakter terakhir daitambahkan 0F hexa.

Service Center Address
Jadi , pada SCA hasilnya adalah 00
PDU Type
•Nilai default dari PDU type untuk SMS adalah 11 hexa , yang memiliki arti bahwa 1 hexa = 00000100
Bit No
7
6
5
4
3
2
1
0
Nama
RP
UDHI
SRR
VPF
VPF
RD
MTI
MTI
Nilai
0
0
0
1
0
0
0
1
•KETERANGAN
RP : Reply Path. Parameter ini yang menunjukan bahwa alur jawaban ada
UDHI : User Data Header Indicator. Bit ini bernilai 1 jika data pengirim di mulai dengan suatu judul / tema.
KETERANGAN
•SRR : Status Report Request. Bit ini bernilai 1 jika laporan status pengiriman diminta.
•VPF : Validity Period Report. Format dari batas waktu pengiriman pesan jika gagal diterima.
00 Jika Pesan tidak disimpan di SMSC
10 Format Relatif ( satu Oktet )
01 Format Enhaced ( tujuh Oktet )
11 format absolut ( tujuh Oktet)
•RD : Reject Duplicates. Parameter yang menandakan ya atau tidaknya S Service Center akan menerima suatu pengiriman pesan SMS untuk suatu pesan yang masih di simpan dalam Service Center tersebut. Ia akan mempunya MR dan DA yang sama sebagai pesan dikirimkan dari OA yang sama.
•MTI : Message Type Indicator. Bit bernilai 0 untuk menunjukan bahwa PDU ini adalah suatu SMS-DELIVER.
Message Reference ( MR )
•Message Referance adalah acuan dari pengaturan pesan SMS. Untuk membiarkan pengaturan pesan SMS dilakukan sendiri oleh handphone tujuan , maka nilai yang di berikan adalah “00” . Jadi , pada Message Reference hasilnya adalah 00.
Desitnation Address ( DA )
•DA adalah alamat (nomor ) tujuan yang terdiri atas panjangnya nomor tujuan (len) , format dari nomor tujuan (Type Number) , dan nomor tujuan (Destination Number).
Oktet
Nilai
Hasil
Len
12
0C
Type of Number
Format Internasional
91
Destination number
628122898840
261822988804
Pada DA hasilnya 0C91261822988804
Protocol Identifier
•Protocol Identifier adalah tipe atau format dari cara pengiriman pesan, yang biasanya diaturdari handphone pengiriman. Misalnya tipe Standard Text, Fax, E-mail, Telex, X400, dll.
•Nilai default dari PID adalah 00= “Standard Text”. Pada contoh ini, pesan SMS yang akan dikirim menggunakan format teks standar , jadi pada Protocol Identifier hasilnya adalah 00.
Data Coding Scheme
•Data Coding Scheme adalah rencana dari pengkodean data untuk menetukan kelas dai pesan tersebut apakan berupa SMS teks standar , Flash SMS , atau Binking SMS. Pada contoh ini pesan SMS yang dikirm berupa teks standar, jadi pada Data Coding Scheme hasilnya adalah 00.
Validity Period (VP)
•Validity Peroid adalah lama waktu pesan SMS disimpan di SMSC apabila pesan tersebut gagal diterima oleh handphone penerima.
Validity Period
Waktu VP
Nilai VP
5 menit – 720menit ( 12 jam )
( Waktu VP / 5 ) - 1
12,5 jam – 24 jam
143 + ((Waktu VP – 12)*2)
2 – 30 hari
166 + Waktu VP
Lebih dari 4 minggu
192+ Waktu VP
Validity Period
•Pada contoh di atas, waktu VP-nya5 hari , maka nilai VP adalah 166 + 5 = 171d.= ABh. Jadi pada Validity Period hasilnya adalah AB.
User Data Length
•User Data Length adalah panjangnya pesan SMS yang akan dikirim dalam bentuk teks Standar . Pada contoh ini pesan SMS yang dikirm adalah “ pesan pendek ” , yang memiliki 12 karakter (OCh). Jadi pada User Data Length hasilnya adalah 0C.
•
User Data
•User Data adalah isi pesan yang akan dikirim dalamn format heksadesimal. Pada contoh ini , isi pesan SMS yang dikirim adalah “ pesan pendek “. Pengkodean dari nilai teks Standar menjadi heksadesimal dilakukan dengan bantuan Default Alphabet yang dibakukan oleh ETSI GSM 03.38 (Tabel 2.11 ). Hal ini dapat dilihat dari Tabel di bawah ini :
User Data
Nilai
Dec
Septet (7 bit)
Oktet ( 8 Bit)
Hasil
P
80
1010000
11010000
D0
e
101
1100101
11110010
F2
s
115
1110011
00111100
3C
a
97
1100001
11101100
EC
n
110
1101110
00000110
06
Spasi
32
0100000
11000001
C1
p
112
1110000
11001011
CB
e
101
1100101

䦋㌌㏒㧀좈໱琰茞ᓀ㵂Ü

䦋㌌㏒㧀좈໱琰茞ᓀ㵂Ü

n
110
1101110
01101110
6E
d
100
110010 0
01110010
72
e
101
11001 01
01111001
79
k
107
1101 011
00001101
0D
Data User
•Dari tabel di atas terlihat bahwa hasil dari pengkodean adalah D0F23CEC06C1CB6E72790D. Jadi, pada User Data hasilnya adalah D0F23CEC06C1CB6E72790D.
•Dari penjelasan di atas diperoleh hasil untuk pengiriman SMS dalam format PDU untuk contoh tersebut adalah :
0011000C912618229888040000AB0CD0F23CEC06C1CB6E72790D

duh pegel juga nih ngetik mulu dah dulu yeh ntar kita sambung lagi ke javanya OK!

Saturday, February 17, 2007

Cara Daftar Iklan Adbrite

Bagi yg suka ngeblog dalam bahasa Indonesia, tidak usah sedih kalau blognya tidak bisa dipasangin iklan google adsense. Masih ada alternatif lain yg dapat menerima blog dalam bahasa Indonesia dan cara mendaftarnya juga mudah yaitu Adbrite Marketplace lebih umum disebut Adbrite. Bagaimana cara mendaftar? Ikuti petunjuk berikut:

1. Klik linkbutton ini untuk mendaftar:



2. Ikuti petunjuk proses pendaftaran.

3. Setelah diterima, masuk/login lagi ke Adbrite

4. Clik menu "My Account"

5. Click menu "Create a New Zone"

6. Kasih tanda tik/check pada "Text Ads" dan "Interstitial Ads"

7. Click menu "Next: Describe Your Site." dan isi alamat blog, judul dan diskripsi blog.

8. Apabila selesai, lanjutkan Step 3 dg mengklik menu "Next: Help new Advertisers find you in the Adbrite Marketplace."

9. Ada tiga kotak kosong yg harus diisi dg kata kunci, tag atau keywords yg dapat memancing pemasang iklan tertarik pada blog Anda. Tip: (a) Isi dg kata kunci yg banyak yg berkaitan dg teknologi seperti internet, camera phone, laptop, dll; (b)setiap kata kunci dipisah dg koma.

10. Di bawahnya ada menu "Choose Category". Pilih salah satu dg mengklik kategori yg ada di situ, contoh: "Technology" terus pilih lagi "second category". Di kolom paling kanan ada menu "Include in the AdBrite site directory?" Pilih/klik "free listing"

11. Selesai, klik menu "Next.." Pilih ad format/bentuk iklan yg akan dipasang. Tip: Max character ...: pilih 25; Maximum number of text ads : pilih 4; Maximum character length of ads description: pilih 70.

12. Di menu "Networks Ads" pilih "Yes"

13. Di menu "Ad content" pilih satu di antara dua.

14. Selesai, klik menu "Next: Set Pricing". Klik "Yes I want to optimize my pricing. Start my auto pricing at" isi dg 1 dolar (ini otomatis akan berubah kalau blog Anda banyak peminat).

15. Selesai, klik "Next: Get Ad code html."

16. Ada pilihan bentuk/format iklan antara Vertikal dan Horizontal (seperti di blog ini). Pilih sesuai keinginan Anda.

17. Copy kode html yg ada di bawahnya, dan masukkan di blog Anda.

18. Selesai.

Iklan Adbrite Referral:

Adbrite juga memiliki program afiliasi/referral. bagi yg mendaftar Adbrite melalui referral Anda, Anda akan dapat pembagian keuntungan. Cara memasang linkbutton-nya, klik menu "referral program" di sebelah kanan dari menu "My Account".

Catatan penting:

1. Memasang iklan Adbrite di blog yg ada iklan Adsense TIDAK APA-APA alias DIPERBOLEHKAN oleh Google Adsense. Google Adsense juga memperbolehkan memasang iklan Chitika dan Ad-text link dipasang di blog atau website yg sama. Saya sudah mengkonfirmasi hal ini langsung pada manajer Google Adsense.

2. Penghasilan dari Iklan Adbrite masih kalah jauh dg Google Adsense. Namun, bagi blogger yg ngeblog dalam bahasa Indonesia tentu lebih baik memasang iklan Adbrite daripada tidak sama sekali, sambil menunggu Google Adsense dapat menerima iklan pada blog yg berbahasa Indonesia. Toh tujuan utama ngeblog adalah mengasah dan melatih kemampuan menulis serta melepaskan uneg-uneg, bukan berniat untuk cari keuntungan besar, bukan?

3. Hal yg tak kalah pentingnya adalah dg ikut program Adbrite, blog kita akan mendapat promosi gratis dari Adbrite yakni dg mengiklankannya di direktori Adbrite untuk menarik para pemasang iklan. Jadi, kita dapat keuntungan tambahan di sini: promosi blog gratis.[]

Pasang link http://java-vb.blogspot.com di sidebar blog Anda, Anda akan mendapat link balik (linkback) di blog populernya yg masuk peringkat TOP TEN blog Indonesia terbaik versi Majalah Tempo.

Artikel terkait seri tips, kiat dan cara membuat dan promosi blog:

1. Membuat Blog
2. Cara Praktis Promosi Blog (1)
3. Cara Praktis Promosi Blog (2)
4. Beasiswa Google Adsense
5. Kiat Membuat Abstraksi atau Read More! di Blogspot
6. Menu Arsip Pull-Down / tarik ulur
7. Permasalahan Posting Abstraksi atau Read More!
8. Pasang Foto di Profile Blogspot
9. Memaksimalkan Kerja Blogger atau Blogspot
10. Membuat Link di Posting & Window Baru
11. Aksesoris Blog
12. Apa itu Feed, RSS dan XML?
13. Technorati: Direktori blog, Tag & Bookmark Online
14. Promosi Blog: Google Sitemap
15. Mengapa Juwono Sudarsono nge-Blog
16. Cara Mendaftar Google AdSense
17. Google Adsense Referral
18. Agregator Blog Indonesia
19. Membuat Link di Sidebar
20. Membuat Menu Pull-Down
21. Blogger Versi Baru (BETA)
22. Mengapa Blog Melorot
24. Cara Daftar Iklan Adbrite
25. Tip Menulis Blog