nut icon indicating copy to clipboard operation
nut copied to clipboard

EcoFlow River 3 Plus Support

Open notnarb opened this issue 1 year ago • 100 comments

EcoFlow is one of the more popular companies amongst the recent wave cheaper, consumer-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)

File contents
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

/usr/local/libexec/nut/usbhid-ups -DD -a ups -x productid=ffff -x vendorid=3746 -x explore=1 output:

Command output:
   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...

notnarb avatar Dec 23 '24 03:12 notnarb

The EcoFlow Delta 3 Plus model seems to be almost identical. It has a USB-C port that provides UPS functions. Product page: https://us.ecoflow.com/products/delta-3-series-portable-power-station Using NUT 2.8.2.

# lsusb
Bus 001 Device 025: ID 3746:ffff EcoFlow EF-UPS-DELTA
`./nut-ddl-dump.sh` output

# Please add if relevant: DEVICE:URL:REPORT: <GitHub issue/PR or Mailing list archive entry URL>
# Please add if relevant: DEVICE:URL:VENDOR: https://us.ecoflow.com/products/delta-3-series-portable-power-station

# 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 Wed, 25 Dec 2024 17:46:22 -0600
# DEVICE:EOC



# :; upsc ecoflow
device.mfr: EcoFlow
device.model: EF-UPS-DELTA
device.serial: <SNIP>
device.type: ups
driver.debug: 2
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.explore: 1
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 1
driver.parameter.port: auto
driver.parameter.productid: ffff
driver.parameter.synchronous: auto
driver.parameter.vendorid: 3746
driver.state: updateinfo
driver.version: 2.8.2
driver.version.data: EXPLORE HID 0.2
driver.version.internal: 0.53
driver.version.usb: libusb-1.0.27 (API: 0x100010a)
ups.mfr: EcoFlow
ups.model: EF-UPS-DELTA
ups.productid: ffff
ups.serial: <SNIP>
ups.status: OB
ups.vendorid: 3746

# DEVICE:COMMENT-BLOCK:FIXME:UPSRW: ecoflow
# [driver.debug]
# Current debug verbosity level of the driver program
# Type: NUMBER
# Value: 2
#
# [driver.flag.allow_killpower]
# Safety flip-switch to allow the driver daemon to send UPS shutdown command (accessible via driver.killpower)
# Type: NUMBER
# Value: 0
# DEVICE:EOC

# DEVICE:COMMENT-BLOCK:FIXME:UPSCMD: ecoflow
# Instant commands supported on UPS [ecoflow]:
#
# driver.killpower - Tell the driver daemon to initiate UPS shutdown; should be unlocked with driver.flag.allow_killpower option or variable setting
# driver.reload - Reload running driver configuration from the file system (only works for changes in some options)
# driver.reload-or-error - Reload running driver configuration from the file system (only works for changes in some options); return an error if something changed and could not be applied live (so the caller can restart it with new options)
# driver.reload-or-exit - Reload running driver configuration from the file system (only works for changes in some options); exit the running driver if something changed and could not be applied live (so service management framework can restart it with new options)
# DEVICE:EOC

