Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Ugreen UPS with Unraid

Featured Replies

The little UPS is really cute and works great with UGOS.

In Unraid I have activated it as APC and USB. But unfortunately it is not recognized. Has anyone managed to fix this?

  • 5 weeks later...
  • Author

I found the solution (NUT-Plugin):

[ugreenups]
driver = usbhid-ups
port = auto
vendorid = 2b89
productid = ffff
subdriver = Arduino
desc = "Ugreen US3000 via USB"

Edited by Berzdorfer

Thanks for sharing, it could help someone in the future. 👍🏻

  • 3 weeks later...

Thank you for posting this and saving me a headache!
For future folks there is just one setting to change in the UI:

Enable Manual Configuration -> For UPS Driver

Then copy/paste Berzdorfers configuration to the config file at the bottom

Then start the NUT service

  • 4 weeks later...

These posts are super helpful; many thanks to those who shared their insight on this conifguration.

One clarifying question: has anyone figured out whether it is possible to have the UGreen NAS automatically reboot once mains power has been restored to the UGreen UPS?

Graceful shutdown works properly with the configuration posted above.

Many thanks.

  • 5 weeks later...

Hi, I assume you are talking about UGREEN US3000 right?
I have an ASRock N100M with a picopsu (12V power brick).
Can anyone tell me if the US3000 will also work with custom builds?

I am actually struggling here to get it working on the DXP4800 Plus ugreen, with the ugreen US3000 UPS.

MMrr5I.png
VbKtmv.png

However no details come back from the UPS??
4rMBB4.png

Edited by danielp1221

  • 4 weeks later...

You may want to try setting the line for "Enable Manual Configuration" from "Yes" to "for UPS Driver".

I haven't been able to get mine to work either way, while some have.

On 12/7/2025 at 5:56 PM, danielp1221 said:

I am actually struggling here to get it working on the DXP4800 Plus ugreen, with the ugreen US3000 UPS.

MMrr5I.png
VbKtmv.png

However no details come back from the UPS??
4rMBB4.png

I'm a noob Unraider with the same setup and this was puzzling me over the past few days. I've finally got it working on my end by using the config instructions from this page: https://forums.unraid.net/topic/60217-plugin-nut-v2-network-ups-tools/page/78/#comment-1584921

On 11/5/2025 at 8:55 AM, OMedia said:

One clarifying question: has anyone figured out whether it is possible to have the UGreen NAS automatically reboot once mains power has been restored to the UGreen UPS?

If anyone still need this info.. I had to make quite some tests connecting UPS to my Mac, but they were succesfull :) To make this feature work you need to add additional option to config - allow_killpower = 1

[ugreenups]

driver = usbhid-ups

port = auto

vendorid = 2b89

productid = ffff

subdriver = Arduino

desc = "Ugreen US3000 via USB"

allow_killpower = 1

Also set Disable UPS Power after Shutdown: Yes

Then in your NAS Bios set Power Failure Recovery: ON

It will send shutdown.return command via NUT at the end of shutting down process. Then UPS will cut all power in 20sec (could be changed with NUT) and beep. When power is back - NAS will start normally.

On 12/7/2025 at 6:56 PM, danielp1221 said:

I am actually struggling here to get it working on the DXP4800 Plus ugreen, with the ugreen US3000 UPS.

MMrr5I.png
VbKtmv.png

However no details come back from the UPS??
4rMBB4.png

I have the exact same issues and can't solve it. Did you or anyone else figure it out? Running a DXP2800 here.

Besides the UI not showing anything, the shutdown logic does not work as well.

Any help would be appreciated!

23 minutes ago, unmix4 said:

I have the exact same issues and can't solve it. Did you or anyone else figure it out? Running a DXP2800 here.

Besides the UI not showing anything, the shutdown logic does not work as well.

Any help would be appreciated!

I found the solution to this!

Unbelievable that I missed this, but maybe I'm not the only one. In the UI configuration there is also a UPS Name field, I somehow thought this is overriden with the config below but it's not. The names need to match, then it works fine.

  • 1 month later...

Thanks all, thought I'd end the post here with everything as a screenshot so any user can see on what settings they need to get a ugreen UPS working with NUT in unraid.

Got it working good thanks to the above posts!

Here's screenshots for any future unraid, ugreen ups :)
Config:

image.png

