From e6fa8dbd134b8a52564b2c7b11ef5da6dc5342bc Mon Sep 17 00:00:00 2001 From: Neil Lathwood Date: Fri, 28 Apr 2017 04:14:52 +0100 Subject: [PATCH] newdevice: Added basic detection for Packetflux SiteMonitor (#6498) * newdevice: Added basic detection for Packetflux SiteMonitor * added missing file * updated to include some health sensors --- html/images/logos/packetflux.png | Bin 0 -> 33070 bytes html/images/os/packetflux.png | Bin 0 -> 12733 bytes includes/definitions/sitemonitor.yaml | 11 + .../sensors/current/sitemonitor.inc.php | 30 + .../sensors/temperature/sitemonitor.inc.php | 36 + .../sensors/voltage/sitemonitor.inc.php | 36 + mibs/packetflux/PACKETFLUX-SMI | 34 + mibs/packetflux/PACKETFLUX-STANDBYPOWER | 642 ++++++++++++++++++ tests/OSDiscoveryTest.php | 5 + tests/snmpsim/sitemonitor.snmprec | 2 + 10 files changed, 796 insertions(+) create mode 100644 html/images/logos/packetflux.png create mode 100644 html/images/os/packetflux.png create mode 100644 includes/definitions/sitemonitor.yaml create mode 100644 includes/discovery/sensors/current/sitemonitor.inc.php create mode 100644 includes/discovery/sensors/temperature/sitemonitor.inc.php create mode 100644 includes/discovery/sensors/voltage/sitemonitor.inc.php create mode 100644 mibs/packetflux/PACKETFLUX-SMI create mode 100644 mibs/packetflux/PACKETFLUX-STANDBYPOWER create mode 100644 tests/snmpsim/sitemonitor.snmprec diff --git a/html/images/logos/packetflux.png b/html/images/logos/packetflux.png new file mode 100644 index 0000000000000000000000000000000000000000..4f324b6ffe407752a6d117e00d3947b3c8e17548 GIT binary patch literal 33070 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 literal 0 HcmV?d00001 diff --git a/html/images/os/packetflux.png b/html/images/os/packetflux.png new file mode 100644 index 0000000000000000000000000000000000000000..5b687c3c673666ef90969abfffc239f2ee57cb79 GIT binary patch literal 12733 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. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2017 Neil Lathwood + * @author Neil Lathwood + */ + +$oid = '.1.3.6.1.4.1.32050.2.1.27.5.4'; +$current = (snmp_get($device, $oid, '-Oqv') / 10); +if ($current > 0) { + discover_sensor($valid['sensor'], 'current', $device, $oid, 0, 'sitemonitor', 'Current', 10, 1, null, null, null, null, $current); +} diff --git a/includes/discovery/sensors/temperature/sitemonitor.inc.php b/includes/discovery/sensors/temperature/sitemonitor.inc.php new file mode 100644 index 0000000000..c44906c025 --- /dev/null +++ b/includes/discovery/sensors/temperature/sitemonitor.inc.php @@ -0,0 +1,36 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2017 Neil Lathwood + * @author Neil Lathwood + */ + +$oid = '.1.3.6.1.4.1.32050.2.1.27.5.0'; +$current = (snmp_get($device, $oid, '-Oqv') / 10); +discover_sensor($valid['sensor'], 'temperature', $device, $oid, 0, 'sitemonitor', 'Temperature', 10, 1, null, null, null, null, $current); + +$oid = '.1.3.6.1.4.1.32050.2.1.27.5.5'; +$current = (snmp_get($device, $oid, '-Oqv') / 10); +discover_sensor($valid['sensor'], 'temperature', $device, $oid, 5, 'sitemonitor', 'Relay on Above', 10, 1, null, null, null, null, $current); + +$oid = '.1.3.6.1.4.1.32050.2.1.27.5.6'; +$current = (snmp_get($device, $oid, '-Oqv') / 10); +discover_sensor($valid['sensor'], 'temperature', $device, $oid, 6, 'sitemonitor', 'Relay on Below', 10, 1, null, null, null, null, $current); diff --git a/includes/discovery/sensors/voltage/sitemonitor.inc.php b/includes/discovery/sensors/voltage/sitemonitor.inc.php new file mode 100644 index 0000000000..3217d8eae1 --- /dev/null +++ b/includes/discovery/sensors/voltage/sitemonitor.inc.php @@ -0,0 +1,36 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2017 Neil Lathwood + * @author Neil Lathwood + */ + +$oid = '.1.3.6.1.4.1.32050.2.1.27.5.1'; +$current = (snmp_get($device, $oid, '-Oqv') / 10); +discover_sensor($valid['sensor'], 'voltage', $device, $oid, 1, 'sitemonitor', 'Shunt Input', 10, 1, null, null, null, null, $current); + +$oid = '.1.3.6.1.4.1.32050.2.1.27.5.2'; +$current = (snmp_get($device, $oid, '-Oqv') / 10); +discover_sensor($valid['sensor'], 'voltage', $device, $oid, 2, 'sitemonitor', 'Power 1', 10, 1, null, null, null, null, $current); + +$oid = '.1.3.6.1.4.1.32050.2.1.27.5.3'; +$current = (snmp_get($device, $oid, '-Oqv') / 10); +discover_sensor($valid['sensor'], 'voltage', $device, $oid, 3, 'sitemonitor', 'Power 2', 10, 1, null, null, null, null, $current); diff --git a/mibs/packetflux/PACKETFLUX-SMI b/mibs/packetflux/PACKETFLUX-SMI new file mode 100644 index 0000000000..18cf8a7718 --- /dev/null +++ b/mibs/packetflux/PACKETFLUX-SMI @@ -0,0 +1,34 @@ +PACKETFLUX-SMI DEFINITIONS ::= BEGIN + IMPORTS + MODULE-IDENTITY, enterprises, OBJECT-IDENTITY + FROM SNMPv2-SMI; + + packetflux MODULE-IDENTITY + LAST-UPDATED "201306041631Z" + ORGANIZATION "PacketFlux Technologies" + CONTACT-INFO "custsvc@packetflux.com + http://www.packetflux.com" + DESCRIPTION "SMI MIB for PacketFlux Technologies" + + REVISION "201306041631Z" + DESCRIPTION "initial version of this module" + REVISION "201306042158Z" + DESCRIPTION "Correct MIB ID" + ::= { enterprises 32050 } + + + packetfluxProducts OBJECT-IDENTITY + STATUS current + DESCRIPTION "packetfluxProducts is the root OBJECT IDENTIFIER + for products released by packetflux technologies." + ::= { packetflux 1 } + + packetfluxMgmt OBJECT-IDENTITY + STATUS current + DESCRIPTION "This is the main subtree for all packetflux product + management mibs." + ::= { packetflux 2 } + + +END + diff --git a/mibs/packetflux/PACKETFLUX-STANDBYPOWER b/mibs/packetflux/PACKETFLUX-STANDBYPOWER new file mode 100644 index 0000000000..a7f516d3a8 --- /dev/null +++ b/mibs/packetflux/PACKETFLUX-STANDBYPOWER @@ -0,0 +1,642 @@ +PACKETFLUX-STANDBYPOWER DEFINITIONS ::= BEGIN + IMPORTS + MODULE-IDENTITY, Integer32, OBJECT-TYPE, + Gauge32, TimeTicks + FROM SNMPv2-SMI + packetfluxMgmt + FROM PACKETFLUX-SMI + OBJECT-GROUP + FROM SNMPv2-CONF + TruthValue + FROM SNMPv2-TC; + + standbypower MODULE-IDENTITY + LAST-UPDATED "201306041649Z" + ORGANIZATION "PacketFlux Technologies" + CONTACT-INFO "custsvc@packetflux.com + http://www.packetflux.com" + DESCRIPTION "MIB for the PacketFlux Standby Power Controller" + + REVISION "201306041649Z" + DESCRIPTION "initial version of this module" + ::= { packetfluxMgmt 2 } + + + powercontrollerstate OBJECT-TYPE + SYNTAX INTEGER { + onprimarypower( 1 ), + startingstandby( 2 ), + transferringtostandby( 3 ), + onstandbypower( 4 ), + transferringtoprimary( 5 ) + } + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The status of the standby power controller." + ::= { standbypower 1 } + + transferswitchstate OBJECT-TYPE + SYNTAX INTEGER { + primary( 1 ), + transfertostandby1( 2 ), + transfertostandby2( 3 ), + transfertostandby3( 4 ), + standby( 5 ), + transfertoprimary1( 6 ), + transfertoprimary2( 7 ), + transfertoprimary3( 8 ) + } + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The current state in the transfer sequence." + ::= { standbypower 2 } + + standbypowerstate OBJECT-TYPE + SYNTAX INTEGER { + stopped( 1 ), + prepare1( 2 ), + prepare2( 3 ), + prepare3( 4 ), + startup1( 5 ), + startup2( 6 ), + startup3( 7 ), + checkrun( 8 ), + reprepare1( 9 ), + reprepare2( 10 ), + reprepare3( 11 ), + warmup1( 12 ), + warmup2( 13 ), + warmup3( 14 ), + verifyrun( 15 ), + running( 16 ), + cooldown1( 17 ), + cooldown2( 18 ), + cooldown3( 19 ), + shutdown1( 20 ), + shutdown2( 21 ), + shutdown3( 22 ), + verifystopped( 23 ), + postshutdown1( 24 ), + postshutdown2( 25 ), + postshutdown3( 26 ) + } + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The current state in the standby power sequence." + ::= { standbypower 3 } + + ac1voltage OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The voltage of the AC input AC1 in 1/10ths of + a volt." + ::= { standbypower 4 } + + ac1frequency OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The frequency of the AC input AC1 in 1/100ths + of a Hertz." + ::= { standbypower 5 } + + ac2voltage OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The voltage of the AC input AC2 in 1/10ths of + a volt." + ::= { standbypower 6 } + + ac2frequency OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The frequency of the AC input AC2 in 1/100ths + of a Hertz." + ::= { standbypower 7 } + + mtr1voltage OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The voltage of the DC input Mtr1 in 1/10ths of + a volt." + ::= { standbypower 8 } + + mtr2voltage OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The voltage of the DC input Mtr2 in 1/10ths of + a volt." + ::= { standbypower 9 } + + pwr1voltage OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The voltage of the DC input Pwr3 in 1/10ths of + a volt." + ::= { standbypower 10 } + + pwr2voltage OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The voltage of the DC input Pwr2 in 1/10ths of + a volt." + ::= { standbypower 11 } + + shuntvoltage OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The voltage of the DC input Shunt in 1/10ths of + a millivolt. Can be negative." + ::= { standbypower 12 } + + temperature OBJECT-TYPE + SYNTAX Gauge32 + MAX-ACCESS read-only + STATUS current + DESCRIPTION "The temperature of the onboard temperature sensor + in 1/10ths of a degree centigrade." + ::= { standbypower 13 } + + recentunsuccessfulstarts OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The number of times the standby power source was + not successfully started. This counter resets + upon a successful start. It can also be reset + via the web interface or by writing 0 to this + object." + ::= { standbypower 14 } + + totalunsuccessfulstarts OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The number of times the standby power source was + not successfully started. This counter DOES NOT + reset upon a successful start. It can be reset + via the web interface or by writing 0 to this + object." + ::= { standbypower 15 } + + recentstalls OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The number of times the standby power source has + stalled. This counter resets upon a clean shutdown. + It can also be reset via the web interface or + by writing 0 to this object." + ::= { standbypower 16 } + + totalstalls OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The number of times the standby power source has + stalled. This counter DOES NOT reset upon a clean + shutdown. It can be reset via the web interface + or by writing 0 to this object." + ::= { standbypower 17 } + + numberofstarts OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The number of times the secondary power source + has started. This counter increments when the + standby sequence reaches the running state. This + counter can be reset via the web interface or + by writing 0 to this object." + ::= { standbypower 18 } + + numberoftransfers OBJECT-TYPE + SYNTAX Integer32 + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The number of times the power has transfered from + primary to standby, or back. A complete transfer + cycle from primary to standby and back to primary + will increment this counter twice. This counter + can be reset via the web interface or by writing + 0 to this object." + ::= { standbypower 19 } + + currenttimeonprimary OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time the transfer switch has been + in the primary state (position) since the most + recent transfer to that state. This timer resets + to zero when the transfer switch leaves the primary + state (position). This timer can be reset via + the web interface or by writing 0 to this object." + ::= { standbypower 20 } + + totaltimeonprimary OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time the transfer switch has been + in the primary state (position) since power on + or the last reset of this counter. This timer + does not automatically reset. This timer can + be reset via the web interface or by writing + 0 to this object." + ::= { standbypower 21 } + + currenttimeonstandby OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time the transfer switch has been + in the standby state (position) since the most + recent transfer to that state. This timer resets + to zero when the transfer switch leaves the primary + state (position). This timer can be reset via + the web interface or by writing 0 to this object." + ::= { standbypower 22 } + + totaltimeonstandby OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time the transfer switch has been + in the standby state (position) since power on + or the last reset of this counter. This timer + does not automatically reset. This timer can + be reset via the web interface or by writing + 0 to this object." + ::= { standbypower 23 } + + currentstandbyruntime OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time the standby power source has + been running during it's current run. This timer + resets to zero when the standby power source + shuts down. This timer can be reset via the web + interface or by writing 0 to this object." + ::= { standbypower 24 } + + totalstandbyruntime OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time the standby power source has + been running since power on or the last reset + of this counter. This timer does not automatically + reset. This timer can be reset via the web interface + or by writing 0 to this object." + ::= { standbypower 25 } + + laststandbyrun OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time since the standby power source + ran last. This timer resets upon start of the + standby power source and starts timing upon shutdown + of the standby power source. This timer can be + reset via the web interface or by writing 0 to + this object." + ::= { standbypower 26 } + + laststandbygracefulstop OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time since standby power source + was gracefully shutdown. This timer resets and + starts timing upon graceful shutdown of the standby + power source. This timer can be reset via the + web interface or by writing 0 to this object." + ::= { standbypower 27 } + + laststandbyunsuccessfulstart OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time since the last failed start + of the standby power source . This timer resets + and starts timing upon a unsuccessful start of + the power source. This timer can be reset via + the web interface or by writing 0 to this object." + ::= { standbypower 28 } + + laststandbyfailure OBJECT-TYPE + SYNTAX TimeTicks + MAX-ACCESS read-write + STATUS current + DESCRIPTION "The amount of time since the stall or failure + while running of the standby power source . This + timer resets and starts timing upon a stall/failure + of the power source. This timer can be reset + via the web interface or by writing 0 to this + object." + ::= { standbypower 29 } + + switch1closed OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Switch 1 input is closed (shorted/on). + False(2) if it is open." + ::= { standbypower 30 } + + switch2closed OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Switch 2 input is closed (shorted/on). + False(2) if it is open." + ::= { standbypower 31 } + + switch3closed OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Switch 3 input is closed (shorted/on). + False(2) if it is open." + ::= { standbypower 32 } + + switch4closed OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Switch 4 input is closed (shorted/on). + False(2) if it is open." + ::= { standbypower 33 } + + switch5closed OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Switch 5 input is closed (shorted/on). + False(2) if it is open." + ::= { standbypower 34 } + + enabled OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the enable input is closed (shorted/on). + False(2) if it is open." + ::= { standbypower 35 } + + relay1on OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Relay 1 ouput is on (C and NO connected). + False(2) if it is off (C and NC connected)." + ::= { standbypower 36 } + + relay2on OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Relay 2 ouput is on (C and NO connected). + False(2) if it is off (C and NC connected)." + ::= { standbypower 37 } + + relay3on OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Relay 3 ouput is on (C and NO connected). + False(2) if it is off (C and NC connected)." + ::= { standbypower 38 } + + relay4on OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Relay 4 ouput is on (C and NO connected). + False(2) if it is off (C and NC connected)." + ::= { standbypower 39 } + + relay5on OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Relay 5 output is on (C and NO + connected). False(2) if it is off (C and NC connected)." + ::= { standbypower 40 } + + relay6on OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Relay 6 output is on (C and NO + connected). False(2) if it is off (C and NC connected)." + ::= { standbypower 41 } + + relay7on OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the Relay 7 output is on (C and NO + connected). False(2) if it is off (C and NC connected)." + ::= { standbypower 42 } + + ruleswitchstandby OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the switch to standby rule is true. + False(2) if it is not." + ::= { standbypower 43 } + + rulereturnprimary OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the return to primary rule is true. + False(2) if it is not." + ::= { standbypower 44 } + + rulestandbygood OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the standby power good rule is true. + False(2) if it is not." + ::= { standbypower 45 } + + rulestopstandby OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the stop standby and consider it failed + rule is true. False(2) if it is not." + ::= { standbypower 46 } + + ruleexercisestandby OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-only + STATUS current + DESCRIPTION "True(1) if the exercise standby without transfer + rule is true. False(2) if it is not." + ::= { standbypower 47 } + + webcontrol1 OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-write + STATUS current + DESCRIPTION "True(1) if the webcontrol 1 virtual toggle switch + is in the on position. False(2) if it is not. + This value can be written to affect the position + of the toggle switch." + ::= { standbypower 48 } + + webcontrol2 OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-write + STATUS current + DESCRIPTION "True(1) if the webcontrol 2 virtual toggle switch + is in the on position. False(2) if it is not. + This value can be written to affect the position + of the toggle switch." + ::= { standbypower 49 } + + webcontrol3 OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-write + STATUS current + DESCRIPTION "True(1) if the webcontrol 3 virtual toggle switch + is in the on position. False(2) if it is not. + This value can be written to affect the position + of the toggle switch." + ::= { standbypower 50 } + + webcontrol4 OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-write + STATUS current + DESCRIPTION "True(1) if the webcontrol 4 virtual toggle switch + is in the on position. False(2) if it is not. + This value can be written to affect the position + of the toggle switch." + ::= { standbypower 51 } + + webcontrol5 OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-write + STATUS current + DESCRIPTION "True(1) if the webcontrol 5 virtual toggle switch + is in the on position. False(2) if it is not. + This value can be written to affect the position + of the toggle switch." + ::= { standbypower 52 } + + webcontrol6 OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-write + STATUS current + DESCRIPTION "True(1) if the webcontrol 6 virtual toggle switch + is in the on position. False(2) if it is not. + This value can be written to affect the position + of the toggle switch." + ::= { standbypower 53 } + + webcontrol7 OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-write + STATUS current + DESCRIPTION "True(1) if the webcontrol 7 virtual toggle switch + is in the on position. False(2) if it is not. + This value can be written to affect the position + of the toggle switch." + ::= { standbypower 54 } + + webcontrol8 OBJECT-TYPE + SYNTAX TruthValue + MAX-ACCESS read-write + STATUS current + DESCRIPTION "True(1) if the webcontrol 8 virtual toggle switch + is in the on position. False(2) if it is not. + This value can be written to affect the position + of the toggle switch." + ::= { standbypower 55 } + + standbypowerConformance OBJECT IDENTIFIER ::= { standbypower 256 } + + standbypowerGroups OBJECT IDENTIFIER ::= { standbypowerConformance 1 } + + packetfluxStandbypowerAllObjects OBJECT-GROUP + OBJECTS { + powercontrollerstate, + transferswitchstate, + standbypowerstate, + ac1voltage, + ac1frequency, + ac2voltage, + ac2frequency, + mtr1voltage, + mtr2voltage, + pwr1voltage, + pwr2voltage, + shuntvoltage, + temperature, + recentunsuccessfulstarts, + totalunsuccessfulstarts, + recentstalls, + totalstalls, + numberofstarts, + numberoftransfers, + currenttimeonprimary, + totaltimeonprimary, + currenttimeonstandby, + totaltimeonstandby, + currentstandbyruntime, + totalstandbyruntime, + laststandbyrun, + laststandbygracefulstop, + laststandbyunsuccessfulstart, + laststandbyfailure, + switch1closed, + switch2closed, + switch3closed, + switch4closed, + switch5closed, + enabled, + relay1on, + relay2on, + relay3on, + relay4on, + relay5on, + relay6on, + relay7on, + ruleswitchstandby, + rulereturnprimary, + rulestandbygood, + rulestopstandby, + ruleexercisestandby, + webcontrol1, + webcontrol2, + webcontrol3, + webcontrol4, + webcontrol5, + webcontrol6, + webcontrol7, + webcontrol8 + } + STATUS current + DESCRIPTION "This automatically created object group contains + all those objects that do not belong to any other + OBJECT-GROUP" + ::= { standbypowerGroups 1 } + + +END diff --git a/tests/OSDiscoveryTest.php b/tests/OSDiscoveryTest.php index ffa182535d..b420fb5a9d 100644 --- a/tests/OSDiscoveryTest.php +++ b/tests/OSDiscoveryTest.php @@ -1648,6 +1648,11 @@ class DiscoveryTest extends \PHPUnit_Framework_TestCase $this->checkOS('sinetica'); } + public function testSiteMonitor() + { + $this->checkOS('sitemonitor'); + } + public function testMegatec() { $this->checkOS('netagent2'); diff --git a/tests/snmpsim/sitemonitor.snmprec b/tests/snmpsim/sitemonitor.snmprec new file mode 100644 index 0000000000..f95f1562b0 --- /dev/null +++ b/tests/snmpsim/sitemonitor.snmprec @@ -0,0 +1,2 @@ +1.3.6.1.2.1.1.1.0|4|PacketFlux SiteMonitor Base II +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.32050.1.1