Added Eltek WebPower support (#9174)

* New os Eltek WebPower - files + test files

* OS eltek-webpower - minor fix to mib query.

* OS eltek-webpower - sensor and state data improvements.

* OS Eltek Webpower - Created battery symmetry test and battery bank delta voltage support.

* OS Eltek Webpower - symmetry code fix.

* OS Eltek Webpower - symmetry code fix.

* OS Eltek Webpower - symmetry code fix.

* new os eltek - rectifier state fix

* Updated json test data

* Update eltek-webpower.json

* Update eltek-webpower.yaml

* Update eltek-webpower.yaml
This commit is contained in:
Mikael Sipilainen
2018-10-29 22:40:38 +02:00
committed by Neil Lathwood
parent ac7997d9ec
commit cf2e79344d
7 changed files with 6419 additions and 0 deletions

View File

@@ -0,0 +1,256 @@
mib: SNMPv2-MIB:ELTEK-DISTRIBUTED-MIB
modules:
sensors:
runtime:
data:
-
oid: batteryCapacityData
value: batteryTimeToDisconnect
num_oid: .1.3.6.1.4.1.12148.9.3.20.1.
index: 'batteryTimeToDisconnect.{{ $index }}'
descr: Battery time to disconnect
state:
data:
-
oid: dcSystem
value: systemOperationalStatus
num_oid: .1.3.6.1.4.1.12148.9.2.2.
descr: System operational status
state_name: systemOperationalStatus.{{ $index }}
states:
- { value: 0, generic: 0, graph: 0, descr: Float - voltage regulated }
- { value: 1, generic: 0, graph: 0, descr: Float - temp. comp. regulated }
- { value: 2, generic: 1, graph: 0, descr: Boost }
- { value: 3, generic: 2, graph: 0, descr: Battery test }
-
oid: dcPlant
value: systemNominalVoltage
num_oid: .1.3.6.1.4.1.12148.9.2.1.4.
descr: The nominal voltage rating
state_name: systemNominalVoltage.{{ $index }}
states:
- { value: 0, generic: 3, graph: 0, descr: 48V }
- { value: 1, generic: 3, graph: 0, descr: 24V }
- { value: 2, generic: 3, graph: 0, descr: N/A }
- { value: 3, generic: 3, graph: 0, descr: N/A }
- { value: 4, generic: 3, graph: 0, descr: 60V }
-
oid: battery
value: batteryBreakerStatus
num_oid: .1.3.6.1.4.1.12148.9.3.5.
descr: Battery breaker status
state_name: batteryBreakerStatus.{{ $index }}
states:
- { value: 0, generic: 0, graph: 0, descr: normal }
- { value: 1, generic: 2, graph: 0, descr: Alarm }
-
oid: rectifier
value: rectifierRectifiersActive
num_oid: .1.3.6.1.4.1.12148.9.5.2.
state_name: rectifierRectifiersActive
descr: Rectifiers active
states:
- { value: 1, generic: 3, graph: 0, descr: '1' }
- { value: 2, generic: 3, graph: 0, descr: '2' }
- { value: 3, generic: 3, graph: 0, descr: '3' }
- { value: 4, generic: 3, graph: 0, descr: '4' }
- { value: 5, generic: 3, graph: 0, descr: '5' }
- { value: 6, generic: 3, graph: 0, descr: '6' }
- { value: 7, generic: 3, graph: 0, descr: '7' }
- { value: 8, generic: 3, graph: 0, descr: '8' }
- { value: 9, generic: 3, graph: 0, descr: '9' }
- { value: 10, generic: 3, graph: 0, descr: '10' }
- { value: 11, generic: 3, graph: 0, descr: '11' }
- { value: 12, generic: 3, graph: 0, descr: '12' }
- { value: 13, generic: 3, graph: 0, descr: '13' }
- { value: 14, generic: 3, graph: 0, descr: '14' }
- { value: 15, generic: 3, graph: 0, descr: '15' }
- { value: 16, generic: 3, graph: 0, descr: '16' }
- { value: 17, generic: 3, graph: 0, descr: '17' }
- { value: 18, generic: 3, graph: 0, descr: '18' }
- { value: 19, generic: 3, graph: 0, descr: '19' }
- { value: 20, generic: 3, graph: 0, descr: '20' }
-
oid: rectifier
value: rectifierInstalledRectifiers
num_oid: .1.3.6.1.4.1.12148.9.5.1.
state_name: rectifierInstalledRectifiers
descr: Rectifiers installed
states:
- { value: 1, generic: 3, graph: 0, descr: '1' }
- { value: 2, generic: 3, graph: 0, descr: '2' }
- { value: 3, generic: 3, graph: 0, descr: '3' }
- { value: 4, generic: 3, graph: 0, descr: '4' }
- { value: 5, generic: 3, graph: 0, descr: '5' }
- { value: 6, generic: 3, graph: 0, descr: '6' }
- { value: 7, generic: 3, graph: 0, descr: '7' }
- { value: 8, generic: 3, graph: 0, descr: '8' }
- { value: 9, generic: 3, graph: 0, descr: '9' }
- { value: 10, generic: 3, graph: 0, descr: '10' }
- { value: 11, generic: 3, graph: 0, descr: '11' }
- { value: 12, generic: 3, graph: 0, descr: '12' }
- { value: 13, generic: 3, graph: 0, descr: '13' }
- { value: 14, generic: 3, graph: 0, descr: '14' }
- { value: 15, generic: 3, graph: 0, descr: '15' }
- { value: 16, generic: 3, graph: 0, descr: '16' }
- { value: 17, generic: 3, graph: 0, descr: '17' }
- { value: 18, generic: 3, graph: 0, descr: '18' }
- { value: 19, generic: 3, graph: 0, descr: '19' }
- { value: 20, generic: 3, graph: 0, descr: '20' }
-
oid: rectifierStatusEntry
value: rectifierStatusStatus
num_oid: .1.3.6.1.4.1.12148.9.5.5.2.1.2.
descr: Rectifier {{ $index }} status
state_name: rectifierStatusStatus.{{ $index }}
skip_value_lt: 1
states:
- { value: 0, generic: 0, graph: 0, descr: not present }
- { value: 1, generic: 0, graph: 0, descr: normal }
- { value: 2, generic: 2, graph: 0, descr: alarm }
- { value: 3, generic: 1, graph: 0, descr: not used }
- { value: 4, generic: 3, graph: 0, descr: disabled }
voltage:
data:
-
oid: acDistribution
value: acVoltage1
num_oid: .1.3.6.1.4.1.12148.9.6.1.
index: 'acVoltage1.{{ $index }}'
descr: AC L1 input
-
oid: acDistribution
value: acVoltage2
num_oid: .1.3.6.1.4.1.12148.9.6.2.
index: 'acVoltage2.{{ $index }}'
descr: AC L2 input
-
oid: acDistribution
value: acVoltage3
num_oid: .1.3.6.1.4.1.12148.9.6.3.
index: 'acVoltage3.{{ $index }}'
descr: AC L3 input
-
oid: rectifierStatusEntry
value: rectifierStatusOutputVoltage
num_oid: .1.3.6.1.4.1.12148.9.5.5.2.1.4.
index: 'rectifierStatusOutputVoltage.{{ $index }}'
descr: Rectifier{{ $index }} out
divisor: 100
skip_value_lt: 1
-
oid: batteryVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.2.
index: 'batteryVoltage.{{ $index }}'
descr: Battery bank
divisor: 100
-
oid: batteryBanksSymmetry1deltaVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.19.3.1.4.
index: 'batteryBanksSymmetry1deltaVoltage.{{ $index }}'
descr: ΔV Battery banks symmetry 1
divisor: 100
skip_value_lt: 1
-
oid: batteryBanksSymmetry2deltaVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.19.3.1.7.
index: 'batteryBanksSymmetry2deltaVoltage.{{ $index }}'
descr: ΔV Battery banks symmetry 2
divisor: 100
skip_value_lt: 1
-
oid: batteryBanksSymmetry3deltaVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.19.3.1.10.
index: 'batteryBanksSymmetry3deltaVoltage.{{ $index }}'
descr: ΔV Battery banks symmetry 3
divisor: 100
skip_value_lt: 1
-
oid: batteryBanksSymmetry4deltaVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.19.3.1.13.
index: 'batteryBanksSymmetry4deltaVoltage.{{ $index }}'
descr: ΔV Battery banks symmetry 4
divisor: 100
skip_value_lt: 1
-
oid: batteryBanksSymmetry5deltaVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.19.3.1.16.
index: 'batteryBanksSymmetry5deltaVoltage.{{ $index }}'
descr: ΔV Battery banks symmetry 5
divisor: 100
skip_value_lt: 1
-
oid: batteryBanksSymmetry6deltaVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.19.3.1.19.
index: 'batteryBanksSymmetry6deltaVoltage.{{ $index }}'
descr: ΔV Battery banks symmetry 6
divisor: 100
skip_value_lt: 1
-
oid: batteryBanksSymmetry7deltaVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.19.3.1.22.
index: 'batteryBanksSymmetry7deltaVoltage.{{ $index }}'
descr: ΔV Battery banks symmetry 7
divisor: 100
skip_value_lt: 1
-
oid: batteryBanksSymmetry8deltaVoltage
num_oid: .1.3.6.1.4.1.12148.9.3.19.3.1.25.
index: 'batteryBanksSymmetry8deltaVoltage.{{ $index }}'
descr: ΔV Battery banks symmetry 8
divisor: 100
skip_value_lt: 1
temperature:
data:
-
oid: rectifierStatusEntry
value: rectifierStatusTemp
num_oid: .1.3.6.1.4.1.12148.9.5.5.2.1.5.
index: 'rectifierStatusTemp.{{ $index }}'
descr: Rectifier {{ $index }}
divisor: 1
skip_value_lt: 1
load:
data:
-
oid: rectifier
value: rectifierUtilization
num_oid: .1.3.6.1.4.1.12148.9.5.4.
index: 'rectifierUtilization.{{ $index }}'
descr: Rectifier current utilization
current:
data:
-
oid: loadDistribution
value: loadDistributionCurrent
num_oid: .1.3.6.1.4.1.12148.9.4.1.
index: 'loadDistributionCurrent.{{ $index }}'
descr: Distribution total out
divisor: 1
-
oid: rectifierStatusEntry
value: rectifierStatusOutputCurrent
num_oid: .1.3.6.1.4.1.12148.9.5.5.2.1.3.
index: 'rectifierStatusOutputCurrent.{{ $index }}'
descr: Rectifier {{ $index }} out
divisor: 10
skip_value_lt: 1
-
oid: battery
value: batteryCurrent
num_oid: .1.3.6.1.4.1.12148.9.3.3.
index: 'batteryCurrent.{{ $index }}'
descr: Battery (charge/drain)
divisor: 1
-
oid: batteryCapacityData
value: batteryCapacityLeft
num_oid: .1.3.6.1.4.1.12148.9.3.20.2.
index: 'batteryCapacityLeft.{{ $index }}'
descr: Battery remaining capacity (Ah)
-
oid: batteryCapacityData
value: batteryCapacityUsed
num_oid: .1.3.6.1.4.1.12148.9.3.20.3.
index: 'batteryCapacityUsed.{{ $index }}'
descr: Battery capacity used (Ah)

View File

@@ -0,0 +1,12 @@
os: eltek-webpower
text: 'Eltek WebPower'
type: power
icon: eltek
nobulk: true
over:
- { graph: device_current, text: Load }
- { graph: device_voltage, text: Voltage }
mib_dir:
- eltek
discovery:
- sysObjectID: .1.3.6.1.4.1.12148.9

View File

@@ -0,0 +1,108 @@
<?php
/**
* eltek-webpower.inc.php
*
* -Description-
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2018 Mikael Sipilainen
* @author Mikael Sipilainen <mikael.sipilainen@gmail.com>
*/
// Battery banks symmetry status discovery
$symmetry_oid = array('.1.3.6.1.4.1.12148.9.3.19.3.1.3.0',
'.1.3.6.1.4.1.12148.9.3.19.3.1.6.0',
'.1.3.6.1.4.1.12148.9.3.19.3.1.9.0',
'.1.3.6.1.4.1.12148.9.3.19.3.1.12.0',
'.1.3.6.1.4.1.12148.9.3.19.3.1.15.0',
'.1.3.6.1.4.1.12148.9.3.19.3.1.18.0',
'.1.3.6.1.4.1.12148.9.3.19.3.1.21.0',
'.1.3.6.1.4.1.12148.9.3.19.3.1.24.0'
);
$oid = snmp_get_multi($device, 'batteryBanksSymmetry1enable.0 batteryBanksSymmetry2enable.0 batteryBanksSymmetry3enable.0 batteryBanksSymmetry4enable.0 batteryBanksSymmetry5enable.0 batteryBanksSymmetry6enable.0 batteryBanksSymmetry7enable.0 batteryBanksSymmetry8enable.0 batteryBanksSymmetry1status.0 batteryBanksSymmetry2status.0 batteryBanksSymmetry3status.0 batteryBanksSymmetry4status.0 batteryBanksSymmetry5status.0 batteryBanksSymmetry6status.0 batteryBanksSymmetry7status.0 batteryBanksSymmetry8status.0', '-OQUs', 'ELTEK-DISTRIBUTED-MIB');
$count = array(1, 2, 3, 4, 5, 6, 7, 8);
foreach ($count as &$countValue) {
if ($oid[0]['batteryBanksSymmetry'.$countValue.'enable'] == 'enable') {
if ($oid[0]['batteryBanksSymmetry'.$countValue.'status'] == 'ok') {
$state_numeric = 0;
}
if ($oid[0]['batteryBanksSymmetry'.$countValue.'status'] == 'minorAlarm') {
$state_numeric = 1;
}
if ($oid[0]['batteryBanksSymmetry'.$countValue.'status'] == 'majorAlarm') {
$state_numeric = 2;
}
if ($oid[0]['batteryBanksSymmetry'.$countValue.'status'] == 'disabled') {
$state_numeric = 3;
}
if ($oid[0]['batteryBanksSymmetry'.$countValue.'status'] == 'error') {
$state_numeric = 4;
}
$state_name = 'batteryBanksSymmetry'.$countValue.'status.0';
$state_index_id = create_state_index($state_name);
if ($state_index_id !== null) {
$states = array(
array($state_index_id,'ok',0,0,0) ,
array($state_index_id,'minorAlarm',0,1,1) ,
array($state_index_id,'majorAlarm',0,2,2) ,
array($state_index_id,'disabled',0,3,3) ,
array($state_index_id,'error',0,4,2)
);
foreach ($states as $value) {
$insert = array(
'state_index_id' => $value[0],
'state_descr' => $value[1],
'state_draw_graph' => $value[2],
'state_value' => $value[3],
'state_generic_value' => $value[4]
);
dbInsert($insert, 'state_translations');
}
}
$index = 0;
$limit = 10;
$warnlimit = null;
$lowlimit = null;
$lowwarnlimit = null;
$divisor = 1;
$num_oid = $symmetry_oid[$countValue-1];
$state = $state_numeric / $divisor;
$descr = 'Battery banks symmetry '.$countValue;
discover_sensor(
$valid['sensor'],
'state',
$device,
$num_oid,
$index,
$state_name,
$descr,
$divisor,
'1',
$lowlimit,
$lowwarnlimit,
$warnlimit,
$limit,
$state
);
create_sensor_to_state_index(
$device,
$state_name,
$index
);
}
}

View File

@@ -0,0 +1,40 @@
<?php
/**
* eltek-webpower.inc.php
*
* -Description-
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2018 Mikael Sipilainen
* @author Mikael Sipilainen <mikael.sipilainen@gmail.com>
*/
// ELTEK - A Delta Group Company - https://eltek.com/
// Flatpack series DC Power system with SmartPack controller
// (SmartPack2 V2.x, SmartPack S V2.x and Compack V2.x.
// Also seems to work correctly with SmartPack_1 v.5.2 and SW v.3.10)
// ELTEK-DISTRIBUTED-MIB (version9) needs files SNMPv2-SMI SNMPv2-TC
$output = preg_split("/[\s,]+/", $device['sysDescr']);
$version = $output[1];
$oid = snmp_get_multi($device, 'systemSiteInfoControllerType.0 rectifierStatusType.1 batteryName.0 systemSiteInfoSystemSeriaNum.0', '-OQUs', 'ELTEK-DISTRIBUTED-MIB');
$features = 'Rectifier type: '.$oid[1]['rectifierStatusType'];
$features .= ', Battery name: '.$oid[0]['batteryName'];
$hardware = $oid[0]['systemSiteInfoControllerType'];
$serial = $oid[0]['systemSiteInfoSystemSeriaNum'];