Skip to content

CPS HID: Some devices report output.voltage values too high #2728

Open
@jimklimov

Description

@jimklimov

Much higher than input.voltage, often similar (not always equal) to High Transfer Voltage values where available. In many examples it is stuck at 265.0, regardless of inputs being in 120V or 220-240V ranges.

While the issue was seen on some devices with NUT v2.7.4, it is possible that USB descriptor fix-ups introduced in #1245 (released in NUT v2.8.0) and updated by #2718 (to be released in NUT v2.8.3, currently requires custom builds to test or take advantage of) fixed some issues for one set of models/firmwares, and broke the behaviors for others that were good out of the box. This aspect can now be easily verified by use of disable_fix_report_desc setting for usbhid-ups driver.

It is however possible that those devices are botched in some other way that we still mis-interpret (do not compensate for vendor errors), or that the devices just lie to us and confuse the values internally. Comparative tests with older NUT releases (2.7.4, 2.8.0, current) would be helpful.

Per #1338 (comment) :

0.009244     [D1] Path: UPS.Output.LowVoltageTransfer, Type: Feature, ReportID: 0x10, Offset: 0, Size: 16, Value: 207
0.009253     [D1] Path: UPS.Output.LowVoltageTransfer, Type: Input, ReportID: 0x10, Offset: 0, Size: 16, Value: 207
0.009258     [D1] Path: UPS.Output.HighVoltageTransfer, Type: Feature, ReportID: 0x10, Offset: 16, Size: 16, Value: 253
0.009261     [D1] Path: UPS.**Output.HighVoltageTransfer**, Type: Input, **ReportID: 0x10, Offset: 16**, Size: 16, Value: **253**
0.009452     [D1] Path: UPS.**Output.Voltage**, Type: Feature, **ReportID: 0x12, Offset: 0**, Size: 16, Value: **253**

On line 4, there is ReportID 0x10 offset 16 - HighVoltageTransfer 253
On line 5, ReportID 12, offset 0, Output Voltage 253
Based on the debug - I'm not sure what ReportID exactly is, does NUT really read diferrent data and UPS reports the same value 253 or NUT actually reads the same data? Or ReportID 0x10 offset 16 is the same part of data as ReportID 12 offset 0 ?

Per #982 (comment) this looks like something #2718 and/or #1245 already could have fixed along the way:

NOTE Hex 0x74 is 116 not 140

8.350308 Report[buf]: (3 bytes) => 12 74 00
8.350325 PhyMax = 0, PhyMin = 0, LogMax = 142, LogMin = 136
8.350342 Unit = 00f0d121, UnitExp = 7
8.350359 Exponent = 0
8.350377 Path: UPS.Output.Voltage, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: 140
8.350396 send_to_all: SETINFO output.voltage "140.0"

Likewise for #982 (comment) :

Hex 7c = 124 but the value reported is 140.

0.653344 Entering libusb_get_report
0.654006 Report[get]: (3 bytes) => 12 7c 00
0.654049 PhyMax = 0, PhyMin = 0, LogMax = 142, LogMin = 136
0.654091 Unit = 00f0d121, UnitExp = 7
0.654125 Exponent = 0
0.654295 Path: UPS.Output.Voltage, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: 140

Or #581 (comment) which has same raw readings but may have different LogMin/LogMax (addressed by the PRs above later):

my CP900EPFCLCD reports the output voltage as being between 260 and 270 - though it sits at 260 most of the time. The input voltage averages around 240 as would be expected. I'm not entirely sure what to make of this, though it would appear that ef (239) is somehow being interpreted as 260?

0.010678 Report[get]: (3 bytes) => 0f ef 00
0.010687 Path: UPS.Input.Voltage, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 16, Value: 239
...
0.011178 Report[get]: (3 bytes) => 12 ef 00
0.011188 Path: UPS.Output.Voltage, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: 260

This issue follows up from earlier reports, some closed over time, to track the problem with this specific reading:

driver.version: 20220328-3481-gccbf3eb6c6
driver.version.data: CyberPower HID 0.6
driver.version.internal: 0.47
input.voltage: 236.0
input.voltage.nominal: 230
output.voltage: 265.0    #BAD: expected near 236
driver.version: 2.7.4
driver.version.data: CyberPower HID 0.4
driver.version.internal: 0.41
input.voltage: 121.0
input.voltage.nominal: 120
output.voltage: 265.0    #BAD: expected near 120
driver.version: 2.7.4
driver.version.data: CyberPower HID 0.4
driver.version.internal: 0.41
input.transfer.high: 139
input.transfer.low: 88
input.voltage: 116.0
input.voltage.nominal: 120
output.voltage: 140.0    #BAD: expected near 120
driver.version: 2.7.4
driver.version.data: CyberPower HID 0.4
driver.version.internal: 0.41
input.voltage: 231.0
input.voltage.nominal: 230
output.voltage: 263.0    #BAD: expected near 230 (note not 265.0 either)
### Version 2.7.4-5004-g1f143e5e (month before 2.8.0)
input.voltage: 232.0
input.voltage.nominal: 230
output.voltage: 253.0    #BAD: The value 253 in output.voltage is actually high transfer value. Probably easy to fix.
driver.version: 2.8.0-rc2-109-gbce1d5201
driver.version.data: CyberPower HID 0.6
driver.version.internal: 0.47
driver.version.usb: libusb-1.0.24 (API: 0x1000108)
input.voltage: 230.0
input.voltage.nominal: 230
output.voltage: 253.0
driver.version: 2.7.4
driver.version.data: CyberPower HID 0.4
driver.version.internal: 0.41
input.voltage: 120.0
input.voltage.nominal: 120
output.voltage: 136.0    #BAD: expected near 120
driver.version: 2.7.4
driver.version.data: CyberPower HID 0.4
driver.version.internal: 0.41
input.voltage: 118.0
input.voltage.nominal: 120
output.voltage: 135.0
driver.version: 2.7.4
driver.version.data: CyberPower HID 0.4
driver.version.internal: 0.41
input.voltage: 116.0
input.voltage.nominal: 120
output.voltage: 140.0
input.voltage: 122.0
input.voltage.nominal: 120
output.voltage: 253.0

The dominating idea in those discussions is that for whatever reason NUT reads the output value as whatever is in that byte + 32 (may be or not be the value of some other HID report, especially one of not-yet-decoded ones), and then constrained by LogMin/LogMax values (which may be reported same as High (and maybe Low) Voltage Transfer's LogMin/LogMax values. This is directly the focus of #439 and #1245 (so really wondering if the problem is still seen on devices where the descriptor fix now does happen, especially with current master-branch NUT code base).

Metadata

Metadata

Assignees

No one assigned

    Labels

    CyberPower (CPS)Incorrect or missing readingsOn some devices driver-reported values are systemically off (e.g. x10, x0.1, const+Value, etc.)SynologyIssues related to NUT integration in Synology storage platformUSBneed testingCode looks reasonable, but the feature would better be tested against hardware or OSes

    Type

    No type

    Projects

    Status

    Todo

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions