RRDtool
From WIKI-WLAN
RRDtool se uporablja za učinkovito hranjenje časovnih numeričnih podatkov. V usmerjevalniku je veliko podakov, ki bi zanimale uporabnike, predvsem pa upravitelje mreže.
Naslednja slika kaže primer izrisa moči sprejetega signala (RSSI).
RRDtool je možno namestiti na naslednje firmvere:
- DD-WRT
- OpenWRT
- X-Wrt
- Oleg
Za namestitev je potrebno imeti dovolj prostega FLASH pomnilnika.
Na Oleg je to flashfs, na ostalih pa jffs. Lahko pa se namesti tudi
na zunanji USB pomnilnik (ključek ali disk).
Izris na routerju izvedemo z nalednjo CGI skripto:
#!/opt/bin/rrdcgi
<html>
<head>
<title>RSSI</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<link href="/vreme/default.css" rel="stylesheet" type="text/css">
<RRD::SETENV LANG sl_SI>
</head>
<body>
Izris poteka WLAN RSSI signala
<form>
<button type=submit name=range value="">Danes</button>
<button type=submit name=range value="-1day">Dva dni</button>
<button type=submit name=range value="-1week">Zadnji teden</button>
<button type=submit name=range value="-1month">Zadnji mesec</button>
<button type=submit name=range value="-1year">Eno leto</button>
</form>
<RRD::GRAPH /tmp/rssi.png --title="RSSI robnih ruterjev"
--width 640 --height 150 -v dBm --y-grid 1:1 --start -1day<RRD::CV range>
--imginfo '<IMG SRC=/vreme/%s WIDTH=%lu HEIGHT=%lu ALT="RRD prikaz">'
DEF:beg=/tmp/rssi-oleo.rrd:rssi:AVERAGE
DEF:top=/tmp/rssi-oblak.rrd:rssi:AVERAGE
COMMENT:" "
COMMENT:" Min Max Povp Zadnja\n"
LINE1:beg#00a000:"Oleo "
GPRINT:beg:MIN:" %5.0lf dBm"
GPRINT:beg:MAX:" %5.0lf dBm"
GPRINT:beg:AVERAGE:" %5.0lf dBm"
GPRINT:beg:LAST:" %5.0lf dBm\n"
LINE1:top#a000a0:"Oblak "
GPRINT:top:MIN:" %5.0lf dBm"
GPRINT:top:MAX:" %5.0lf dBm"
GPRINT:top:AVERAGE:" %5.0lf dBm"
GPRINT:top:LAST:" %5.0lf dBm\n"
>
<RRD::GRAPH /tmp/rssi-petric.png --title="RSSI na sredini - Petric"
--width 640 --height 150 -v dBm --y-grid 1:1 --start -1day<RRD::CV range>
--imginfo '<IMG SRC=/vreme/%s WIDTH=%lu HEIGHT=%lu ALT="RRD prikaz">'
DEF:beg=/tmp/rssi-peol.rrd:rssi:AVERAGE
DEF:top=/tmp/rssi-peob.rrd:rssi:AVERAGE
COMMENT:" "
COMMENT:" Min Max Povp Zadnja\n"
LINE1:beg#00a000:"Oleo "
GPRINT:beg:MIN:" %5.0lf dBm"
GPRINT:beg:MAX:" %5.0lf dBm"
GPRINT:beg:AVERAGE:" %5.0lf dBm"
GPRINT:beg:LAST:" %5.0lf dBm\n"
LINE1:top#a000a0:"Oblak "
GPRINT:top:MIN:" %5.0lf dBm"
GPRINT:top:MAX:" %5.0lf dBm"
GPRINT:top:AVERAGE:" %5.0lf dBm"
GPRINT:top:LAST:" %5.0lf dBm\n"
>
Zadnji zajem signala: <RRD::TIME::LAST /tmp/rssi-oleo.rrd "%A %e. %B %Y ob %H:%M">
Pogoji na vseh ruterjih so nastavljeni enako: txpwr 67 mW, tx rate 18 Mbit
A sensitivity table for a wireless card
-94 dBm @ 1 Mbps -93 dBm @ 2 Mbps -92 dBm @ 5.5 Mbps -86 dBm @ 6 Mbps -86 dBm @ 9 Mbps -90 dBm @ 11 Mbps -86 dBm @ 12 Mbps -86 dBm @ 18 Mbps -84 dBm @ 24 Mbps -80 dBm @ 36 Mbps -75 dBm @ 48 Mbps -71 dBm @ 54 Mbps
</body> </html>
Za zapisovanje pa skrbi naslednja CGI skripta sss.cgi:
#!/bin/sh # # Expected sensor update every 5 minutes # # Example: # nvram set rc_startup='while true ; do # oleo=$(wl rssi 00:11:D8:75:B9:3C | sed "s/rssi is //"); # oblak=$(wl rssi 00:12:17:E7:8E:B0 | sed "s/rssi is //"); # wget -q "http://192.168.1.1/cgi-bin/sss.cgi?sensor=2;value=$oleo" -O /dev/null; # wget -q "http://192.168.1.1/cgi-bin/sss.cgi?sensor=3;value=$oblak" -O /dev/null; # sleep 300; done &' # nvram set rc_startup='while true ; do # rssi=$(wl rssi 00:11:D8:9F:97:4F | sed "s/rssi is //"); # wget -q "http://192.168.1.1/cgi-bin/sss.cgi?sensor=1;value=$rssi" -O /dev/null; # sleep 300; done &' cat << __EOF__ Content-type: text/plain Hvala lepa za podatek. __EOF__ eval ${QUERY_STRING} test -d /opt/var/lib/rrd/rssi || mkdir -p /opt/var/lib/rrd/rssi for rrd in oleo peol peob oblak; do if [ ! -e /opt/var/lib/rrd/rssi/rssi-${rrd}.rrd ]; then /opt/bin/rrdtool create /opt/var/lib/rrd/rssi/rssi-${rrd}.rrd \ DS:rssi:GAUGE:600:-100:-30 \ RRA:AVERAGE:0.5:1:600 \ RRA:AVERAGE:0.5:6:700 \ RRA:AVERAGE:0.5:24:775 \ RRA:AVERAGE:0.5:288:797 \ RRA:MIN:0.5:1:600 \ RRA:MIN:0.5:6:700 \ RRA:MIN:0.5:24:775 \ RRA:MIN:0.5:288:797 \ RRA:MAX:0.5:1:600 \ RRA:MAX:0.5:6:700 \ RRA:MAX:0.5:24:775 \ RRA:MAX:0.5:288:797 fi test -e /tmp/rssi-${rrd}.rrd || cp /opt/var/lib/rrd/rssi/rssi-${rrd}.rrd /tmp/ done case ${sensor} in 1) /opt/bin/rrdupdate /tmp/rssi-oleo.rrd N:${value} ;; 2) /opt/bin/rrdupdate /tmp/rssi-peol.rrd N:${value} ;; 3) /opt/bin/rrdupdate /tmp/rssi-peob.rrd N:${value} ;; 4) /opt/bin/rrdupdate /tmp/rssi-oblak.rrd N:${value} ;; *) set > /tmp/rssi-error.log ;; esac #set >> /tmp/rssi-update.log
V komentarju je prikazan način klicanja te skripte s skripto rc_startup, ki se zažene ob zagonu routerja, ki potem pošilja podatke vsakih 5 minut.