Display Settings:
image.pngimage.png

The rest of the settings:

image.pngimage.png

  • 1 month later...

Here's a Docker Compose setup that worked for me. It's more involved than the NUT plugin, but might be useful if you prefer Compose for managing your containers.

mkdir -p /boot/config/plugins/compose.manager/projects/nut-upsd #or wherever your Compose files live

Create docker-compose.yaml:

services:

nut-upsd:

image: instantlinux/nut-upsd:latest

container_name: nut-upsd

restart: unless-stopped

privileged: true

pid: host

ports:

- "3493:3493"

volumes:

- /mnt/cache/appdata/nut-upsd:/etc/nut

entrypoint: /etc/nut/start.sh

Notes

  • privileged: true is required for USB access and host shutdown

  • pid: host allows the container to trigger a graceful host poweroff via nsenter

  • NUT config files need Unix file permissions (e.g., 640 for passwords), so they must live on a POSIX filesystem. The UnRAID boot drive is FAT32, which doesn't support Unix permissions — so I put the config at /mnt/cache/appdata/nut-upsd/ instead of /boot/config/

Config files

mkdir -p /mnt/cache/appdata/nut-upsd

ups.conf:

ini

maxretry = 3

retrydelay = 5

[ugreenups]

driver = usbhid-ups

port = auto

vendorid = 2b89

productid = ffff

subdriver = Arduino

desc = "Ugreen US3000 via USB"

pollinterval = 15

user = root

upsd.conf:

LISTEN 0.0.0.0 3493

ALLOW_NOT_ALL_LISTENERS 1

upsd.users:

[upsmon]

password = YOUR_PASSWORD_HERE

upsmon primary

upsmon.conf:

MONITOR ugreenups@localhost 1 upsmon YOUR_PASSWORD_HERE primary

MINSUPPLIES 1

SHUTDOWNCMD "/bin/nsenter -t 1 -m -u -i -n -- /sbin/poweroff"

POLLFREQ 5

POLLFREQALERT 5

HOSTSYNC 15

DEADTIME 15

FINALDELAY 5

RBWARNTIME 43200

NOCOMMWARNTIME 300

POWERDOWNFLAG /etc/nut/killpower

nut.conf:

MODE=netserver

start.sh (custom entrypoint -- the default one has issues with duplicate config entries and restart loops):

#!/bin/sh

mkdir -p /var/run/nut

chown nut:nut /var/run/nut

