EcoFlow is one of the more popular companies amongst the recent wave cheaper, co…nsumer-facing LiFePo power station / batteries.
Their new "River 3 Plus" has a USB-B port and acts as a USB HID UPS device.
I recently purchased one and would love to see NUT support eventually.
Product Page: https://www.ecoflow.com/us/river-3-series-portable-power-station (note: only the "plus" & "max" variant on this page support USB HID UPS functionality)
---
The device I have it hooked up to is running an older version of NUT (2.7.x) on FreeBSD which I don't have as a compiler target but I wanted to dump what limited info I have so far:
`./nut-ddl-dump.sh` output (usbhid-ups, explore = 1, vendorId = 3746)
<details><summary>File contents</summary>
```
EcoFlow__EF-UPS-R3P__usbhid-ups__2.7.4__01.dev generated using ups on Sun, 22 Dec 2024 19:38:06 -0800
Please revise and post as a pull request to https://github.com/networkupstools/nut-ddl/
root@twonas[~]# less EcoFlow__EF-UPS-R3P__usbhid-ups__2.7.4__01.dev
# Please add if relevant: DEVICE:URL:REPORT: <GitHub issue/PR or Mailing list archive entry URL>
# Please add if relevant: DEVICE:URL:VENDOR: <Vendor/Manufacturer/Product page URL>
# Please add comments for humans here and perhaps raise concerns about the data points,
# see https://networkupstools.org/ddl/#devseq-files for comment-tag syntax
# strip sensitive data (passwords, SNMP community, serial number, IP address, host name...)
# and post as a pull request to https://github.com/networkupstools/nut-ddl/
# DEVICE:COMMENT:
# Device dump generated by ./nut-ddl-dump.sh on Sun, 22 Dec 2024 19:38:06 -0800
# DEVICE:EOC
# :; upsc ups
device.mfr: EcoFlow
device.model: EF-UPS-R3P
device.serial: <SNIP>
device.type: ups
driver.name: usbhid-ups
driver.parameter.explore: 1
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: no
driver.parameter.vendorid: 3746
driver.version: 2.7.4
driver.version.data: EXPLORE HID 0.1
driver.version.internal: 0.41
ups.mfr: EcoFlow
ups.model: EF-UPS-R3P
ups.productid: ffff
ups.serial: <SNIP>
ups.status: OB
ups.vendorid: 3746
# DEVICE:COMMENT-BLOCK:FIXME:UPSRW: ups
#
# DEVICE:EOC
# DEVICE:COMMENT-BLOCK:FIXME:UPSCMD: ups
# Instant commands supported on UPS [ups]:
# DEVICE:EOC
```
</details>
`/usr/local/libexec/nut/usbhid-ups -DD -a ups -x productid=ffff -x vendorid=3746 -x explore=1` output:
<details><summary>Command output:</summary>
```
0.004043 Checking device (3746/FFFF) (/dev/usb//dev/ugen0.2)
0.006440 - VendorID: 3746
0.006450 - ProductID: ffff
0.006454 - Manufacturer: EcoFlow
0.006457 - Product: EF-UPS-R3P
0.006460 - Serial Number: <SNIP>
0.006463 - Bus: /dev/usb
0.006467 - Device release number: 0100
0.006470 Trying to match device
0.006481 Device matches
0.006694 HID descriptor length 403
0.007419 Report Descriptor size = 403
0.007582 Using subdriver: EXPLORE HID 0.1
0.007592 56 HID objects found
0.007772 Path: UPS.Flow.[4].ConfigActivePower, Type: Feature, ReportID: 0x01, Offset: 0, Size: 16, Value: 260
0.008017 Path: UPS.PowerSummary.Rechargeable, Type: Feature, ReportID: 0x06, Offset: 0, Size: 8, Value: 1
0.008171 Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x1f, Offset: 0, Size: 8, Value: 0
0.008268 Path: UPS.PowerSummary.iOEMInformation, Type: Feature, ReportID: 0x20, Offset: 0, Size: 8, Value: 0
0.008421 Path: UPS.PowerSummary.CapacityMode, Type: Feature, ReportID: 0x16, Offset: 0, Size: 8, Value: 1
0.008518 Path: UPS.PowerSummary.CapacityGranularity1, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 1
0.008674 Path: UPS.PowerSummary.CapacityGranularity2, Type: Feature, ReportID: 0x18, Offset: 0, Size: 8, Value: 1
0.008892 Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x0e, Offset: 0, Size: 8, Value: 100
0.009018 Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x17, Offset: 0, Size: 8, Value: 100
0.009142 Path: UPS.PowerSummary.RemainingCapacity, Type: Input, ReportID: 0x0c, Offset: 0, Size: 8, Value: 80
0.009152 Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x0c, Offset: 0, Size: 8, Value: 80
0.009267 Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 8, Value: 10
0.009392 Path: UPS.PowerSummary.RemainingCapacityLimit, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 20
0.009513 refresh_report_buffer: expected 3 bytes, but got 2 instead
0.009523 Path: UPS.PowerSummary.ManufacturerDate, Type: Feature, ReportID: 0x09, Offset: 0, Size: 16, Value: 0
0.009673 Path: UPS.PowerSummary.AverageTimeToFull, Type: Feature, ReportID: 0x1a, Offset: 0, Size: 16, Value: 7200
0.009892 Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Input, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
0.009903 Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
0.010017 Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, ReportID: 0x0d, Offset: 0, Size: 16, Value: 1928
0.010028 Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x0d, Offset: 0, Size: 16, Value: 1928
0.010143 Path: UPS.PowerSummary.RemainingTimeLimit, Type: Input, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
0.010153 Path: UPS.PowerSummary.RemainingTimeLimit, Type: Feature, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
0.010390 Path: UPS.PowerSummary.DelayBeforeShutdown, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: -1
0.010516 Path: UPS.PowerSummary.DelayBeforeReboot, Type: Feature, ReportID: 0x13, Offset: 0, Size: 16, Value: -1
0.010641 Path: UPS.PowerSummary.ConfigVoltage, Type: Feature, ReportID: 0x0a, Offset: 0, Size: 16, Value: 13.8
0.010766 Path: UPS.PowerSummary.Voltage, Type: Input, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
0.010776 Path: UPS.PowerSummary.Voltage, Type: Feature, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
0.011047 Path: UPS.PowerSummary.AudibleAlarmControl, Type: Input, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
0.011057 Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
0.011142 Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
0.011152 Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
0.011160 Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
0.011167 Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
0.011175 Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
0.011183 Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
0.011190 Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Input, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
0.011198 Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Feature, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
0.011206 Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Input, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
0.011213 Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
0.011220 Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Input, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
0.011228 Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Feature, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
0.011235 Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
0.011242 Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
0.011250 Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Input, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
0.011257 Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Feature, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
0.011265 Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Input, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
0.011273 Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
0.011280 Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Input, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
0.011287 Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
0.011295 Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Input, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
0.011302 Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Feature, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
0.011309 Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
0.011316 Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
0.011323 Path: UPS.PowerSummary.PresentStatus.CommunicationLost, Type: Input, ReportID: 0x07, Offset: 12, Size: 1, Value: 0
0.011331 Path: UPS.PowerSummary.PresentStatus.CommunicationLost, Type: Feature, ReportID: 0x07, Offset: 12, Size: 1, Value: 0
0.011338 Path: UPS.PowerSummary.PresentStatus.Overload, Type: Input, ReportID: 0x07, Offset: 13, Size: 1, Value: 0
0.011346 Path: UPS.PowerSummary.PresentStatus.Overload, Type: Feature, ReportID: 0x07, Offset: 13, Size: 1, Value: 0
0.011362 Report descriptor retrieved (Reportlen = 403)
0.011366 Found HID device
0.011370 Detected a UPS: EcoFlow/EF-UPS-R3P
0.011376 find_nut_info: unknown info type: load.off.delay
0.011380 find_nut_info: unknown info type: load.on.delay
0.011383 find_nut_info: unknown info type: load.off.delay
0.011392 upsdrv_initinfo...
0.011400 upsdrv_updateinfo...
0.257337 libusb_get_interrupt: Connection timed out
0.257359 Got 0 HID objects...
0.257365 Quick update...
0.257469 dstate_init: sock /var/db/nut/usbhid-ups-ups open on fd 6
0.257494 upsdrv_updateinfo...
0.519005 libusb_get_interrupt: Connection timed out
0.519019 Got 0 HID objects...
0.519024 Quick update...
```
</details>