NUT provides bindings for several common languages that are presented below. All these are released under the same license as NUT (the GNU General Public License).
If none of these suits you for technical or legal reasons, you can implement one easily using the Network protocol information.
The latter approach has been used to create the Python PyNUT module, the Nagios check_ups plugin (and probably others), which can serve as a reference.
The upsclient library can be linked into other programs to give access to upsd and UPS status information. Both static and shared versions are provided.
Clients like upsc are provided as examples of how to retrieve data using the upsclient functions. Other programs not included in this package may also use this library, such as wmnut.
This library file and the associated header files are not installed by
default. You must ./configure --with-lib
to enable building and
installing these files. The libraries can then be built and installed
with make
and make install
as usual. This must be done before
building other (non-NUT) programs which depend on them.
For more information, refer to the upsclient(3), manual page and the various upscli_*(3) functions documentation referenced in the same file.
NUT provides helper scripts to ease the configuration step of your program, by detecting the right compilation and link flags:
If you have pkg-config installed, and you need to find the location of the NUT client include files, add the output of the following command to your build system (which can be combined with other pkg-config invocations):
pkg-config libupsclient --cflags
If you don’t have pkg-config, use this:
libupsclient-config --cflags
Reference: libupsclient-config(1)
The PyNUT module, contributed by David Goncalves, can be used for connecting a
Python script to upsd
. Note that this code (and the accompanying NUT-Monitor
application) is licensed under the GPL v3.
The PyNUTClient
class abstracts the connection to the server. In order to
list the status variables for ups1
on the local upsd
, the following
commands could be used:
$ cd scripts/python/module $ python ... >>> import PyNUT >>> from pprint import pprint >>> client = PyNUT.PyNUTClient() >>> vars = client.GetUPSVars('ups1') >>> pprint(vars) {'battery.charge': '90', 'battery.charge.low': '30', 'battery.runtime': '3690', 'battery.voltage': '230.0', ...
Further examples are given in the test_nutclient.py
file. To see the entire
API, you can run pydoc
from the module
directory.
If you wish to make the module available to everyone on the system, you will
probably want to install it in the site-packages
directory for your Python
interpreter. (This is usually one of the last items in sys.path
.)
The old Perl bindings from CPAN have recently been updated and merged into the NUT source code. These operate in a similar fashion to the Python bindings, with the addition of access to single variables, and additional interpretation of the results. The Perl class instance encapsulates a single UPS, where the Python class instance represents a connection to the server (which may service multiple UPS units).
use UPS::Nut;
$ups = new UPS::Nut( NAME => "myups", HOST => "somemachine.somewhere.com", PORT => "3493", USERNAME => "upsuser", PASSWORD => "upspasswd", TIMEOUT => 30, DEBUG => 1, DEBUGOUT => "/some/file/somewhere", ); if ($ups->Status() =~ /OB/) { print "Oh, no! Power failure!\n"; }
tie %other_ups, 'UPS::Nut', NAME => "myups", HOST => "somemachine.somewhere.com", ... # same options as new(); ;
print $other_ups{MFR}, " ", $other_ups{MODEL}, "\n";