chown root:nut /etc/nut/*.conf

chmod 640 /etc/nut/*.conf

/usr/sbin/upsdrvctl start

/usr/sbin/upsd -F &

sleep 2

exec /usr/sbin/upsmon -D

Make it executable:

chmod +x /mnt/cache/appdata/nut-upsd/start.sh

Testing it out:

cd /boot/config/plugins/compose.manager/projects/nut-upsd

docker compose up -d

docker exec nut-upsd upsc ugreenups@localhost

You should see output like:

battery.charge: 57

device.mfr: UGREEN

device.model: US3000

ups.status: OL DISCHRG CHRG

Further Notes

  • upsmon inside the container monitors the UPS via upsd

  • When battery hits the low threshold (20% by default), upsmon runs the SHUTDOWNCMD

  • The command uses nsenter -t 1 to execute poweroff on the host (not inside the container)

  • No need to configure anything in UnRAID's Settings > UPS page

  • The image's default entrypoint appends duplicate LISTEN lines to upsd.conf on every restart. The custom start.sh above avoids this.

  • user = root in ups.conf is needed so the driver can access USB devices from inside the container. Without it, the default nut user gets "insufficient permissions" on USB. Separately, you should have a firewall rule to restrict port 3493 (NUT) to only trusted networks (e.g. LAN and Tailscale), so the UPS service isn't exposed to the internet.

  • Since USB device paths can change across reboots, I also have vendorid and productid in ups.conf with port = auto , which is more reliable than hardcoding a /dev/bus/usb/ path.

  • 1 month later...

Thanks for all of the above posts - I've managed to get a setup that works pretty well!

That said, I have been doing some testing and I am wondering if anyone has an answer to the following (it might just be that it's not possible).

TL;DR: When the power returns to the UPS after it has kicked off the shutdown cycle, the NAS doesn't power back on. Is there some config to set to enable this?

Scenario:

  1. Kill power to UPS

  2. Wait the 4 minute timeout for it to kick off the shutdown cycle

  3. Once shutdown begins, resume power to UPS

  4. Observe shutdown

  5. Wait a decent amount of time and observe the NAS not powering back on.

My ups.conf

[ugreenups]
driver = usbhid-ups
port = auto
vendorid = 2b89
productid = ffff
subdriver = arduino
desc = "Ugreen US3000 via USB"
allow_killpower = 1

I believe my config is aligned to what @MinoS posted above https://forums.unraid.net/topic/192997-ugreen-ups-with-unraid/#findComment-1600857

Again, thanks for posting this stuff, has helped me greatly!

  • 3 weeks later...

Hi All,

I finally managed to get the UGREEN US3000 UPS all setup and working, but i have noticed that the logs share and syslog are constantly getting the following, every second, which repeats endlessly. Happy to upload the diagnostics file if it helps.

Anyone have any ideas?

Thanks!

May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] nut_libusb_get_interrupt: Connection timed out
May 26 04:40:06 Urd usbhid-ups[1886523]: [D1:1886523:ugreenups] Got 0 HID objects (371415 times in a row, tolerance is -1)...
May 26 04:40:06 Urd usbhid-ups[1886523]: [D1:1886523:ugreenups] Quick update...
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] refresh_report_buffer: investigating path: 00840004.00840024.00840056
May 26 04:40:06 Urd usbhid-ups[1886523]: [D4:1886523:ugreenups] Entering libusb_get_report
May 26 04:40:06 Urd usbhid-ups[1886523]: [D3:1886523:ugreenups] Report[get]: (5 bytes) => 0a 00 00 00 00
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] PhyMax = 0, PhyMin = 0, LogMax = 2147483647, LogMin = -1
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Unit = 00001001, UnitExp = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Exponent = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] Path: UPS.PowerSummary.DelayBeforeStartup, Type: Feature, ReportID: 0x0a, Offset: 0, Size: 32, Value: 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_infoval_set: report descriptor mapping for 'UPS.PowerSummary.DelayBeforeStartup' (Feature) was already set as handled
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] refresh_report_buffer: investigating path: 00840004.00840024.00840057
May 26 04:40:06 Urd usbhid-ups[1886523]: [D4:1886523:ugreenups] Entering libusb_get_report
May 26 04:40:06 Urd usbhid-ups[1886523]: [D3:1886523:ugreenups] Report[get]: (5 bytes) => 09 ff ff ff ff
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] PhyMax = 0, PhyMin = 0, LogMax = 2147483647, LogMin = -1
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Unit = 00001001, UnitExp = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Exponent = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] Path: UPS.PowerSummary.DelayBeforeShutdown, Type: Feature, ReportID: 0x09, Offset: 0, Size: 32, Value: -1
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_infoval_set: report descriptor mapping for 'UPS.PowerSummary.DelayBeforeShutdown' (Feature) was already set as handled
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] refresh_report_buffer: investigating path: 00840004.00840024.00840055
May 26 04:40:06 Urd usbhid-ups[1886523]: [D4:1886523:ugreenups] Entering libusb_get_report
May 26 04:40:06 Urd usbhid-ups[1886523]: [D3:1886523:ugreenups] Report[get]: (5 bytes) => ee 00 00 00 00
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] PhyMax = 0, PhyMin = 0, LogMax = 2147483647, LogMin = -1
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Unit = 00001001, UnitExp = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Exponent = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] Path: UPS.PowerSummary.DelayBeforeReboot, Type: Feature, ReportID: 0xee, Offset: 0, Size: 32, Value: 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_infoval_set: report descriptor mapping for 'UPS.PowerSummary.DelayBeforeReboot' (Feature) was already set as handled
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] refresh_report_buffer: investigating path: 00840004.00840024.00850068
May 26 04:40:06 Urd usbhid-ups[1886523]: [D4:1886523:ugreenups] Entering libusb_get_report
May 26 04:40:06 Urd usbhid-ups[1886523]: [D3:1886523:ugreenups] Report[get]: (6 bytes) => 06 64 ff ff 00 00
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] PhyMax = 0, PhyMin = 0, LogMax = 2147483647, LogMin = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Unit = 00001001, UnitExp = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Exponent = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] Path: UPS.PowerSummary.RunTimeToEmpty, Type: Feature, ReportID: 0x06, Offset: 8, Size: 32, Value: 65535
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_infoval_set: report descriptor mapping for 'UPS.PowerSummary.RunTimeToEmpty' (Feature) was already set as handled
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] refresh_report_buffer: investigating path: 00840004.00840024.00840002.008500d0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D4:1886523:ugreenups] Entering libusb_get_report
May 26 04:40:06 Urd usbhid-ups[1886523]: [D3:1886523:ugreenups] Report[get]: (4 bytes) => 01 31 00 00
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] PhyMax = 0, PhyMin = 0, LogMax = 1, LogMin = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Unit = 00000000, UnitExp = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Exponent = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] Path: UPS.PowerSummary.PresentStatus.ACPresent, Type: Feature, ReportID: 0x01, Offset: 0, Size: 1, Value: 1
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] hu_find_infoval: found online (value: 1)
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_infoval_set: report descriptor mapping for 'UPS.PowerSummary.PresentStatus.ACPresent' (Feature) was already set as handled
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] process_boolean_info: online
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] process_boolean_info: !offline
May 26 04:40:06 Urd usbhid-ups[1886523]: [D3:1886523:ugreenups] Report[buf]: (4 bytes) => 01 31 00 00
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] PhyMax = 0, PhyMin = 0, LogMax = 1, LogMin = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Unit = 00000000, UnitExp = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Exponent = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] Path: UPS.PowerSummary.PresentStatus.Discharging, Type: Feature, ReportID: 0x01, Offset: 4, Size: 1, Value: 1
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] hu_find_infoval: found dischrg (value: 1)
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_infoval_set: report descriptor mapping for 'UPS.PowerSummary.PresentStatus.Discharging' (Feature) was already set as handled
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] process_boolean_info: dischrg
May 26 04:40:06 Urd usbhid-ups[1886523]: [D3:1886523:ugreenups] Report[buf]: (4 bytes) => 01 31 00 00
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] PhyMax = 0, PhyMin = 0, LogMax = 1, LogMin = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Unit = 00000000, UnitExp = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Exponent = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] Path: UPS.PowerSummary.PresentStatus.Charging, Type: Feature, ReportID: 0x01, Offset: 2, Size: 1, Value: 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] hu_find_infoval: found !chrg (value: 0)
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_infoval_set: report descriptor mapping for 'UPS.PowerSummary.PresentStatus.Charging' (Feature) was already set as handled
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] process_boolean_info: !chrg
May 26 04:40:06 Urd usbhid-ups[1886523]: [D3:1886523:ugreenups] Report[buf]: (4 bytes) => 01 31 00 00
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] PhyMax = 0, PhyMin = 0, LogMax = 1, LogMin = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Unit = 00000000, UnitExp = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] Exponent = 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D2:1886523:ugreenups] Path: UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit, Type: Feature, ReportID: 0x01, Offset: 1, Size: 1, Value: 0
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] hu_find_infoval: found !lowbatt (value: 0)
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_infoval_set: report descriptor mapping for 'UPS.PowerSummary.PresentStatus.BelowRemainingCapacityLimit' (Feature) was already set as handled
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] process_boolean_info: !lowbatt
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] ups_status_set: current battery.charge=100 is okay compared to onlinedischarge_log_throttle_hovercharge=100 (previous onlinedischarge_log_throttle_charge=99): charging
May 26 04:40:06 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] send_to_all: SETINFO driver.state "quiet"
May 26 04:40:06 Urd usbhid-ups[1886523]: [D6:1886523:ugreenups] send_to_all: write 29 bytes to socket 5 succeeded (ret=29): SETINFO driver.state "quiet"
May 26 04:40:07 Urd usbhid-ups[1886523]: [D5:1886523:ugreenups] send_to_all: SETINFO driver.state "updateinfo"
May 26 04:40:07 Urd usbhid-ups[1886523]: [D6:1886523:ugreenups] send_to_all: write 34 bytes to socket 5 succeeded (ret=34): SETINFO driver.state "updateinfo"
May 26 04:40:07 Urd usbhid-ups[1886523]: [D1:1886523:ugreenups] upsdrv_updateinfo...
  • 1 month later...

I just setup the US3000 on a DXP4800 Plus, has anyone found a solution to the excessive logging other than changing it to log to file and not syslog?

Edited by Trent Curtis

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.