`/usr/lib/nut/usbhid-ups -DD -a ecoflow -x productid=ffff -x vendorid=3746 -x explore=1` output
  0.000000     [D1] upsdrv_makevartable...
  0.000109     [D1] Using USB implementation: libusb-1.0.27 (API: 0x100010a)
  0.000397     [D1] testval_reloadable: setting 'pollinterval' exists and differs: new value '1' vs. '2'
  0.000481     [D1] Network UPS Tools version 2.8.2 (release/snapshot of 2.8.2) built with aarch64-unknown-linux-gnu-gcc (GCC) 14.1.1 20240507 and configured with flags: --prefix=/usr --datadir=/usr/share/nut --libexecdir=/usr/lib/nut --sbindir=/usr/bin --sysconfdir=/etc/nut --disable-static --with-user=nut --with-group=nut --with-altpidpath=/run/nut --with-cgipath=/usr/share/nut/cgi --with-drvpath=/usr/lib/nut --with-htmlpath=/usr/share/nut/html --with-pidpath=/run/nut --with-statepath=/var/lib/nut --with-systemdsystemunitdir=/usr/lib/systemd/system --with-udev-dir=/usr/lib/udev --with-cgi --with-dev --with-doc=man --with-libltdl --with-neon --with-openssl --with-serial --with-snmp --with-usb --without-avahi --without-ipmi --without-freeipmi --without-powerman --without-wrap
  0.000566     [D1] debug level is '2'
  0.004349     [D1] Succeeded to become_user(nut): now UID=969 GID=969
  0.004480     [D1] upsdrv_initups (non-SHUT)...
  0.004503     [D2] Initializing an USB-connected UPS with library libusb-1.0.27 (API: 0x100010a) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.47')
  <SNIP>
  0.016262     [D2] Checking device 4 of 6 (3746/FFFF)
  0.023700     [D2] - VendorID: 3746
  0.023731     [D2] - ProductID: ffff
  0.023747     [D2] - Manufacturer: EcoFlow
  0.023763     [D2] - Product: EF-UPS-DELTA
  0.023779     [D2] - Serial Number: <SNIP>
  0.023795     [D2] - Bus: 001
  0.023811     [D2] - Bus Port: 002
  0.023826     [D2] - Device: 023
  0.023842     [D2] - Device release number: 0100
  0.023858     [D2] Trying to match device
  0.023877     [D2] match_function_subdriver (non-SHUT mode): matching a device...
  0.023959     [D2] Device matches
  0.023979     [D2] Reading configuration descriptor 1 of 1
  0.024005     [D2] successfully set kernel driver auto-detach flag
  0.024603     [D2] Claimed interface 0 successfully
  0.026735     [D2] HID descriptor too short (expected 9, got 0)
  0.026783     [D2] HID descriptor length 401
  0.029249     [D2] Report Descriptor size = 401
  0.029468     Using subdriver: EXPLORE HID 0.2
  0.029499     [D1] 56 HID objects found
  0.032314     [D1] Path: UPS.Flow.[4].ConfigActivePower, Type: Feature, ReportID: 0x01, Offset: 0, Size: 16, Value: 1024
  0.035283     [D1] Path: UPS.PowerSummary.Rechargeable, Type: Feature, ReportID: 0x06, Offset: 0, Size: 8, Value: 1
  0.036233     [D2] nut_libusb_get_report: Overflow
  0.036274     [D1] Can't retrieve Report 1f: Success
  0.036296     [D1] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x1f, Offset: 0, Size: 8
  0.037614     [D2] nut_libusb_get_report: Overflow
  0.037674     [D1] Can't retrieve Report 20: Success
  0.037697     [D1] Path: UPS.PowerSummary.iOEMInformation, Type: Feature, ReportID: 0x20, Offset: 0, Size: 8
  0.039085     [D1] Path: UPS.PowerSummary.CapacityMode, Type: Feature, ReportID: 0x16, Offset: 0, Size: 8, Value: 2
  0.040080     [D1] Path: UPS.PowerSummary.CapacityGranularity1, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 1
  0.041097     [D1] Path: UPS.PowerSummary.CapacityGranularity2, Type: Feature, ReportID: 0x18, Offset: 0, Size: 8, Value: 1
  0.042095     [D1] Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x0e, Offset: 0, Size: 8, Value: 100
  0.043083     [D1] Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x17, Offset: 0, Size: 8, Value: 100
  0.044081     [D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Input, ReportID: 0x0c, Offset: 0, Size: 8, Value: 84
  0.044104     [D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x0c, Offset: 0, Size: 8, Value: 84
  0.045081     [D1] Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 8, Value: 5
  0.046085     [D1] Path: UPS.PowerSummary.RemainingCapacityLimit, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 30
  0.047081     [D2] refresh_report_buffer: expected 3 bytes, but got 2 instead
  0.047105     [D1] Path: UPS.PowerSummary.ManufacturerDate, Type: Feature, ReportID: 0x09, Offset: 0, Size: 16, Value: 0
  0.048086     [D1] Path: UPS.PowerSummary.AverageTimeToFull, Type: Feature, ReportID: 0x1a, Offset: 0, Size: 16, Value: 7200
  0.049085     [D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Input, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
  0.049109     [D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
  0.050086     [D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, ReportID: 0x0d, Offset: 0, Size: 16, Value: 3359
  0.050110     [D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x0d, Offset: 0, Size: 16, Value: 3359
  0.051085     [D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Input, ReportID: 0x08, Offset: 0, Size: 16, Value: 120
  0.051108     [D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Feature, ReportID: 0x08, Offset: 0, Size: 16, Value: 120
  0.052083     [D1] Path: UPS.PowerSummary.DelayBeforeShutdown, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: -1
  0.053083     [D1] Path: UPS.PowerSummary.DelayBeforeReboot, Type: Feature, ReportID: 0x13, Offset: 0, Size: 16, Value: -1
  0.054084     [D1] Path: UPS.PowerSummary.ConfigVoltage, Type: Feature, ReportID: 0x0a, Offset: 0, Size: 16, Value: 13.8
  0.055084     [D1] Path: UPS.PowerSummary.Voltage, Type: Input, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
  0.055107     [D1] Path: UPS.PowerSummary.Voltage, Type: Feature, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
  0.056083     [D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Input, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
  0.056105     [D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
  0.057107     [D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
  0.057154     [D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
  0.057177     [D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, ReportID: 0x07, Offset: 1, Size: 1, Value: 1
  0.057198     [D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x07, Offset: 1, Size: 1, Value: 1
  0.057218     [D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, ReportID: 0x07, Offset: 2, Size: 1, Value: 0
  0.057238     [D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x07, Offset: 2, Size: 1, Value: 0
  0.057257     [D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Input, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
  0.057276     [D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Feature, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
  0.057307     [D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Input, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
  0.057338     [D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
  0.057368     [D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Input, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
  0.057399     [D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Feature, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
  0.057461     [D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
  0.057492     [D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
  0.057522     [D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Input, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
  0.057601     [D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Feature, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
  0.057631     [D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Input, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
  0.057651     [D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
  0.057670     [D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Input, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
  0.057699     [D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
  0.057729     [D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Input, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
  0.057759     [D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Feature, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
  0.057788     [D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
  0.057818     [D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
  0.057847     [D1] Path: UPS.PowerSummary.PresentStatus.CommunicationLost, Type: Input, ReportID: 0x07, Offset: 12, Size: 1, Value: 0
  0.057877     [D1] Path: UPS.PowerSummary.PresentStatus.CommunicationLost, Type: Feature, ReportID: 0x07, Offset: 12, Size: 1, Value: 0
  0.057907     [D1] Path: UPS.PowerSummary.PresentStatus.Overload, Type: Input, ReportID: 0x07, Offset: 13, Size: 1, Value: 0
  0.057926     [D1] Path: UPS.PowerSummary.PresentStatus.Overload, Type: Feature, ReportID: 0x07, Offset: 13, Size: 1, Value: 0
Network UPS Tools - Generic HID driver 0.53 (2.8.2)
USB communication driver (libusb 1.0) 0.47
  0.057970     [D2] Report descriptor retrieved (Reportlen = 401)
  0.057987     [D2] Found HID device
  0.058006     [D1] Detected a UPS: EcoFlow/EF-UPS-DELTA
  0.058036     [D2] find_nut_info: unknown info type: load.off.delay
  0.058053     [D2] find_nut_info: unknown info type: load.on.delay
  0.058069     [D2] find_nut_info: unknown info type: load.off.delay
  0.058097     [D1] upsdrv_initinfo...
  0.058122     [D1] upsdrv_updateinfo...
  0.808518     [D2] nut_libusb_get_interrupt: Connection timed out
  0.808588     [D1] Got 0 HID objects...
  0.808610     [D1] Quick update...
  0.808913     [D2] dstate_init: sock /var/lib/nut/usbhid-ups-ecoflow open on fd 9
  0.808951     Running as foreground process, not saving a PID file
  0.808980     [D1] Driver initialization completed, beginning regular infinite loop
  0.808999     upsnotify: notify about state 2 with libsystemd: was requested, but not running as a service unit now, will not spam more about it
  0.809027     upsnotify: failed to notify about state 2: no notification tech defined, will not spam more about it
  0.809044     upsnotify: logged the systemd watchdog situation once, will not spam more about it
  0.809063     [D1] upsdrv_updateinfo...
  1.559459     [D2] nut_libusb_get_interrupt: Connection timed out
  1.559523     [D1] Got 0 HID objects...
  1.559545     [D1] Quick update...
  1.559619     sock_connect: enabling asynchronous mode (auto)
  1.559670     [D2] send_to_one: sending SETINFO device.mfr "EcoFlow"
  1.559705     [D2] send_to_one: sending SETINFO device.model "EF-UPS-DELTA"
  1.559728     [D2] send_to_one: sending SETINFO device.serial "<SNIP>"
  1.559751     [D2] send_to_one: sending SETINFO device.type "ups"
  1.559774     [D2] send_to_one: sending SETINFO driver.debug "2"
  1.559796     [D2] send_to_one: sending SETFLAGS driver.debug RW NUMBER
  1.559819     [D2] send_to_one: sending SETINFO driver.flag.allow_killpower "0"
  1.559841     [D2] send_to_one: sending SETFLAGS driver.flag.allow_killpower RW NUMBER
  1.559864     [D2] send_to_one: sending SETINFO driver.name "usbhid-ups"
  1.559886     [D2] send_to_one: sending SETINFO driver.parameter.explore "1"
  1.559908     [D2] send_to_one: sending SETINFO driver.parameter.pollfreq "30"
  1.559931     [D2] send_to_one: sending SETINFO driver.parameter.pollinterval "1"
  1.560006     [D2] send_to_one: sending SETINFO driver.parameter.port "auto"
  1.560034     [D2] send_to_one: sending SETINFO driver.parameter.productid "ffff"
  1.560059     [D2] send_to_one: sending SETINFO driver.parameter.synchronous "auto"
  1.560082     [D2] send_to_one: sending SETINFO driver.parameter.vendorid "3746"
  1.560104     [D2] send_to_one: sending SETINFO driver.state "quiet"
  1.560128     [D2] send_to_one: sending SETINFO driver.version "2.8.2"
  1.560150     [D2] send_to_one: sending SETINFO driver.version.data "EXPLORE HID 0.2"
  1.560173     [D2] send_to_one: sending SETINFO driver.version.internal "0.53"
  1.560195     [D2] send_to_one: sending SETINFO driver.version.usb "libusb-1.0.27 (API: 0x100010a)"
  1.560217     [D2] send_to_one: sending SETINFO ups.mfr "EcoFlow"
  1.560238     [D2] send_to_one: sending SETINFO ups.model "EF-UPS-DELTA"
  1.560260     [D2] send_to_one: sending SETINFO ups.productid "ffff"
  1.560288     [D2] send_to_one: sending SETINFO ups.serial "<SNIP>"
  1.560312     [D2] send_to_one: sending SETINFO ups.status "OB"
  1.560333     [D2] send_to_one: sending SETINFO ups.vendorid "3746"
  1.560355     [D2] send_to_one: sending ADDCMD driver.killpower
  1.560377     [D2] send_to_one: sending ADDCMD driver.reload
  1.560398     [D2] send_to_one: sending ADDCMD driver.reload-or-error
  1.560435     [D2] send_to_one: sending ADDCMD driver.reload-or-exit
  1.560458     [D2] send_to_one: sending DATAOK
  1.560479     [D2] send_to_one: sending DUMPDONE
  1.809381     [D1] upsdrv_updateinfo...
  2.559844     [D2] nut_libusb_get_interrupt: Connection timed out
  2.559913     [D1] Got 0 HID objects...
  2.559935     [D1] Quick update...
  2.809677     [D1] upsdrv_updateinfo...
  3.560098     [D2] nut_libusb_get_interrupt: Connection timed out

Let me know if any other output would be useful. (I can get output for River 3 Plus also)

Hope this helps. Thank you.

ykuksenko avatar Dec 26 '24 01:12 ykuksenko

Hello, thanks for the reports. I think an additional one would not hurt, although I'm not at a computer to actually look at them during the holiday season. If anyone (of you?) has time to follow through with the NUT sources' docs and script to generate the HID subdriver, you might have one sooner ;)

jimklimov avatar Dec 26 '24 08:12 jimklimov

Here is the data for EcoFlow River 3 Plus that I have access to. I am using the same machine(pi4)/software for both the Delta and River models - just swapping USB port from one to the other.

# lsusb
Bus 001 Device 026: ID 3746:ffff EcoFlow EF-UPS-R3P
`./nut-ddl-dump.sh` output
cat EcoFlow__EF-UPS-R3P__usbhid-ups__2.8.2__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 Wed, 25 Dec 2024 17:38:55 -0600
# DEVICE:EOC

# :; upsc ecoflow
device.mfr: EcoFlow
device.model: EF-UPS-R3P
device.serial: <SNIP>
device.type: ups
driver.debug: 0
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.explore: 1
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.pollonly: enabled
driver.parameter.port: auto
driver.parameter.productid: ffff
driver.parameter.synchronous: auto
driver.parameter.vendorid: 3746
driver.state: quiet
driver.version: 2.8.2
driver.version.data: EXPLORE HID 0.2
driver.version.internal: 0.53
driver.version.usb: libusb-1.0.27 (API: 0x100010a)
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: ecoflow
# [driver.debug]
# Current debug verbosity level of the driver program
# Type: NUMBER
# Value: 0
#
# [driver.flag.allow_killpower]
# Safety flip-switch to allow the driver daemon to send UPS shutdown command (accessible via driver.killpower)
# Type: NUMBER
# Value: 0
# DEVICE:EOC

# DEVICE:COMMENT-BLOCK:FIXME:UPSCMD: ecoflow
# Instant commands supported on UPS [ecoflow]:
#
# driver.killpower - Tell the driver daemon to initiate UPS shutdown; should be unlocked with driver.flag.allow_killpower option or variable setting
# driver.reload - Reload running driver configuration from the file system (only works for changes in some options)
# driver.reload-or-error - Reload running driver configuration from the file system (only works for changes in some options); return an error if something changed and could not be applied live (so the caller can restart it with new options)
# driver.reload-or-exit - Reload running driver configuration from the file system (only works for changes in some options); exit the running driver if something changed and could not be applied live (so service management framework can restart it with new options)
# DEVICE:EOC
`/usr/lib/nut/usbhid-ups -DD -a ecoflow -x productid=ffff -x vendorid=3746 -x explore=1` output
   0.000001	[D1] upsdrv_makevartable...
   0.000107	[D1] Using USB implementation: libusb-1.0.27 (API: 0x100010a)
   0.000400	[D1] testval_reloadable: setting 'pollinterval' exists and differs: new value '1' vs. '2'
   0.000451	[D1] Network UPS Tools version 2.8.2 (release/snapshot of 2.8.2) built with aarch64-unknown-linux-gnu-gcc (GCC) 14.1.1 20240507 and configured with flags: --prefix=/usr --datadir=/usr/share/nut --libexecdir=/usr/lib/nut --sbindir=/usr/bin --sysconfdir=/etc/nut --disable-static --with-user=nut --with-group=nut --with-altpidpath=/run/nut --with-cgipath=/usr/share/nut/cgi --with-drvpath=/usr/lib/nut --with-htmlpath=/usr/share/nut/html --with-pidpath=/run/nut --with-statepath=/var/lib/nut --with-systemdsystemunitdir=/usr/lib/systemd/system --with-udev-dir=/usr/lib/udev --with-cgi --with-dev --with-doc=man --with-libltdl --with-neon --with-openssl --with-serial --with-snmp --with-usb --without-avahi --without-ipmi --without-freeipmi --without-powerman --without-wrap
   0.000533	[D1] debug level is '2'
   0.004314	[D1] Succeeded to become_user(nut): now UID=969 GID=969
   0.004402	[D1] upsdrv_initups (non-SHUT)...
   0.004423	[D2] Initializing an USB-connected UPS with library libusb-1.0.27 (API: 0x100010a) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.47')
<SNIP>
   0.015891	[D2] Checking device 4 of 6 (3746/FFFF)
   0.021137	[D2] - VendorID: 3746
   0.021169	[D2] - ProductID: ffff
   0.021186	[D2] - Manufacturer: EcoFlow
   0.021202	[D2] - Product: EF-UPS-R3P
   0.021218	[D2] - Serial Number: <SNIP>
   0.021233	[D2] - Bus: 001
   0.021249	[D2] - Bus Port: 002
   0.021264	[D2] - Device: 021
   0.021280	[D2] - Device release number: 0100
   0.021296	[D2] Trying to match device
   0.021315	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.021400	[D2] Device matches
   0.021420	[D2] Reading configuration descriptor 1 of 1
   0.021479	[D2] Claimed interface 0 successfully
   0.023914	[D2] Retrieved HID descriptor (expected 9, got 9)
   0.023957	[D2] HID descriptor length 403
   0.026167	[D2] Report Descriptor size = 403
   0.026317	Using subdriver: EXPLORE HID 0.2
   0.026337	[D1] 56 HID objects found
   0.028913	[D1] Path: UPS.Flow.[4].ConfigActivePower, Type: Feature, ReportID: 0x01, Offset: 0, Size: 16, Value: 260
   0.029643	[D1] Path: UPS.PowerSummary.Rechargeable, Type: Feature, ReportID: 0x06, Offset: 0, Size: 8, Value: 1
   0.030393	[D1] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x1f, Offset: 0, Size: 8, Value: 0
   0.031143	[D1] Path: UPS.PowerSummary.iOEMInformation, Type: Feature, ReportID: 0x20, Offset: 0, Size: 8, Value: 0
   0.031895	[D1] Path: UPS.PowerSummary.CapacityMode, Type: Feature, ReportID: 0x16, Offset: 0, Size: 8, Value: 1
   0.032646	[D1] Path: UPS.PowerSummary.CapacityGranularity1, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 1
   0.033438	[D1] Path: UPS.PowerSummary.CapacityGranularity2, Type: Feature, ReportID: 0x18, Offset: 0, Size: 8, Value: 1
   0.034152	[D1] Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x0e, Offset: 0, Size: 8, Value: 100
   0.034894	[D1] Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x17, Offset: 0, Size: 8, Value: 100
   0.035643	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Input, ReportID: 0x0c, Offset: 0, Size: 8, Value: 81
   0.035666	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x0c, Offset: 0, Size: 8, Value: 81
   0.036395	[D1] Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 8, Value: 10
   0.037156	[D1] Path: UPS.PowerSummary.RemainingCapacityLimit, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 20
   0.037928	[D2] refresh_report_buffer: expected 3 bytes, but got 2 instead
   0.037982	[D1] Path: UPS.PowerSummary.ManufacturerDate, Type: Feature, ReportID: 0x09, Offset: 0, Size: 16, Value: 0
   0.038774	[D1] Path: UPS.PowerSummary.AverageTimeToFull, Type: Feature, ReportID: 0x1a, Offset: 0, Size: 16, Value: 7200
   0.039520	[D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Input, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
   0.039543	[D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
   0.040270	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, ReportID: 0x0d, Offset: 0, Size: 16, Value: 2043
   0.040294	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x0d, Offset: 0, Size: 16, Value: 2043
   0.041031	[D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Input, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
   0.041058	[D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Feature, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
   0.041801	[D1] Path: UPS.PowerSummary.DelayBeforeShutdown, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: -1
   0.042559	[D1] Path: UPS.PowerSummary.DelayBeforeReboot, Type: Feature, ReportID: 0x13, Offset: 0, Size: 16, Value: -1
   0.043307	[D1] Path: UPS.PowerSummary.ConfigVoltage, Type: Feature, ReportID: 0x0a, Offset: 0, Size: 16, Value: 13.8
   0.044025	[D1] Path: UPS.PowerSummary.Voltage, Type: Input, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
   0.044049	[D1] Path: UPS.PowerSummary.Voltage, Type: Feature, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
   0.044771	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Input, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
   0.044793	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
   0.045519	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
   0.045542	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
   0.045561	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
   0.045581	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
   0.045601	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
   0.045620	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
   0.045639	[D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Input, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
   0.045658	[D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Feature, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
   0.045689	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Input, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
   0.045719	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
   0.045785	[D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Input, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
   0.045815	[D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Feature, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
   0.045845	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
   0.045875	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
   0.045905	[D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Input, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
   0.045935	[D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Feature, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
   0.045964	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Input, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
   0.046030	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
   0.046053	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Input, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
   0.046083	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
   0.046113	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Input, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
   0.046143	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Feature, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
   0.046173	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
   0.046202	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Feature, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
   0.046232	[D1] Path: UPS.PowerSummary.PresentStatus.CommunicationLost, Type: Input, ReportID: 0x07, Offset: 12, Size: 1, Value: 0
   0.046261	[D1] Path: UPS.PowerSummary.PresentStatus.CommunicationLost, Type: Feature, ReportID: 0x07, Offset: 12, Size: 1, Value: 0
   0.046291	[D1] Path: UPS.PowerSummary.PresentStatus.Overload, Type: Input, ReportID: 0x07, Offset: 13, Size: 1, Value: 0
   0.046310	[D1] Path: UPS.PowerSummary.PresentStatus.Overload, Type: Feature, ReportID: 0x07, Offset: 13, Size: 1, Value: 0
Network UPS Tools - Generic HID driver 0.53 (2.8.2)
USB communication driver (libusb 1.0) 0.47
   0.046354	[D2] Report descriptor retrieved (Reportlen = 403)
   0.046371	[D2] Found HID device
   0.046390	[D1] Detected a UPS: EcoFlow/EF-UPS-R3P
   0.046420	[D2] find_nut_info: unknown info type: load.off.delay
   0.046437	[D2] find_nut_info: unknown info type: load.on.delay
   0.046453	[D2] find_nut_info: unknown info type: load.off.delay
   0.046480	[D1] upsdrv_initinfo...
   0.046505	[D1] upsdrv_updateinfo...
   0.796924	[D2] nut_libusb_get_interrupt: Connection timed out
   0.796993	[D1] Got 0 HID objects...
   0.797015	[D1] Quick update...
   0.797392	[D2] dstate_init: sock /var/lib/nut/usbhid-ups-ecoflow open on fd 9
   0.797436	Running as foreground process, not saving a PID file
   0.797464	[D1] Driver initialization completed, beginning regular infinite loop
   0.797484	upsnotify: notify about state 2 with libsystemd: was requested, but not running as a service unit now, will not spam more about it
   0.797511	upsnotify: failed to notify about state 2: no notification tech defined, will not spam more about it
   0.797528	upsnotify: logged the systemd watchdog situation once, will not spam more about it
   0.797546	[D1] upsdrv_updateinfo...
   1.547910	[D2] nut_libusb_get_interrupt: Connection timed out
   1.547981	[D1] Got 0 HID objects...
   1.548004	[D1] Quick update...
   1.797846	[D1] upsdrv_updateinfo...
   2.548295	[D2] nut_libusb_get_interrupt: Connection timed out

ykuksenko avatar Dec 27 '24 04:12 ykuksenko

I tried to create a sub driver for the delta 3 plus with firmware V6.31.48.29.

  • the output data is quirky.
  • I was not able to control the load or beeper - not sure if it is possible or if I just do not understand how. Any suggestions welcome.
  • I will try to get a PR filed when I have more time. I'll document quirks in the sub driver .c file - not sure where to do it for now.
  • Also need to test with river 3 plus to see if quirks are the same.
here are sample output data from `upsc` with some quirks documented for the curious
battery.capacity: 100 //unit is percent - NUT docs say this should be Ah but percent may still be useful
battery.capacity.nominal: 100 //unit is percent
battery.charge: 31 //accurate to display, shuts of at battery.charge.low +1% (might be due to slow update rate)
battery.charge.low: 30 //matches APP's battery discharge limit setting
battery.charge.warning: 5 //fixed value AFAICT -- seems useless
battery.runtime: 32 //seems to be for total battery capacity, ignoring discharge limit setting, unit is minutes
battery.runtime.low: 120 //fixed value in minutes AFAICT -- seems useless
device.mfr: EcoFlow
device.model: EF-UPS-DELTA
device.serial: <SNIP>
device.type: ups
driver.debug: 0
driver.flag.allow_killpower: 0
driver.name: usbhid-ups
driver.parameter.interrupt_pipe_no_events_tolerance: -1
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 1
driver.parameter.port: auto
driver.parameter.synchronous: auto
driver.state: updateinfo
driver.version: 2.8.2.1775-1775-g4e9eb9ad1
driver.version.data: EcoFlow HID 0.2
driver.version.internal: 0.60
driver.version.usb: libusb-0.1 (or compat)
ups.beeper.status: enabled
ups.mfr: EcoFlow
ups.model: EF-UPS-DELTA
ups.productid: ffff
ups.serial: <SNIP>
ups.status: OB
ups.vendorid: 3746

ykuksenko avatar Dec 28 '24 03:12 ykuksenko

A new firmware was released for the River 3+ v.1.32.76.52 that add support for power management software.

`/usr/lib/nut/usbhid-ups -DD -a ecoflow -x productid=ffff -x vendorid=3746 -x explore=1` output:
Network UPS Tools - Generic HID driver 0.47 (2.8.0)
USB communication driver (libusb 1.0) 0.43
   0.000000	[D1] debug level is '2'
   0.000174	[D2] Initializing an USB-connected UPS with library libusb-1.0.26 (API: 0x1000109) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.43')
   0.000181	[D1] upsdrv_initups (non-SHUT)...
   0.005024	[D2] Checking device 3 of 7 (3746/FFFF)
   0.022028	[D2] - VendorID: 3746
   0.022039	[D2] - ProductID: ffff
   0.022042	[D2] - Manufacturer: EcoFlow
   0.022045	[D2] - Product: EF-UPS-RIVER 3 Plus
   0.022048	[D2] - Serial Number: <snip>
   0.022052	[D2] - Bus: 003
   0.022055	[D2] - Device: unknown
   0.022058	[D2] - Device release number: 0100
   0.022062	[D2] Trying to match device
   0.022066	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.022125	[D2] Device matches
   0.022129	[D2] Reading first configuration descriptor
   0.022138	[D2] successfully set kernel driver auto-detach flag
   0.022236	[D2] Claimed interface 0 successfully
   0.025109	[D2] Warning: two different HID descriptors retrieved (Reportlen = 403 vs. 376)
   0.025125	[D2] HID descriptor length 376
   0.033037	[D2] Report Descriptor size = 376
   0.033081	Using subdriver: EXPLORE HID 0.2
   0.033086	[D1] 51 HID objects found
   0.036044	[D1] Path: UPS.Flow.[4].ConfigActivePower, Type: Feature, ReportID: 0x01, Offset: 0, Size: 16, Value: 286
   0.039032	[D1] Path: UPS.PowerSummary.Rechargeable, Type: Feature, ReportID: 0x06, Offset: 0, Size: 8, Value: 1
   0.042038	[D1] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x1f, Offset: 0, Size: 8, Value: 0
   0.045028	[D1] Path: UPS.PowerSummary.iOEMInformation, Type: Feature, ReportID: 0x20, Offset: 0, Size: 8, Value: 0
   0.048030	[D1] Path: UPS.PowerSummary.CapacityMode, Type: Feature, ReportID: 0x16, Offset: 0, Size: 8, Value: 1
   0.051036	[D1] Path: UPS.PowerSummary.CapacityGranularity1, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 1
   0.054033	[D1] Path: UPS.PowerSummary.CapacityGranularity2, Type: Feature, ReportID: 0x18, Offset: 0, Size: 8, Value: 1
   0.057099	[D1] Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x0e, Offset: 0, Size: 8, Value: 100
   0.060043	[D1] Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x17, Offset: 0, Size: 8, Value: 100
   0.063035	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Input, ReportID: 0x0c, Offset: 0, Size: 8, Value: 100
   0.063043	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x0c, Offset: 0, Size: 8, Value: 100
   0.066033	[D1] Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 8, Value: 10
   0.069037	[D1] Path: UPS.PowerSummary.RemainingCapacityLimit, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 0
   0.072031	[D2] refresh_report_buffer: expected 3 bytes, but got 2 instead
   0.072039	[D1] Path: UPS.PowerSummary.ManufacturerDate, Type: Feature, ReportID: 0x09, Offset: 0, Size: 16, Value: 0
   0.075033	[D1] Path: UPS.PowerSummary.AverageTimeToFull, Type: Feature, ReportID: 0x1a, Offset: 0, Size: 16, Value: 7200
   0.078033	[D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Input, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
   0.078041	[D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
   0.081033	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, ReportID: 0x0d, Offset: 0, Size: 16, Value: 2559
   0.081041	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x0d, Offset: 0, Size: 16, Value: 2559
   0.084033	[D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Input, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
   0.084040	[D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Feature, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
   0.087037	[D1] Path: UPS.PowerSummary.DelayBeforeShutdown, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: -1
   0.090037	[D1] Path: UPS.PowerSummary.DelayBeforeReboot, Type: Feature, ReportID: 0x13, Offset: 0, Size: 16, Value: -1
   0.093037	[D1] Path: UPS.PowerSummary.ConfigVoltage, Type: Feature, ReportID: 0x0a, Offset: 0, Size: 16, Value: 13.8
   0.096040	[D1] Path: UPS.PowerSummary.Voltage, Type: Input, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
   0.096082	[D1] Path: UPS.PowerSummary.Voltage, Type: Feature, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
   0.099047	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Input, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
   0.099098	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
   0.102041	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
   0.102082	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
   0.102118	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
   0.102125	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
   0.102131	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
   0.102136	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
   0.102142	[D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Input, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
   0.102148	[D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Feature, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
   0.102154	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Input, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
   0.102160	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
   0.102166	[D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Input, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
   0.102172	[D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Feature, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
   0.102177	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
   0.102183	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
   0.102189	[D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Input, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
   0.102194	[D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Feature, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
   0.102200	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Input, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
   0.102206	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
   0.102211	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Input, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
   0.102217	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
   0.102222	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Input, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
   0.102228	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Feature, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
   0.102233	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
   0.102249	[D2] Report descriptor retrieved (Reportlen = 376)
   0.102252	[D2] Found HID device
   0.102258	[D1] Detected a UPS: EcoFlow/EF-UPS-RIVER 3 Plus
   0.102267	[D2] find_nut_info: unknown info type: load.off.delay
   0.102271	[D2] find_nut_info: unknown info type: load.on.delay
   0.102275	[D2] find_nut_info: unknown info type: load.off.delay
   0.102285	[D1] upsdrv_initinfo...
   0.102292	[D1] upsdrv_updateinfo...
   0.852428	[D2] nut_libusb_get_interrupt: Connection timed out
   0.852513	[D1] Got 0 HID objects...
   0.852530	[D1] Quick update...
   0.852599	[D2] dstate_init: sock /run/nut/usbhid-ups-ecoflow open on fd 9
   0.852696	[D1] upsdrv_updateinfo...
   1.603181	[D2] nut_libusb_get_interrupt: Connection timed out
   1.603267	[D1] Got 0 HID objects...
   1.603285	[D1] Quick update...

Currently plugged and being used as an UPS, 100% charged.

emc2cube avatar Jan 27 '25 22:01 emc2cube

A new firmware was released for the River 3+ v.1.32.76.52 that add support for power management software. /usr/lib/nut/usbhid-ups -DD -a ecoflow -x productid=ffff -x vendorid=3746 -x explore=1 output:

Sorry if I'm just being dense but does this mean you have nut successfully working with your river 3+? I'm also on the latest ecoflow firmware and running nut 2.8.2 but haven't had any success.

Do you mind sharing the relevant parts of your working configuration?

bleomycin avatar Feb 28 '25 04:02 bleomycin

No I didn't create a driver myself for my unit, I'm merely providing the debug infos in case it can help someone without a River3+ to implement it.

On a side note reading the manual for the upcoming official power manager https://manuals.ecoflow.com/eu/product/power-manager?lang=en_US&source=desktop I suspect nut may already come installed on the River3+ itself.

emc2cube avatar Feb 28 '25 05:02 emc2cube

Well, having a NUT (or compatible) data server on the UPS itself is a neat idea, just asking for itself to be implemented for ages; part of why RFC 9271 came along to codify the NUT network protocol. That way numerous computers could just be running an upsmon, with the UPS itself being responsible for FSD, waiting on clients to go away, and its own ultimate powerdown/powercycle.

But can you please point where in those docs you saw suggestions that NUT could be part of the UPS? I only saw mentions of adding packages/plugins into NAS appliances...

jimklimov avatar Feb 28 '25 14:02 jimklimov

I don't think he's saying that NUT could be part of the UPS, but rather that NUT supports the River 3+ natively. The link he added shows how to install NUT in a Synology NAS.

0x2501 avatar Feb 28 '25 15:02 0x2501

Both, my OP is just providing raw USB debugging infos for nut to support the ecoflow if plugged directly by USB, as previously provided by @notnarb and @ykuksenko

@jimklimov in the manual https://manuals.ecoflow.com/eu/product/power-manager?lang=en_US&source=desktop#e8dd82a5-094f-48be-a9fe-0f94739367c9 section "Connected devices" then subsection "Remote mode". I may be misunderstanding it, and the install would activate a nutserver on the NAS plugged to the R3+ that then could be accessed by a Win computer. Anyway judging by the install instructions looks like we may just be able to setup upsmon with a line such as MONITOR nutdev1@<ecoflow_or_NAS_IP>:3496 1 efsz <password_to_figure_out_from_GUI> <primary/secondary> and something would act as a nut server which would be a good start.

Worst case, if the nutserver run on the NAS, it mean that they will be making a driver themselves to run on NAS, so if they don't contribute to an official nut driver maybe we can extract some infos from theirs.

emc2cube avatar Feb 28 '25 18:02 emc2cube

I've just picked up a River 3 Plus. My unit is running (the latest) firmware version V1.32.76.52

At the risk of adding nothing new or useful, here's the info I've been able to gather from my unit:

journal prints on attach:
Mar 06 19:38:59 box kernel: usb 3-6: new full-speed USB device number 7 using xhci_hcd
Mar 06 19:38:59 box kernel: usb 3-6: New USB device found, idVendor=3746, idProduct=ffff, bcdDevice= 1.00
Mar 06 19:38:59 box kernel: usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Mar 06 19:38:59 box kernel: usb 3-6: Product: EF-UPS-RIVER 3 Plus
Mar 06 19:38:59 beans kernel: usb 3-6: Manufacturer: EcoFlow
Mar 06 19:38:59 box kernel: usb 3-6: SerialNumber: REDACTED
Mar 06 19:38:59 box kernel: hid-generic 0003:3746:FFFF.0003: unbalanced collection at end of report description
Mar 06 19:38:59 box kernel: hid-generic 0003:3746:FFFF.0003: probe with driver hid-generic failed with error -22
Mar 06 19:38:59 box kernel: cdc_acm 3-6:1.1: ttyACM0: USB ACM device
Mar 06 19:38:59 box mtp-probe[46033]: checking bus 3, device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-6"
Mar 06 19:38:59 box mtp-probe[46033]: bus: 3, device: 7 was not an MTP device
Mar 06 19:38:59 box mtp-probe[46042]: checking bus 3, device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-6"
Mar 06 19:38:59 box mtp-probe[46042]: bus: 3, device: 7 was not an MTP device
$ sudo lsusb -vv -d 3746:
Bus 003 Device 007: ID 3746:ffff EcoFlow EF-UPS-RIVER 3 Plus
Negotiated speed: Full Speed (12Mbps)
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 [unknown]
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x3746 EcoFlow
  idProduct          0xffff EF-UPS-RIVER 3 Plus
  bcdDevice            1.00
  iManufacturer           1 EcoFlow
  iProduct                2 EF-UPS-RIVER 3 Plus
  iSerial                 3 REDACTED
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x006b
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 (null)
          wDescriptorLength     376
          Report Descriptors: 
            ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              32
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              32
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         1
      bInterfaceCount         2
      bFunctionClass          2 Communications
      bFunctionSubClass       2 Abstract (modem)
      bFunctionProtocol       1 AT-commands (v.25ter)
      iFunction               0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      1 AT-commands (v.25ter)
      iInterface              0 
      CDC Header:
        bcdCDC               1.10
      CDC Call Management:
        bmCapabilities       0x00
        bDataInterface          2
      CDC ACM:
        bmCapabilities       0x02
          line coding and serial state
      CDC Union:
        bMasterInterface        1
        bSlaveInterface         2 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0000
  (Bus Powered)
sudo tee -a /etc/nut/ups.conf << EOF
[ecoflow]
  driver = usbhid-ups
  port = auto
  vendorid = 3746
  desc = "River 3 Plus"
EOF
$ sudo /usr/lib/nut/usbhid-ups -DD -a ecoflow -x productid=ffff -x vendorid=3746 -x explore=1
Network UPS Tools 2.8.2.2324-2324-ged967d659 (development iteration after 2.8.2) - Generic HID driver 0.60
USB communication driver (libusb 1.0) 0.50
   0.000000	[D1] upsdrv_makevartable...
   0.000035	[D1] Using USB implementation: libusb-1.0.27 (API: 0x0100010A)
   0.000183	[D1] Network UPS Tools version 2.8.2.2324-2324-ged967d659 (development iteration after 2.8.2) built with gcc (GCC) 14.2.1 20250207 and configured with flags: --prefix=/usr --datadir=/usr/share/nut --libexecdir=/usr/lib/nut --sbindir=/usr/bin --sysconfdir=/etc/nut --disable-static --with-user=nut --with-group=nut --with-altpidpath=/run/nut --with-cgipath=/usr/share/nut/cgi --with-drvpath=/usr/lib/nut --with-htmlpath=/usr/share/nut/html --with-pidpath=/run/nut --with-statepath=/var/lib/nut --with-systemdsystemunitdir=/usr/lib/systemd/system --with-udev-dir=/usr/lib/udev --with-cgi --with-dev --with-doc=man --with-libltdl --with-neon --with-openssl --with-serial --with-snmp --with-usb --without-avahi --without-ipmi --without-freeipmi --without-powerman --without-wrap
   0.000206	[D1] debug level is '2'
   0.001046	[D1] Succeeded to become_user(nut): now UID=949 GID=949
   0.001075	[D1] Signalling UPS [ecoflow]: driver.exit (quietly, no fuss if no driver is running or responding)
   0.001087	Can't open /var/lib/nut/usbhid-ups-ecoflow: No such file or directory
   0.001092	[D1] Request for other driver to exit returned code -1
   0.001096	[D1] Socket dialog with the other driver instance (may be absent) failed: No such file or directory
   0.001107	[D1] upsdrv_initups (non-SHUT)...
   0.001112	[D2] Initializing an USB-connected UPS with library libusb-1.0.27 (API: 0x0100010A) (NUT subdriver name='USB communication driver (libusb 1.0)' ver='0.50')
   0.005492	[D2] Checking device 1 of 8 (1D6B/0003)
   0.005515	[D1] Failed to open device (1D6B/0003), skipping: Access denied (insufficient permissions)
   0.005520	[D2] Checking device 2 of 8 (04F2/B805)
   0.005527	[D1] Failed to open device (04F2/B805), skipping: Access denied (insufficient permissions)
   0.005530	[D2] Checking device 3 of 8 (06CB/00F9)
   0.005536	[D1] Failed to open device (06CB/00F9), skipping: Access denied (insufficient permissions)
   0.005540	[D2] Checking device 4 of 8 (3746/FFFF)
   0.006699	[D2] - VendorID: 3746
   0.006709	[D2] - ProductID: ffff
   0.006711	[D2] - Manufacturer: EcoFlow
   0.006712	[D2] - Product: EF-UPS-RIVER 3 Plus
   0.006714	[D2] - Serial Number: REDACTED
   0.006716	[D2] - Bus: 003
   0.006718	[D2] - Bus Port: 006
   0.006719	[D2] - Device: 008
   0.006721	[D2] - Device release number: 0100
   0.006723	[D2] Trying to match device
   0.006727	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.006799	[D2] Device matches
   0.006801	[D2] Reading configuration descriptor 1 of 1
   0.006824	[D2] Claimed interface 0 successfully
   0.007004	[D2] Retrieved HID descriptor (expected 9, got 9)
   0.007008	[D2] Warning: two different HID descriptors retrieved (Reportlen = 403 vs. 376)
   0.007010	[D2] HID descriptor length 376
   0.007608	[D2] Report Descriptor size = 376
   0.007671	Using subdriver: EXPLORE HID 0.2
   0.007674	[D1] 51 HID objects found
   0.007938	[D1] Path: UPS.Flow.[4].ConfigActivePower, Type: Feature, ReportID: 0x01, Offset: 0, Size: 16, Value: 286
   0.008149	[D1] Path: UPS.PowerSummary.Rechargeable, Type: Feature, ReportID: 0x06, Offset: 0, Size: 8, Value: 1
   0.008335	[D1] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x1f, Offset: 0, Size: 8, Value: 0
   0.008508	[D1] Path: UPS.PowerSummary.iOEMInformation, Type: Feature, ReportID: 0x20, Offset: 0, Size: 8, Value: 0
   0.008920	[D1] Path: UPS.PowerSummary.CapacityMode, Type: Feature, ReportID: 0x16, Offset: 0, Size: 8, Value: 1
   0.009175	[D1] Path: UPS.PowerSummary.CapacityGranularity1, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 1
   0.009327	[D1] Path: UPS.PowerSummary.CapacityGranularity2, Type: Feature, ReportID: 0x18, Offset: 0, Size: 8, Value: 1
   0.009456	[D1] Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x0e, Offset: 0, Size: 8, Value: 100
   0.009621	[D1] Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x17, Offset: 0, Size: 8, Value: 100
   0.009856	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Input, ReportID: 0x0c, Offset: 0, Size: 8, Value: 80
   0.009861	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x0c, Offset: 0, Size: 8, Value: 80
   0.010015	[D1] Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 8, Value: 10
   0.010257	[D1] Path: UPS.PowerSummary.RemainingCapacityLimit, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 20
   0.010437	[D2] refresh_report_buffer: expected 3 bytes, but got 2 instead
   0.010442	[D1] Path: UPS.PowerSummary.ManufacturerDate, Type: Feature, ReportID: 0x09, Offset: 0, Size: 16, Value: 0
   0.010616	[D1] Path: UPS.PowerSummary.AverageTimeToFull, Type: Feature, ReportID: 0x1a, Offset: 0, Size: 16, Value: 7200
   0.010849	[D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Input, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
   0.010854	[D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
   0.011030	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, ReportID: 0x0d, Offset: 0, Size: 16, Value: 1897
   0.011035	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x0d, Offset: 0, Size: 16, Value: 1897
   0.011229	[D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Input, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
   0.011235	[D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Feature, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
   0.011463	[D1] Path: UPS.PowerSummary.DelayBeforeShutdown, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: -1
   0.011689	[D1] Path: UPS.PowerSummary.DelayBeforeReboot, Type: Feature, ReportID: 0x13, Offset: 0, Size: 16, Value: -1
   0.011883	[D1] Path: UPS.PowerSummary.ConfigVoltage, Type: Feature, ReportID: 0x0a, Offset: 0, Size: 16, Value: 13.8
   0.012095	[D1] Path: UPS.PowerSummary.Voltage, Type: Input, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
   0.012101	[D1] Path: UPS.PowerSummary.Voltage, Type: Feature, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
   0.012263	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Input, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
   0.012267	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
   0.012443	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
   0.012448	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
   0.012450	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
   0.012453	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
   0.012457	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
   0.012460	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
   0.012463	[D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Input, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
   0.012465	[D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Feature, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
   0.012469	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Input, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
   0.012473	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
   0.012477	[D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Input, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
   0.012481	[D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Feature, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
   0.012485	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
   0.012489	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
   0.012493	[D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Input, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
   0.012496	[D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Feature, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
   0.012500	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Input, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
   0.012503	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
   0.012506	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Input, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
   0.012509	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
   0.012513	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Input, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
   0.012518	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Feature, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
   0.012521	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
   0.012534	[D2] Report descriptor retrieved (Reportlen = 376)
   0.012536	[D2] Found HID device
   0.012538	[D1] Detected a UPS: EcoFlow/EF-UPS-RIVER 3 Plus
   0.012546	[D2] find_nut_info: unknown info type: load.off.delay
   0.012549	[D2] find_nut_info: unknown info type: load.on.delay
   0.012552	[D2] find_nut_info: unknown info type: load.off.delay
   0.012563	[D1] upsdrv_initinfo...
   0.012572	[D1] upsdrv_updateinfo...
   0.762900	[D2] nut_libusb_get_interrupt: Connection timed out
   0.762918	[D1] Got 0 HID objects (1 times in a row, tolerance is -1)...
   0.762924	[D1] Quick update...
   0.763122	Listening on socket /var/lib/nut/usbhid-ups-ecoflow
   0.763127	[D2] dstate_init: sock /var/lib/nut/usbhid-ups-ecoflow open on fd 9
   0.763139	Running as foreground process, not saving a PID file
   0.763147	[D1] Driver initialization completed, beginning regular infinite loop
   0.763152	upsnotify: notify about state NOTIFY_STATE_READY_WITH_PID with libsystemd: was requested, but not running as a service unit now, will not spam more about it
   0.763157	[D1] On systems without service units, consider `export NUT_QUIET_INIT_UPSNOTIFY=true`
   0.763160	upsnotify: failed to notify about state NOTIFY_STATE_READY_WITH_PID: no notification tech defined, will not spam more about it
   0.763165	upsnotify: logged the systemd watchdog situation once, will not spam more about it
   0.763168	[D1] upsdrv_updateinfo...
   1.513808	[D2] nut_libusb_get_interrupt: Connection timed out
   1.513839	[D1] Got 0 HID objects (2 times in a row, tolerance is -1)...
   1.513845	[D1] Quick update...
   2.764480	[D1] upsdrv_updateinfo...
   3.515118	[D2] nut_libusb_get_interrupt: Connection timed out
   3.515154	[D1] Got 0 HID objects (3 times in a row, tolerance is -1)...

greyltc avatar Mar 07 '25 04:03 greyltc

I think I've got this working. My PR is here: https://github.com/networkupstools/nut/pull/2837

Here are some screenshots of nut-monitor for my River 3 Plus: Image Image

greyltc avatar Mar 07 '25 07:03 greyltc

The Windows and NAS applications have now been released, if this helps intergrate the ecoflow river. Hopefully the Delta 3 Plus as well. https://www.ecoflow.com/us/support/download/index

sondercoder avatar Mar 15 '25 18:03 sondercoder

They do not act as a USB HID UPS on Windows. There's no driver at all before their software that pushes through some kind of proprietary driver. I've tested both plus units. What a disappointment, all they had to do was use a USB HID UPS driver. I'm returning them.

BitPopCoin avatar Mar 31 '25 07:03 BitPopCoin

@BitPopCoin : did you have a chance to check them with a recent NUT for Windows build? If the code proposed in this tread and related PRs was good for other platforms, NUT CI artifacts of master branch builds like https://ci.appveyor.com/project/nut-travis/nut/builds/51793727/artifacts might just work (possibly after fiddling with Zadig to attach libusb to needed VID:PID), see https://github.com/networkupstools/nut/wiki/NUT-for-Windows

jimklimov avatar Mar 31 '25 09:03 jimklimov

Guys, excuse my ignorance. I just received a River 3 plus, and show on their web page that it would be supposingly support connection with Synology NAS 923+. I followed all their steps ,installed extra software but the NAS itself is not able to identify it as connected UPS device. Is the above proposed PRs going to be handy for the Synology part? Any guide on how I could install them?

peros550 avatar Apr 12 '25 06:04 peros550

@peros550 : What is the "extra software" - does it seem to involve NUT? If yes - which version?

The "above proposed PRs" were merged, so are now part of NUT master branch on GitHub and will be in 2.8.3 release shortly (going through release candidate cycles now).

How to get that built into Synology specifically - sorry, got no clue on this one...

jimklimov avatar Apr 12 '25 09:04 jimklimov

@peros550 : What is the "extra software" - does it seem to involve NUT? If yes - which version?

The "above proposed PRs" were merged, so are now part of NUT master branch on GitHub and will be in 2.8.3 release shortly (going through release candidate cycles now).

How to get that built into Synology specifically - sorry, got no clue on this one...

I followed the instructions here. It looks, they instruct you to have some sort of NUT server running on your NAS, which runs on 3496 port. Then , their Desktop app can connect to it and pull data.

I was succesful in connecting a Home Assistant NUT integration, after I got the port, username and password from the Desktop app. However, the Synology NAS UI couldn't connect to it, probably because it only accepts an IP address for an external NUT and it didn't accept "Syno 923 LAN IP":3496. I dont know which version runs in Ecoflow's nut server version, sorry.

peros550 avatar Apr 12 '25 14:04 peros550

Hi! Any chance to get the current load?

diego351 avatar Apr 14 '25 16:04 diego351

Hi! Any chance to get the current load?

I was seeing a live power reading appear in the ups.power.nominal variable while I was putting things together (see my above comment: https://github.com/networkupstools/nut/issues/2735#issuecomment-2705700983). I can't honestly remember if this number is power drawn from the wall by the UPS unit or power delivered by the UPS unit to the load.

greyltc avatar Apr 14 '25 17:04 greyltc

@greyltc It's actualyt the battery capacity in Wh:

Image

diego351 avatar Apr 14 '25 17:04 diego351

I actually have other problem: upsrw doesn't save value even though it confirmed "OK".

Image

Also, the driver.flag.allow_killpower flag value was reset after restart, is it the desired behaviour? Sorry, it's my first experience with nut.

In general even though I set driver.flag.allow_killpower=1 when I do upsdrvctl shutdown the ecoflow doesnt shut down. It would be nice to have a feature so it can be actually shutdown and then when the power outage is gone to power on the AC.

diego351 avatar Apr 14 '25 17:04 diego351

"OK" with upsrw and upscmd means only that the server connection worked and command was not instantly rejected, you may want -w to wait for its result.

Writes with these commands may be or not be saved by the device (depends on its firmware and whether there's R/W flash on board or only RAM), and are not saved by NUT (recommended ownership/permission on config files should forbid it too). You can explicitly configure options in ups.conf, as well as default or override values for device readings.

A nominal power/current/charge/voltage/... is just that - max safe rating burned into the device/firmware (if any).

jimklimov avatar Apr 14 '25 19:04 jimklimov

It would be nice to have a feature so it can be actually shutdown and then when the power outage is gone to power on the AC.

Depends on device ability and driver support (if someone found and coded a way to call the device commands for this).

jimklimov avatar Apr 14 '25 19:04 jimklimov

@greyltc It's actualyt the battery capacity in Wh:

oh!

Funny coincidence that is pretty much what my typical load is.

Capacity (energy) being reported into a variable with "power" in the name is annoying nonsense...

Anyhow, I think we'll need a new firmware from ecoflow that exposes load monitoring. Is there anything newer than V1.32.76.52 yet?

greyltc avatar Apr 14 '25 21:04 greyltc

For named value definitions, check dosc/nut-names.adoc in sources.

"Power" is the "apparent" one, in VA. There may be "realpower" in Watts (power modulo crest factor). Capacity is in Ah, etc.

That said, there may be errors in mapping from device reports to chosen NUT-standard names, and generally speaking, there have been errors in firmwares too. Code is code.

jimklimov avatar Apr 14 '25 21:04 jimklimov

Anyhow, I think we'll need a new firmware from ecoflow that exposes load monitoring. Is there anything newer than V1.32.76.52 yet?

I have 1.33.81.53 installed since end of March, looks pretty much the same in explore but may have other changes under the hood .

`/usr/lib/nut/usbhid-ups -u root -DD -a ecoflow -x productid=ffff -x vendorid=3746 -x explore=1` output:
   0.031402	[D2] Checking device 3 of 7 (3746/FFFF)
   0.048601	[D2] - VendorID: 3746
   0.048625	[D2] - ProductID: ffff
   0.048633	[D2] - Manufacturer: EcoFlow
   0.048642	[D2] - Product: EF-UPS-RIVER 3 Plus
   0.048650	[D2] - Serial Number: <snip>
   0.048658	[D2] - Bus: 003
   0.048661	[D2] - Device: unknown
   0.048664	[D2] - Device release number: 0100
   0.048666	[D2] Trying to match device
   0.048668	[D2] match_function_subdriver (non-SHUT mode): matching a device...
   0.048742	[D2] Device matches
   0.048745	[D2] Reading first configuration descriptor
   0.048767	[D2] Claimed interface 0 successfully
   0.051604	[D2] Warning: two different HID descriptors retrieved (Reportlen = 403 vs. 376)
   0.051609	[D2] HID descriptor length 376
   0.059601	[D2] Report Descriptor size = 376
   0.059627	Using subdriver: EXPLORE HID 0.2
   0.059630	[D1] 51 HID objects found
   0.062606	[D1] Path: UPS.Flow.[4].ConfigActivePower, Type: Feature, ReportID: 0x01, Offset: 0, Size: 16, Value: 286
   0.065602	[D1] Path: UPS.PowerSummary.Rechargeable, Type: Feature, ReportID: 0x06, Offset: 0, Size: 8, Value: 1
   0.068601	[D1] Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x1f, Offset: 0, Size: 8, Value: 0
   0.071598	[D1] Path: UPS.PowerSummary.iOEMInformation, Type: Feature, ReportID: 0x20, Offset: 0, Size: 8, Value: 0
   0.074602	[D1] Path: UPS.PowerSummary.CapacityMode, Type: Feature, ReportID: 0x16, Offset: 0, Size: 8, Value: 1
   0.077606	[D1] Path: UPS.PowerSummary.CapacityGranularity1, Type: Feature, ReportID: 0x10, Offset: 0, Size: 8, Value: 1
   0.080602	[D1] Path: UPS.PowerSummary.CapacityGranularity2, Type: Feature, ReportID: 0x18, Offset: 0, Size: 8, Value: 1
   0.083605	[D1] Path: UPS.PowerSummary.FullChargeCapacity, Type: Feature, ReportID: 0x0e, Offset: 0, Size: 8, Value: 100
   0.086603	[D1] Path: UPS.PowerSummary.DesignCapacity, Type: Feature, ReportID: 0x17, Offset: 0, Size: 8, Value: 100
   0.089604	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Input, ReportID: 0x0c, Offset: 0, Size: 8, Value: 100
   0.089609	[D1] Path: UPS.PowerSummary.RemainingCapacity, Type: Feature, ReportID: 0x0c, Offset: 0, Size: 8, Value: 100
   0.092618	[D1] Path: UPS.PowerSummary.WarningCapacityLimit, Type: Feature, ReportID: 0x0f, Offset: 0, Size: 8, Value: 10
   0.095605	[D1] Path: UPS.PowerSummary.RemainingCapacityLimit, Type: Feature, ReportID: 0x11, Offset: 0, Size: 8, Value: 0
   0.098607	[D2] refresh_report_buffer: expected 3 bytes, but got 2 instead
   0.098613	[D1] Path: UPS.PowerSummary.ManufacturerDate, Type: Feature, ReportID: 0x09, Offset: 0, Size: 16, Value: 0
   0.101604	[D1] Path: UPS.PowerSummary.AverageTimeToFull, Type: Feature, ReportID: 0x1a, Offset: 0, Size: 16, Value: 7200
   0.104604	[D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Input, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
   0.104609	[D1] Path: UPS.PowerSummary.AverageTimeToEmpty, Type: Feature, ReportID: 0x1c, Offset: 0, Size: 16, Value: 7200
   0.107604	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Input, ReportID: 0x0d, Offset: 0, Size: 16, Value: 2229
   0.107609	[D1] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x0d, Offset: 0, Size: 16, Value: 2229
   0.110603	[D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Input, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
   0.110608	[D1] Path: UPS.PowerSummary.RemainingTimeLimit, Type: Feature, ReportID: 0x08, Offset: 0, Size: 16, Value: 600
   0.113599	[D1] Path: UPS.PowerSummary.DelayBeforeShutdown, Type: Feature, ReportID: 0x12, Offset: 0, Size: 16, Value: -1
   0.116604	[D1] Path: UPS.PowerSummary.DelayBeforeReboot, Type: Feature, ReportID: 0x13, Offset: 0, Size: 16, Value: -1
   0.119606	[D1] Path: UPS.PowerSummary.ConfigVoltage, Type: Feature, ReportID: 0x0a, Offset: 0, Size: 16, Value: 13.8
   0.122608	[D1] Path: UPS.PowerSummary.Voltage, Type: Input, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
   0.122614	[D1] Path: UPS.PowerSummary.Voltage, Type: Feature, ReportID: 0x0b, Offset: 0, Size: 16, Value: 13
   0.125611	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Input, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
   0.125616	[D1] Path: UPS.PowerSummary.AudibleAlarmControl, Type: Feature, ReportID: 0x14, Offset: 0, Size: 8, Value: 2
   0.128607	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Input, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
   0.128612	[D1] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x07, Offset: 0, Size: 1, Value: 0
   0.128616	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Input, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
   0.128620	[D1] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x07, Offset: 1, Size: 1, Value: 0
   0.128623	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Input, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
   0.128627	[D1] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x07, Offset: 2, Size: 1, Value: 1
   0.128631	[D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Input, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
   0.128634	[D1] Path: UPS.PowerSummary.PresentStatus.BatteryPresent, Type: Feature, ReportID: 0x07, Offset: 3, Size: 1, Value: 1
   0.128639	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Input, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
   0.128643	[D1] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x07, Offset: 4, Size: 1, Value: 0
   0.128647	[D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Input, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
   0.128651	[D1] Path: UPS.PowerSummary.PresentStatus.RemainingTimeLimitExpired, Type: Feature, ReportID: 0x07, Offset: 5, Size: 1, Value: 0
   0.128655	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Input, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
   0.128658	[D1] Path: UPS.PowerSummary.PresentStatus.NeedReplacement, Type: Feature, ReportID: 0x07, Offset: 6, Size: 1, Value: 0
   0.128662	[D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Input, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
   0.128666	[D1] Path: UPS.PowerSummary.PresentStatus.VoltageNotRegulated, Type: Feature, ReportID: 0x07, Offset: 7, Size: 1, Value: 0
   0.128670	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Input, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
   0.128674	[D1] Path: UPS.PowerSummary.PresentStatus.FullyCharged, Type: Feature, ReportID: 0x07, Offset: 8, Size: 1, Value: 0
   0.128678	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Input, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
   0.128682	[D1] Path: UPS.PowerSummary.PresentStatus.FullyDischarged, Type: Feature, ReportID: 0x07, Offset: 9, Size: 1, Value: 0
   0.128685	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Input, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
   0.128689	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownRequested, Type: Feature, ReportID: 0x07, Offset: 10, Size: 1, Value: 0
   0.128693	[D1] Path: UPS.PowerSummary.PresentStatus.ShutdownImminent, Type: Input, ReportID: 0x07, Offset: 11, Size: 1, Value: 0
   0.128704	[D2] Report descriptor retrieved (Reportlen = 376)
   0.128706	[D2] Found HID device
   0.128710	[D1] Detected a UPS: EcoFlow/EF-UPS-RIVER 3 Plus
   0.128716	[D2] find_nut_info: unknown info type: load.off.delay
   0.128719	[D2] find_nut_info: unknown info type: load.on.delay
   0.128721	[D2] find_nut_info: unknown info type: load.off.delay
   0.128728	[D1] upsdrv_initinfo...
   0.128732	[D1] upsdrv_updateinfo...
   0.878862	[D2] nut_libusb_get_interrupt: Connection timed out
   0.878882	[D1] Got 0 HID objects...
   0.878886	[D1] Quick update...
   0.878937	[D2] dstate_init: sock /run/nut/usbhid-ups-ecoflow open on fd 9
   0.878970	[D1] Group and/or user account for this driver was customized ('root:nut') compared to built-in defaults. Fixing socket '/run/nut/usbhid-ups-ecoflow' ownership/access.
   0.878982	[D1] Group access for this driver successfully fixed
   0.878992	[D1] upsdrv_updateinfo...
   1.629751	[D2] nut_libusb_get_interrupt: Connection timed out
   1.629769	[D1] Got 0 HID objects...

emc2cube avatar Apr 14 '25 22:04 emc2cube

0.062606 [D1] Path: UPS.Flow.[4].ConfigActivePower, Type: Feature, ReportID: 0x01, Offset: 0, Size: 16, Value: 286

God only knows why their firmware engineer(s) chose to write the design capacity into a variable called ConfigActivePower and then a value of 100 into the variable called DesignCapacity. Is there a chance there's anything wrong with the HID scanner?

I have 1.33.81.53

After looking over that, it looks like there's not much (if anything) new and useful is exposed, unsure if I'll bother with the upgrade from V1.32.76.52...

greyltc avatar Apr 16 '25 17:04 greyltc

Is there a chance there's anything wrong with the HID scanner?

Generally, AFAIK no. There are issues with certain vendors' LogMin/LogMax encodings and/or some other bogus data - mitigation of these started around #1024 and later was streamlined for usbhid-ups with standardized fix-up methods; see cps-hid.c and apc-hid.c (IIRC) for implemented fixups.

jimklimov avatar Apr 16 '25 20:04 jimklimov

...
   0.048745	[D2] Reading first configuration descriptor
   0.048767	[D2] Claimed interface 0 successfully
   0.051604	[D2] Warning: two different HID descriptors retrieved (Reportlen = 403 vs. 376)
   0.051609	[D2] HID descriptor length 376
   0.059601	[D2] Report Descriptor size = 376
   0.059627	Using subdriver: EXPLORE HID 0.2
   0.059630	[D1] 51 HID objects found
...

Is two different HID descriptors retrieved (Reportlen = 403 vs. 376) of any concern?

greyltc avatar Apr 16 '25 21:04 greyltc