"Fossies" - the Fresh Open Source Software Archive

Member "nut-2.7.2/docs/new-clients.txt" (25 Feb 2014, 5034 Bytes) of archive /linux/misc/nut-2.7.2.tar.gz:

As a special service "Fossies" has tried to format the requested source page into HTML format (assuming markdown format). Alternatively you can here view or download the uninterpreted source code file. A member file download can also be achieved by clicking within a package contents listing on the according byte size field.

Creating new client

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 <<net-protocol,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.

C / C++

Client access library ~~~~~~~~~~~~~~~~~~~~~

libupsclient and libnutclient libraries can be linked into other programs to give access to upsd and UPS status information. Both static and shared versions are provided.

These library files and 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.

Low-level library: libupsclient ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

libupsclient provides a low-level interface to directly dialog with upsd. It is a wrapper around the NUT network protocol.

For more information, refer to the linkman:upsclient[3], manual page and the various link:../man/index.html#devclient[upscli_*(3)] functions documentation referenced in the same file.

Clients like upsc are provided as examples of how to retrieve data using the upsclient functions. link:http://www.networkupstools.org/projects.html[Other programs] not included in this package may also use this library, such as wmnut.

High level library: libnutclient ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

libnutclient provides a high-level interface representing devices, variables and commands with an object-oriented API in C++ and C.

For more information, refer to the linkman:libnutclient[3] manual page.

#include #include <nutclient.h> using namespace nut; using namespace std;

int main(int argc, char* argv) { try { // Connection Client client = new TcpClient(“localhost”, 3493); Device mydev = client->getDevice(“myups”); cout << mydev.getDescription() << endl; Variable var = mydev.getVariable(“device.model”); cout << var.getValue()[0] << endl; } catch(NutException& ex) { cerr << “Unexpected problem : ” << ex.str() << endl; } return 0; }

Configuration helpers ~~~~~~~~~~~~~~~~~~~~~

NUT provides helper scripts to ease the configuration step of your program, by detecting the right compilation and link flags.

For more information, refer to a <<lib-info,Appendix B: NUT libraries complementary information>>.


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”;


The NUT java support have been externalized. It is available at https://github.com/networkupstools/jnut