Eaton Network Card-MS - data is simultaneously bogus and misreported

Where to start…

tl;dr:


This is wrong. My UPS cannot deliver 3x 54kW at any time of day.
Note: Numbers below do not reflect the ones in the image above.

Many Eaton UPSes use a network management card named ‘Network Card-MS’. This provides all the network management functions of the UPS. SNMP, https, ssh… the works. The card is old, underpowered and uses weak crypto. And, as of this year, it is End of Sales/End of Life. *

The card offers UPS data via three different MIBs:
upsMIB: .1.3.6.1.2.1.33
xupsMIB: .1.3.6.1.4.1.534.1
upsmg: .1.3.6.1.4.1.705.1

LibreNMS appears to poll the first and the last MIB for data. Only the last offers data from optional external sensors, so that makes sense. Kind of.

During polling, we get this:

SNMP[‘/usr/bin/snmpget’ ‘-v3’ ‘-l’ ‘authPriv’ ‘-n’ “” ‘-a’ ‘MD5’ ‘-A’ ‘PASSWORD’ ‘-u’ ‘USER’ ‘-x’ ‘DES’ ‘-X’ ‘PASSWORD’ ‘-OUQnte’ ‘-M’ ‘/opt/l
ibrenms/mibs:/opt/librenms/mibs/ups:/opt/librenms/mibs/mge’ ‘udp:HOSTNAME:161’ ‘.1.3.6.1.2.1.33.1.4.4.1.5.1’]
Checking (snmp) load Percentage load…
37 ← percentage load

SNMP[‘/usr/bin/snmpget’ ‘-v3’ ‘-l’ ‘authPriv’ ‘-n’ “” ‘-a’ ‘MD5’ ‘-A’ ‘PASSWORD’ ‘-u’ ‘USER’ ‘-x’ ‘DES’ ‘-X’ ‘PASSWORD’ ‘-OUQnte’ ‘-M’ ‘/opt/l
ibrenms/mibs:/opt/librenms/mibs/ups:/opt/librenms/mibs/mge’ ‘udp:HOSTNAME:161’ ‘.1.3.6.1.2.1.33.1.4.4.1.4.1’ ‘.1.3.6.1.2.1.33.1.3.3.1.5.1’ ‘.1.3.6.1
.2.1.33.1.5.3.1.4.1’ ‘.1.3.6.1.4.1.705.1.7.2.1.4.1’ ‘.1.3.6.1.4.1.705.1.7.2.1.4.2’ ‘.1.3.6.1.4.1.705.1.7.2.1.4.3’]
Checking (snmp) power Output…
Checking (snmp) power Input…
Checking (snmp) power Bypass…
Checking (snmp) power Output (VA) Phase 1…
Checking (snmp) power Output (VA) Phase 2…
Checking (snmp) power Output (VA) Phase 3…
840 ← in Watts
0
0
37000 ← eh. sort of
37000 <— but…
37000 <---- not three times.

The UPS is rated at 3000 VA and 3000 Watts.
The UPS reports 229V output at 5A. (On three ‘phases’. Bogus.)
And it also reports a load of 830 Watts.

830W / 3000W = 27.6% not right…
(5A * 229V) / 3000VA = 38.1 % this is at least in the ballpark

Bottom line:
LNMS erroneously reports a percentage(x1000) as Watts, and dutifully reports the same thing three times, as it is reported like that from the UPS. Also, the term ‘phase’ is confusing in this context, but that appears to be inherited from MGE. The UPS in question has three separately controlled outputs, but it is definitely a single phase device.

What is the best course of action from here?

For an snmpwalk of all three MIBs, see: http://dpaste.com/108V7T2

*)
Finally, as a public service to fellow IT-dudes and dudettes having to manage this piece of … engineering: If you cannot swap your Eaton ‘Network Card-MS’ for the new ‘Gigabit Network Card M2’, at least get the latest firmware for the ‘Network Card-MS’ (LD). It has some sorely needed fixes for SNMP.

If you go M2, upgrade to fw 1.7.5.

@dagbdagb
As you say, probably different versions are differently wrong in the way they provide the data. And if they use the same OID and structure as other eaton/mge products, then the logic used to display might be the one from another product, unless there is a way to differentiate both.
One way or the other, you are right, if they have a better card now, better to use it indeed.

And if you are ready to improve current LibreNMS code to poll the “old” module, you are also completely welcome :smiley:

I don’t think I said that? :slight_smile:

Anyways, the vendor OID contains no units or display hints. The unit and scaling factor used by LibreNMS does not appear to be based on that. Also, the existing ./tests/data/eaton-mgeups_5px.json shows the same relationship between

mgoutputLoadPerPhase.* (.1.3.6.1.4.1.705.1.7.2.1.4.1) 59000
(after scaling factor? I do not fully understand how these files work.)

and the corresponding UPS-MIB entry

upsOutputPercentLoad (.1.3.6.1.2.1.33.1.4.4.1.5.1) 59

as I observe. I tested this with the following models:
9px
93ps
pw9130

MG-SNMP-UPS-MIB::mgoutputLoadPerPhase always matches the corresponding UPS-MIB::upsOutputPercentLoad.

UPS-MIB::upsOutputPercentLoad.1 = INTEGER: 7 percent
UPS-MIB::upsOutputPercentLoad.2 = INTEGER: 19 percent
UPS-MIB::upsOutputPercentLoad.3 = INTEGER: 31 percent

MG-SNMP-UPS-MIB::mgoutputLoadPerPhase.1 = INTEGER: 7
MG-SNMP-UPS-MIB::mgoutputLoadPerPhase.2 = INTEGER: 19
MG-SNMP-UPS-MIB::mgoutputLoadPerPhase.3 = INTEGER: 31

The reading from MG-SNMP-UPS-MIB::mgoutputLoadPerPhase is not needed as LibreNMS gets the same value from the UPS-MIB. (The same goes for the output power, by the way.)
And it does not appear to represent what LibreNMS says it does.

Will see what I can do about improving the module. I think we should get the generic data from the UPS-MIB and only poll the vendor MIB for data not represented in the other MIBs. Can we keep the RRD format and suppress individual DSes from the UI?

And if someone competent itches to fix this before I make a mess of it, feel free. :slight_smile: