1 # Copyright (C) 2004 Marc Haber
2 # Copyright (C) 2005 Stanislav Sinyagin
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 # $Id: BetterNetworks.pm,v 1.1 2010-12-27 00:03:55 ivan Exp $
19 # Marc Haber <mh+torrus-devel@zugschlus.de>
20 # Redesigned by Stanislav Sinyagin
22 # Better Networks Ethernet Box
24 package Torrus::DevDiscover::BetterNetworks;
30 $Torrus::DevDiscover::registry{'BetterNetworks'} = {
32 'checkdevtype' => \&checkdevtype,
33 'discover' => \&discover,
34 'buildConfig' => \&buildConfig
40 'BNEversion' => '1.3.6.1.4.1.14848.2.1.1.1.0',
41 'BNElocation' => '1.3.6.1.4.1.14848.2.1.1.2.0',
42 'BNEtempunit' => '1.3.6.1.4.1.14848.2.1.1.3.0',
43 'BNEuptime' => '1.3.6.1.4.1.14848.2.1.1.7.0',
44 'BNEsensorTable' => '1.3.6.1.4.1.14848.2.1.2',
45 'BNEsensorName' => '1.3.6.1.4.1.14848.2.1.2.1.2',
46 'BNEsensorType' => '1.3.6.1.4.1.14848.2.1.2.1.3',
47 'BNEsensorValid' => '1.3.6.1.4.1.14848.2.1.2.1.7',
54 'comment' => 'Temperature sensor',
57 'comment' => 'Brightness sensor',
61 'comment' => 'Humidity sensor',
62 'label' => 'Percent RH',
65 'comment' => 'Switch contact',
68 'comment' => 'Voltage meter',
71 'comment' => 'Smoke sensor',
86 my $devdetails = shift;
88 if( not $dd->checkSnmpOID( 'BNEuptime' ) )
100 my $devdetails = shift;
102 my $data = $devdetails->data();
103 my $session = $dd->session();
105 my $unitInfo = $dd->retrieveSnmpOIDs('BNEversion',
108 if( not defined( $unitInfo ) )
110 Error('Error retrieving Better Networks Ethernet Box device details');
115 my $sensorTable = $session->get_table( -baseoid =>
116 $dd->oiddef('BNEsensorTable') );
117 if( defined( $sensorTable ) )
119 $devdetails->storeSnmpVars( $sensorTable );
121 # store the sensor names to guarantee uniqueness
125 ( $devdetails->getSnmpIndices($dd->oiddef('BNEsensorName') ) )
127 if( $devdetails->snmpVar( $dd->oiddef('BNEsensorValid') .
128 '.' . $INDEX ) == 0 )
133 my $type = $devdetails->snmpVar( $dd->oiddef('BNEsensorType') .
135 my $name = $devdetails->snmpVar( $dd->oiddef('BNEsensorName')
138 if( $sensorNames{$name} )
140 Warn('Duplicate sensor names: ' . $name);
141 $sensorNames{$name}++;
145 $sensorNames{$name} = 1;
148 if( $sensorNames{$name} > 1 )
150 $name .= sprintf(' %d', $sensorNames{$name});
153 my $leafName = $name;
154 $leafName =~ s/\W/_/g;
157 'bne-sensor-index' => $INDEX,
158 'node-display-name' => $name,
159 'precedence' => sprintf('%d', 1000 - $INDEX)
162 if( defined( $sensorTypes{$type} ) )
164 $param->{'comment'} =
165 sprintf('%s: %s', $sensorTypes{$type}{'comment'}, $name);
168 if( defined( $sensorTypes{$type}{'label'} ) )
170 $param->{'vertical-label'} =
171 $sensorTypes{$type}{'label'};
176 $param->{'vertical-label'} =
177 $tempUnits{$unitInfo->{'BNEtempunit'}};
182 $param->{'comment'} = 'Unknown sensor type';
185 $data->{'BNEsensor'}{$INDEX}{'param'} = $param;
186 $data->{'BNEsensor'}{$INDEX}{'leafName'} = $leafName;
189 if( scalar( %{$data->{'BNEsensor'}} ) > 0 )
191 $devdetails->setCap('BNEsensor');
194 'BetterNetworks EthernetBox, ' . $unitInfo->{'BNEversion'};
195 if( $unitInfo->{'BNElocation'} =~ /\w/ )
197 $devComment .= ', Location: ' .
198 $unitInfo->{'BNElocation'};
200 $data->{'param'}{'comment'} = $devComment;
210 my $devdetails = shift;
214 my $data = $devdetails->data();
216 if( $devdetails->hasCap('BNEsensor') )
218 foreach my $INDEX ( sort {$a<=>$b} keys %{$data->{'BNEsensor'}} )
220 my $param = $data->{'BNEsensor'}{$INDEX}{'param'};
221 my $leafName = $data->{'BNEsensor'}{$INDEX}{'leafName'};
223 $cb->addLeaf( $devNode, $leafName, $param,
224 ['BetterNetworks::betternetworks-sensor'] );
236 # indent-tabs-mode: nil
237 # perl-indent-level: 4