Desain Pengujian
Pengujian dilakukan pada 3 buah komputer dengan susunan sbb :
HOST A :
Merupakan Wireless Sensor yang membaca data analog dan mengirimkan data pada HOST B.
HOST B :
Menerima data dari HOST A dan memberikan datanya pada HOST C dengan protokol yang berbeda.
HOST C :
Menerima data dari HOST B dan menuliskannya pada database.
Pemrograman
Beberapa
bahasa pemrograman yang digunakan untuk pengujian ini diantaranya
adalah Dynamic C dan Perl. Dynamic C digunakan untuk memprogram
microcontroller dan Perl digunakan sebagai bahasa pemprograman yang
digunakan untuk menerima data dari microcontroller, mengirim data pada
concentrator database server dengan protokol SOAP, dan menampilkannya
dalam bentuk tampilan grafik. Sementara untuk menerima data dengan
protokol SOAP dan menuliskannya pada database, digunakan bahasa
pemrograman PHP.
Dynamic C adalah sebuah bahasa pemprograman yang
dibuat oleh Rabbit , inc yang khusus digunakan untuk memprogram
microcontroller RCM 3700. Dynamic C ini dilengkapi beberapa library dan
dilengkapi sebuah IDE (integrated development environment) sehingga
coding, debugging, compiling, flashing, dan downloading sebuah
microcontroller RCM 3700 dapat dilakukan cukup pada sebuah software
saja.
Pada dasarnya, garis besar program yang dibuat adalah sebagai berikut :
1. Menerima data masukkan dari input analog
Kode yang digunakan :
float read_analog_input ()
{
dataRaw = anaIn(inputnum, SINGLE, GAINSET);
return (dataRaw*20/2048) ;
}
2. Secara aktif membuka koneksi soket ke komputer penerima data (tidak harus merupakan sebuah database server)
Kode yang digunakan :
if (!tcp_open(&my_socket, 0, host, port, NULL))
{
printf("Failed to open\n");
return -1 ;
}
else while (!sock_established(&my_socket))
{
if(!tcp_tick(&my_socket))
{
printf("Failed to Establish\n"); break ;
}
}
3.
Secara aktif mengirimkan data hasil pembacaan input analog yang telah
dikonversi menjadi besaran biner kepada komputer penerima melalui soket
TCP/IP yang sama dengan nomor 2.
Kode yang digunakan :
if(sock_established(&my_socket))
{
char * buff;
sprintf(buff,"%d",mesg);
if((sock_write(&my_socket, buff, sizeof(buff)))< 0 )
{
printf("Error Sending Data...");
return -1 ;
}
sock_close(&my_socket);
return 1 ; //return ok
}
4.
Menampilkan pesan error ketika pembukaan socket tidak berhasil
dilakukan, atau pengiriman data tidak berhasil, atau ketika pembacaan
analog input gagal dilakukan.
Perl adalah bahasa scripting yang
secara resmi keluar pada tahun 1987. Kode perl tidak perlu dicompile
agar bisa dijalankan, itulah mengapa perl disebut bahasa scripting,
bukan bahasa pemrograman. Dokumentasi dan informasi mengenai perl dapat
diperoleh dari http://www.perl.org/ .
Pada Dasarnya, program perl yang dibuat pada pengujian ini mempunyai garis besar perilaku sbb :
Pada Host Penerima (HOST B) :
1. Secara Pasif membuka dan me-Listen socket TCP/IP pada port tertentu.
Kode yang digunakan :
my $sock = IO::Socket::INET->new(
LocalHost => $host,
LocalPort => $port,
Proto => 'tcp',
Listen =>1,
ReuseAddr => 1
);
2.
Secara Pasif menerima input data dari koneksi socket TCP/IP dari
komputer pengirim, kemudian mengirimkannya pada database server
menggunakan protokol SOAP secara aktif.
Kode yang digunakan :
while(1) {
my $sockAccept = $sock->accept();
while ($pesan = <$sockAccept>)
{
$rrd -> update (temp => $pesan);
# updating database MS SQL melalui web services
my $soapRes = $soap->insertData($pesan);
unless ($soapRes->fault)
{
print "$pesan berhasil ditulis" ;
}
else
{
print join ', ',
$soapRes->faultcode,
$soapRes->faultstring,
$soapRes->faultdetail;
}
}
}
3. Menuliskan data pada sebuah grafik PNG sehingga terlihat grafik besaran suhu vs waktu.
Kode yang digunakan :
while(1) {
$rrd -> graph(
destination => "/var/www/netmon.tf.itb.ac.id",
basename => "temperature",
timestamp => "both",
periods => [qw(hour)],
sources => [qw(temp)],
source_colors => [qw(ff0000)],
source_labels => [("Temperatur")],
source_drawtypes => [qw(AREA)],
line_thickness => 2,
extended_legend => 1,
title => "Water Temperature",
vertical_label => "Kelvin",
interlaced => ""
);
print "graph updated\n";
# wait for 200 seconds
sleep(200);
}
Php
adalah bahasa pemrograman web / scripting web yang sangat terkenal.
Secara umum, program php yang dibuat mempunyai behaviour sbb :
Pada Host Database server (HOST C) :
1. Secara Pasif menerima input data dari HOST B dengan metode SOAP.
Kode yang digunakan :
require_once('lib/nusoap.php');
$server = new soap_server;
$server->register('insertData');
……..
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
2. Menuliskan data pada database server. Software Database Server yang digunakan adalah MySQL
Kode yang digunakan :
function insertData($temperature)
{
$timeStamp = date('Y-m-d H-i-s');
mysql_connect('localhost','username','password') or die(mysql_error());
mysql_select_db('coba') or die(mysql_error());
mysql_query('INSERT INTO test VALUES ("'.$timeStamp.'","'.$temperature.'")') or die(mysql_error());
return 'berhasil'.$temperature ;
}
Keseluruhan Kode yang dibuat adalah sbb :
Kode Dynamic C yang dibuat :
#define RCM3700_PROTOBOARD
#define TCPCONFIG 9
#use "dcrtcp.lib"
#define ADDRESS "167.205.44.10"
#define PORT "8989"
#define inputnum 0
#define GAINSET GAIN_1
int send_packet(char * mesg)
{
tcp_Socket my_socket ;
word status ;
word port ;
longword host ;
if(!(host=resolve(ADDRESS)))
{
printf("Could not resolve host\n");
return -1;
}
port = atoi (PORT);
sock_init();
if (!tcp_open(&my_socket, 0, host, port, NULL))
{
printf("Failed to open\n");
return -1 ;
}
else while (!sock_established(&my_socket))
{
if(!tcp_tick(&my_socket))
{
printf("Failed to Establish\n"); break ;
}
}
if(sock_established(&my_socket))
{
char * buff;
sprintf(buff,"%d",mesg);
if((sock_write(&my_socket, buff, sizeof(buff)))< 0 )
{
printf("Error Sending Data...");
return -1 ;
}
sock_close(&my_socket);
return 1 ; //return ok
}
}
float read_analog_input ()
{
dataRaw = anaIn(inputnum, SINGLE, GAINSET);
return (dataRaw*20/2048) ;
}
main()
{
float dataInputFlt ;
char [8] dataInputStr ;
while(1)
{
costate
{
dataInputFlt = read_analog_input();
sprintf(dataInputStr,"%d", dataInputFlt);
//send_packet(&dataInputStr);
}
}
}
Kode Perl pada komputer penerima data (HOST B) yang dibuat :
#!/usr/local/bin/perl -w
# program untuk membuat daemon sederhana yang melisten di port 8989
# input program : data stream dari microcontroller
# output program : file rrd
# ditambahkan fungsi untuk mengupdate database melalui webservice
# load required modules
use strict;
use POSIX qw(setsid);
use LWP::Simple;
use RRD::Simple ();
use IO::Socket ;
use SOAP::Lite ;
# set costants
my $host = '167.205.44.10';
my $port = '8989';
my $png = '/var/www/netmon.tf.itb.ac.id';
my $rrdfile = '/var/tmp/temperature.rrd';
my $log = '/var/tmp/coba.log';
my $soap = SOAP::Lite
-> uri('http://netmon.tf.itb.ac.id/coba/server.php')
-> proxy('http://netmon.tf.itb.ac.id/coba/server.php');
# flush the buffer
$| = 1;
# daemonize the program
&daemonize;
# rrd initialization
my $rrd = RRD::Simple->new (file => "$rrdfile");
$rrd -> create ($rrdfile, temp => "GAUGE");
# creating listen socket
my $sock = IO::Socket::INET->new(
LocalHost => $host,
LocalPort => $port,
Proto => 'udp',
Listen =>1,
ReuseAddr => 1
);
die "socket listening failed" unless $sock ;
my $pesan ;
# our daemon process
while(1) {
my $sockAccept = $sock->accept();
while ($pesan = <$sockAccept>)
{
$rrd -> update (temp => $pesan);
# updating database MS SQL melalui web services
my $soapRes = $soap->insertData($pesan);
unless ($soapRes->fault)
{
print "$pesan berhasil ditulis" ;
}
else
{
print join ', ',
$soapRes->faultcode,
$soapRes->faultstring,
$soapRes->faultdetail;
}
}
}
sub daemonize {
chdir "/var/tmp" or die "Can't chdir to /: $!";
open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
open STDOUT, ">>$log" or die "Can't write to $log: $!";
open STDERR, ">>$log" or die "Can't write to $log: $!";
defined(my $pid = fork) or die "Can't fork: $!";
exit if $pid;
setsid or die "Can't start a new session: $!";
umask 0;
}
Kode PHP untuk menulis ke database pada HOST C yang dibuat :
require_once('lib/nusoap.php');
$server = new soap_server;
// Register the method to expose
$server->register('insertData');
// Define the method as a PHP function
function insertData($temperature)
{
$timeStamp = date('Y-m-d H-i-s');
mysql_connect('localhost','username','password') or die(mysql_error());
mysql_select_db('coba') or die(mysql_error());
mysql_query('INSERT INTO test VALUES ("'.$timeStamp.'","'.$temperature.'")') or die(mysql_error());
return 'berhasil'.$temperature ;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>
http://wsnsistel.blogspot.com/2009/05/pengujian-dan-implementasi-wireless.html
Tidak ada komentar:
Posting Komentar