| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #!/usr/bin/perl -w
- #
- # RSSImonitor.pl
- # (c) 2010 Dr. Boris Neubert
- # omega at online dot de
- #
- #
- # This perl script evaluates the RSSI information from
- # your devices in order to help you finding the best
- # location to place your CUL or CUN device.
- #
- # Instructions:
- #
- # 1. Make your CUN or CUL create additional events:
- # attr CUN addvaltrigger
- #
- # 2. Log the RSSI events to a single file:
- # define RSSI.log FileLog /path/to/RSSI.log .*:RSSI.*
- #
- # 3. Wait some time until all devices have sent something.
- #
- # 4. Run the log file through RSSImonitor:
- # RSSImonitor.pl < /path/to/RSSI.log
- #
- # 5. The output lists any device from the log together with
- # the minimum, maximum and average RSSI as well as its
- # standard deviation.
- #
- #
- # type perldoc perldsc to learn about hashes of arrays
- #
- use strict;
- my %RSSI;
- sub storeRSSI {
- my ($device, $value)= @_;
- if(!($RSSI{$device})) {
- $RSSI{$device}= [];
- #print "new device $device\n";
- }
- push @{ $RSSI{$device} }, $value;
- #print "device: $device, value: $value\n";
- }
- sub readRSSI {
- while( <> ) {
- my ($timestamp, $device, $keyword, $value)= split;
- if($keyword eq "RSSI:") {
- storeRSSI($device, $value);
- }
- }
- }
- sub calcStats {
- my ($device)= @_;
- my $min= 100.;
- my $max= -100.;
- my $m1= 0.;
- my $m2= 0.;
- my $n= $#{ $RSSI{$device} }+1;
- my ($i, $value);
- my ($avg, $sigma);
- foreach $i ( 0 .. $#{ $RSSI{$device} } ) {
- $value= $RSSI{$device}[$i];
- if($value< $min) { $min= $value; }
- if($value> $max) { $max= $value; }
- $m1+= $value;
- $m2+= $value*$value;
- }
- $avg= $m1/$n;
- $sigma= sqrt($m2/$n-$avg*$avg);
- return ($min, $max, $avg, $sigma);
- }
- #
- # main
- #
- readRSSI;
- my $device;
- printf("%12s\t%s\t%s\t%s\t%s\n", "Device", "Min", "Max", "Avg", "StdDev");
- foreach $device (keys %RSSI) {
- my ($min, $max, $avg, $sigma)= calcStats($device);
- printf("%12s\t%.1f\t%.1f\t%.1f\t%.1f\n", $device, $min, $max, $avg, $sigma);
- }
|