How to Set Up a Greencell UPS with NUT on OPNsense
Why a UPS matters, how to set up NUT on OPNsense for a Greencell UPS.
Power cuts don’t happen often… but when they do, they usually happen at the worst time: mid-update, during a disk write, or while your firewall is rebooting.
A UPS won’t make your internet “faster” or your server “stronger” — it just buys you time: - keep things alive through short outages - ride out quick brownouts - shut down cleanly if the battery is actually running out
This article is how I set up a Greencell UPS (USB) using NUT on OPNsense, including a small tweak for the blazer_usb driver because this UPS isn’t perfectly detected out of the box.
UPS model details
Here’s the UPS I’m using (product code: UPS07):
| Field | Value |
|---|---|
| Manufacturer | Greencell |
| Power | 480W |
| Apparent power | 600VA–999VA |
| Battery | 1× 12V / 9Ah |
| Response time | 2–6 ms |
| Charging time | 6–8 h |
| Communication | USB |
| Sockets | 6× Schuko |
| Protections | thermal, overvoltage, short-circuit |
| Weight | 4.9 kg |
| Dimensions | 270×190×90 mm |
Install NUT on OPNsense
On OPNsense, NUT is provided as a plugin, so you don’t “compile” anything.
- Go to: System → Firmware → Plugins
- Install: os-nut
- After install, you’ll get a new menu entry: Services → Nut
Before configuring anything: plug the UPS USB cable into OPNsense and make sure it stays connected.
Basic NUT setup (StandAlone)
Most home setups want OPNsense to: - read the UPS over USB - shut itself down cleanly if battery is low
That’s basically “standalone”. In OPNsense (Services → Nut):
- Enable NUT
- Mode: StandAlone (or the closest equivalent option)
- Driver: blazer_usb (for this UPS)
- UPS Name: something simple (no spaces), e.g.
greencell
Why blazer_usb needs extra voltage values on this UPS
This Greencell model isn’t well supported, meaning the driver often can’t correctly figure out a few battery parameters on its own.
One common fix is to provide the battery voltage range manually:
default.battery.voltage.high→ what “fully charged” looks likedefault.battery.voltage.low→ what “basically empty / about to shut down” looks like
These values help NUT estimate things like battery charge more sensibly.
These are the values that worked best for me:
default.battery.voltage.high = 13.6
default.battery.voltage.low = 11
These are not universal. They’re “good enough” values for this unit + battery pack.
If your UPS reports weird battery percentages, this is usually the first place to adjust.
OPNsense NUT driver settings for this Greencell
In OPNsense (Services → Nut → your driver / UPS settings), I use:
port=auto
vendorid="0001"
productid="0000"
default.battery.voltage.high = 13.6
default.battery.voltage.low = 11
What each setting means
-
port=auto
Let NUT find the USB device automatically. -
vendorid/productid
USB identifiers. Some UPS models don’t detect reliably unless you set these.
If you don’t know them, you can discover them (see the next section). -
default.battery.voltage.high/default.battery.voltage.low
Manual battery voltage range for this UPS (helps a lot when the model is “generic”).
What is “Listen Address” under general settings
A lot of people hit this moment:
“I see names, addresses, and a bunch of lines… what is this?”
In NUT, you’ll usually see two different “lists”:
The UPS name on a server
NUT identifies a UPS like this:
UPSNAME@HOST
Examples:
- greencell@localhost → the UPS called greencell on the same machine
- [email protected] → the UPS called greencell on a NUT server at that IP
So if you see an IP next to the UPS name, it usually means “which NUT server you are querying”, not that the UPS itself has an IP.
The variable list (the big one)
NUT reports “variables” like:
ups.statusinput.voltagebattery.voltagebattery.charge
These are just live values the driver is able to read (or estimate). Different UPS models report different things, so don’t worry if your list looks different from someone else’s.
What the common NUT variables mean (the useful ones)
When you open Services → Nut → Diagnostics (or query the UPS), you’ll see a long list of values. Here are the ones that actually matter day-to-day:
| Variable | Meaning | Notes |
|---|---|---|
ups.status |
UPS state | OL = on line power, OB = on battery, LB = low battery |
battery.voltage |
Battery voltage | This is the raw value you’re tuning with high/low defaults |
battery.charge |
Battery % | Often estimated on “generic” UPS models |
input.voltage |
Wall input voltage | Useful to see brownouts / AVR behavior |
output.voltage |
Output voltage | Some UPS don’t report this reliably |
ups.load |
Load % | Can be missing depending on model |
ups.temperature |
UPS temp | Also depends on the model |
If your Greencell doesn’t report some of these: that’s normal. The goal is still the same — detect outages and shut down cleanly.
Test the UPS (without overthinking it)
A simple test is enough:
- Open Services → Nut → Diagnostics
- Unplug the UPS from the wall (keep the USB connected)
- Watch
ups.statuschange from something likeOLtoOB - Plug it back in and confirm it returns to
OL
If ups.status never changes, the driver isn’t reading the UPS correctly.
Final thoughts
With this set up, the UPS becomes boring — and that’s the point.
Even if this Greencell UPS isn’t perfectly supported, the blazer_usb driver works well once you give it a sensible battery voltage range. After that, NUT can do its job: detect outages and shut down cleanly.