All tags RSS feed icon

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.

  1. Go to: System → Firmware → Plugins
  2. Install: os-nut
  3. 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 like
  • default.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.status
  • input.voltage
  • battery.voltage
  • battery.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:

  1. Open Services → Nut → Diagnostics
  2. Unplug the UPS from the wall (keep the USB connected)
  3. Watch ups.status change from something like OL to OB
  4. 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.