2011-01-26 09:35:08 +00:00
|
|
|
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
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2013-11-24 15:00:12 +00:00
|
|
|
`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.
|
2011-01-26 09:35:08 +00:00
|
|
|
|
2013-11-24 15:00:12 +00:00
|
|
|
These library files and associated header files are not installed by
|
2011-01-26 09:35:08 +00:00
|
|
|
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.
|
|
|
|
|
2013-11-24 15:00:12 +00:00
|
|
|
Low-level library: libupsclient
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
`libupsclient` provides a low-level interface to directly dialog with upsd.
|
|
|
|
It is a wrapper around the NUT network protocol.
|
|
|
|
|
2011-01-26 09:35:08 +00:00
|
|
|
For more information, refer to the linkman:upsclient[3],
|
2012-08-12 21:39:31 +00:00
|
|
|
manual page and the various link:../man/index.html#devclient[upscli_*(3)]
|
|
|
|
functions documentation referenced in the same file.
|
|
|
|
|
2013-11-24 15:00:12 +00:00
|
|
|
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 <iostream>
|
|
|
|
#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;
|
|
|
|
}
|
2011-01-26 09:35:08 +00:00
|
|
|
|
|
|
|
Configuration helpers
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
NUT provides helper scripts to ease the configuration step of your program, by
|
2012-01-24 10:22:33 +00:00
|
|
|
detecting the right compilation and link flags.
|
2011-01-26 09:35:08 +00:00
|
|
|
|
2012-01-24 10:22:33 +00:00
|
|
|
For more information, refer to a
|
|
|
|
<<lib-info,Appendix B: NUT libraries complementary information>>.
|
2011-01-26 09:35:08 +00:00
|
|
|
|
|
|
|
Python
|
|
|
|
------
|
|
|
|
|
|
|
|
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`.)
|
|
|
|
|
|
|
|
Perl
|
|
|
|
----
|
|
|
|
|
|
|
|
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";
|
|
|
|
|
2011-09-29 18:14:46 +00:00
|
|
|
Java
|
|
|
|
----
|
|
|
|
|
2013-11-24 15:00:12 +00:00
|
|
|
The NUT java support have been externalized.
|
|
|
|
It is available at https://github.com/networkupstools/jnut
|
2011-09-29 18:14:46 +00:00
|
|
|
|