RRDtool

From WIKI-WLAN

Jump to: navigation, search

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). image: rssi.png

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.

Personal tools