Network UPS Tools

The primary goal of the Network UPS Tools (NUT) project is to provide support for Power Devices, such as Uninterruptible Power Supplies, Power Distribution Units, Automatic Transfer Switches, Power Supply Units and Solar Controllers. NUT provides a common protocol and set of tools to monitor and manage such devices, and to consistently name equivalent features and data points, across a vast range of vendor-specific protocols and connection media types.

NUT provides many control and monitoring features, with a uniform control and management interface. If you are just getting acquainted with NUT, that page also explains the technical design and some possible set-ups.

If you have an UPS at home, the chances it works with NUT are very high. Indeed brand devices have better chances to be actually supported, but at least very basic support should be available for any UPS with an USB connection. There are also UPS that support NUT over the network directly, but they are usually much more expensive than home devices.

Installing NUT

NUT is a software that you need to install on a computer (or a rPi) which is located nearby the UPS itself and connected to it via USB cable.

For Gentoo, there is very detailed wiki page that you should take a lot at. Beside the Gentoo specific commands, it will provide a nice overview of how it works.

After you have installed the packages, the following command will show you if your UPS is supported:

 # nut-scanner 
Scanning USB bus.
No start IP, skipping SNMP
No start IP, skipping NUT bus (old connect method)
Scanning NUT simulation devices.
Scanning NUT bus (avahi method).
[nutdev-usb1]
        driver = "usbhid-ups"
        port = "auto"
        vendorid = "0463"
        productid = "FFFF"
        product = "Eaton 3S"
        serial = "Blank"
        vendor = "EATON"
        # bus = "001"
        # device = "003"
        # busport = "009"

Note down this output, because this will also become your device setup later on.

Configuring NUT

What you need to do is setup a NUT server on every device connected to a distinct UPS in your home. This is achieved by editing the following text configuration files:

  • /etc/nut/nut.conf
  • /etc/nut/ups.conf
  • /etc/nut/upsd.conf
  • /etc/nut/upsd.users
  • /etc/nut/upsmon.conf
  • /etc/nut/upssched.conf

Here is my example config:

nut.conf is used to configure the operating mode, and you want a netserver here:

nut.conf
MODE=netserver

ups.conf define the UPS connected to your server, and it's a copy-paste of the nut-scanner output:

ups.conf
[UPS-server]
        driver = "usbhid-ups"
        port = "auto"
        vendorid = "0463"
        productid = "FFFF"
        product = "Eaton 3S"
        serial = "Blank"
        vendor = "EATON"
        bus = "001"
 

please note that i have renamed the device with something more meaningful. Sometimes some non branded UPS might require you to remove bus/product/vendor to work, YMMV.

upds.conf contains some special setup for the daemon that manages the UPS data. In general you don't need to edit it. In my experience, some less branded devies might require a setting a custom MAXAGE. You might want to specify the IP where upsd will listen on:

MAXAGE=150
LISTEN 10.20.30.99 3493

upsd.users defines the users that can access your UPS data. You should define as follows:

upsd.users
[monmaster]
    password = monmaster
    upsmon master

[monslave]
    password = monslave
    upsmon slave

it doesn't really matter, but you should costomize your passwords.

upsmon.conf configure your NUT monitor, you should not need to change it from defaults.

upssched.conf define what your server sohuld do on UPS events, customize as you need. My default is:

upssched.conf
AT ONBATT * START-TIMER onbatt 300
AT ONLINE * CANCEL-TIMER onbatt online
AT LOWBATT * EXECUTE onbatt
AT COMMBAD * START-TIMER commbad 30
AT COMMOK * CANCEL-TIMER commbad commok
AT NOCOMM * EXECUTE commbad
AT SHUTDOWN * EXECUTE powerdown
AT REPLBATT * EXECUTE replacebatt

Home Assistant

Home Assistant has a native integration for NUT, which can be found here. Go ahead and install it on your Home Assistant.

At this point, all you need to do is to add a new device from the NUT page in Home Assistant, specify the IP and port of the NUT server, and you are all set!