apcupsd-ups: ignore generated files
[networkupstools/kirr.git] / README
blob2aa864ee4d150608a331cd029db6a8cde973528d
1 Network UPS Tools Overview
2 ===========================
4 Description
5 -----------
7 Network UPS Tools is a collection of programs which provide a common
8 interface for monitoring and administering UPS, PDU and SCD hardware.
9 It uses a layered approach to connect all of the parts.
11 Drivers are provided for a wide assortment of equipment.  They
12 understand the specific language of each device and map it back to a
13 compatibility layer.  This means both an expensive high end UPS, a simple
14 "power strip" PDU, or any other power device can be handled transparently with
15 a uniform management interface.
17 This information is cached by the network server `upsd`, which then
18 answers queries from the clients.  upsd contains a number of access
19 control features to limit the abilities of the clients.  Only authorized
20 hosts may monitor or control your hardware if you wish.  Since the
21 notion of monitoring over the network is built into the software, you
22 can hang many systems off one large UPS, and they will all shut down
23 together. You can also use NUT to power on, off or cycle your data center
24 nodes, individually or globally through PDU outlets.
26 Clients such as `upsmon` check on the status of the hardware and do things
27 when necessary.  The most important task is shutting down the operating
28 system cleanly before the UPS runs out of power.  Other programs are
29 also provided to log information regularly, monitor status through your
30 web browser, and more.
33 Installing
34 ----------
36 If you are installing these programs for the first time, go read the
37 <<_installation_instructions,installation instructions>>
38 to find out how to do that.  This document contains more information on what all
39 of this stuff does.
42 Upgrading
43 ---------
45 When upgrading from an older version, always check the
46 <<Upgrading_notes,upgrading notes>> to see what may have
47 changed.  Compatibility issues and other changes will be listed there to ease
48 the process.
51 Configuring and using
52 ---------------------
54 Once NUT is installed, refer to the
55 <<Configuration_notes,configuration notes>> for directions.
58 Documentation
59 -------------
61 This is just an overview of the software.  You should read the man pages,
62 included example configuration files, and auxiliary documentation for the parts
63 that you intend to use.
66 Network Information
67 -------------------
69 These programs are designed to share information over the network.  In
70 the examples below, `localhost` is used as the hostname.  This can also
71 be an IP address or a fully qualified domain name.  You can specify a
72 port number if your upsd process runs on another port.
74 In the case of the program `upsc`, to view the variables on the UPS called
75 sparky on the `upsd` server running on the local machine, you'd do this:
77         /usr/local/ups/bin/upsc sparky@localhost
79 The default port number is 3493.  You can change this with
80 "configure --with-port" at compile-time.  To make a client talk to upsd
81 on a specific port, add it after the hostname with a colon, like this:
83         /usr/local/ups/bin/upsc sparky@localhost:1234
85 This is handy when you have a mixed environment and some of the systems
86 are on different ports.
88 The general form for UPS identifiers is this:
90         <upsname>[@<hostname>[:<port>]]
92 Keep this in mind when viewing the examples below.
95 Manifest
96 --------
98 This package is broken down into several categories:
100 - *drivers*     - These programs talk directly to your UPS hardware.
101 - *server*      - upsd serves data from the drivers to the network.
102 - *clients*     - They talk to upsd and do things with the status data.
103 - *cgi-bin*     - Special class of clients that you can use with your web server.
104 - *scripts*     - Contains various scripts, like the Perl and Python binding,
105 integration bits and applications. 
107 Drivers
108 -------
110 These programs provide support for specific UPS models.  They understand
111 the protocols and port specifications which define status information
112 and convert it to a form that upsd can understand.
114 To configure drivers, edit ups.conf.  For this example, we'll have a UPS
115 called "sparky" that uses the apcsmart driver and is connected to
116 `/dev/ttyS1`.  That's the second serial port on most Linux-based systems.
117 The entry in `ups.conf` looks like this:
119         [sparky]
120                 driver = apcsmart
121                 port = /dev/ttyS1
123 To start and stop drivers, use upsdrvctl.  By default, it will start or
124 stop every UPS in the config file:
126         /usr/local/ups/bin/upsdrvctl start
127         /usr/local/ups/bin/upsdrvctl stop
129 However, you can also just start or stop one by adding its name:
131         /usr/local/ups/bin/upsdrvctl start sparky
132         /usr/local/ups/bin/upsdrvctl stop sparky
134 To find the driver name for your device, refer to the section below
135 called "HARDWARE SUPPORT TABLE".
137 Extra Settings
138 ~~~~~~~~~~~~~~
140 Some drivers may require additional settings to properly communicate
141 with your hardware.  If it doesn't detect your UPS by default, check the
142 driver's man page or help (-h) to see which options are available.
144 For example, the usbhid-ups driver allows you to use USB serial numbers to
145 distinguish between units via the "serial" configuration option.  To use this
146 feature, just add another line to your ups.conf section for that UPS:
148         [sparky]
149                 driver = usbhid-ups
150                 port = auto
151                 serial = 1234567890
153 Hardware Compatibility List
154 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
156 The <<HCL,Hardware Compatibility List>> is available in the source directory
157 ('nut-X.Y.Z/data/driver.list'), and is generally distributed with packages.
158 For example, it is available on Debian systems as:
160         /usr/share/nut/driver.list
162 This table is also available link:http://www.networkupstools.org/stable-hcl.html[online].
165 If your driver has vanished, see the link:FAQ.html[FAQ] and
166 <<Upgrading_notes,Upgrading notes>>.
168 Generic Device Drivers
169 ~~~~~~~~~~~~~~~~~~~~~~
171 NUT provides several generic drivers that support a variety of very similar models.
173 - The `genericups` driver supports many serial models that use the same basic
174 principle to communicate with the computer.  This is known as "contact
175 closure", and basically involves raising or lowering signals to indicate
176 power status.
178 This type of UPS tends to be cheaper, and only provides the very simplest
179 data about power and battery status.  Advanced features like battery
180 charge readings and such require a "smart" UPS and a driver which
181 supports it.
183 See the linkman:genericups[8] man page for more information.
185 - The `usbhid-ups` driver attempts to communicate with USB HID Power Device
186 Class (PDC) UPSes. These units generally implement the same basic protocol,
187 with minor variations in the exact set of supported attributes. This driver
188 also applies several correction factors when the UPS firmware reports values
189 with incorrect scale factors.
191 See the linkman:usbhid-ups[8] man page for more information.
193 - The `blazer_ser` and `blazer_usb` drivers supports the Megatec / Q1
194 protocol that is used in many brands (Blazer, Energy Sistem, Fenton
195 Technologies, Mustek and many others).
197 See the linkman:blazer[8] man page for more information.
199 - The `snmp-ups` driver handles various SNMP enabled devices, from many
200 different manufacturers. In SNMP terms, `snmp-ups` is a manager, that
201 monitors SNMP agents.
203 See the linkman:snmp-ups[8] man page for more information.
205 - The `powerman-pdu` is a bridge to the PowerMan daemon, thus handling all
206 PowerMan supported devices. The PowerMan project supports several serial
207 and networked PDU, along with Blade and IPMI enabled servers.
209 See the linkman:powerman-pdu[8] man page for more
210 information.
212 - The `apcupsd-ups` driver is a bridge to the Apcupsd daemon, thus handling
213 all Apcupsd supported devices. The Apcupsd project supports many serial,
214 USB and networked APC UPS.
216 See the linkman:apcupsd-ups[8] man page for more information.
218 UPS Shutdowns
219 ~~~~~~~~~~~~~
221 upsdrvctl can also shut down (power down) all of your UPS hardware.
223 WARNING: if you play around with this command, expect your filesystems
224 to die.  Don't power off your computers unless they're ready for it:
226         /usr/local/ups/bin/upsdrvctl shutdown
227         /usr/local/ups/bin/upsdrvctl shutdown sparky
229 You should read the <<UPS_shutdown,Configuring automatic UPS shutdowns>>
230 chapter to learn more about when to use this feature.  If called at the wrong
231 time, you may cause data loss by turning off a system with a filesystem
232 mounted read-write.
234 Power distribution unit management
235 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
237 NUT also provides an advanced support for power distribution units.
239 You should read the <<Outlets_PDU_notes,Configuring automatic UPS shutdowns>>
240 chapter to learn more about when to use this feature. 
242 Network Server
243 --------------
245 `upsd` is responsible for passing data from the drivers to the client
246 programs via the network.  It should be run immediately after `upsdrvctl`
247 in your system's startup scripts.
249 `upsd` should be kept running whenever possible, as it is the only source
250 of status information for the monitoring clients like `upsmon`.
253 Monitoring client
254 -----------------
256 `upsmon` provides the essential feature that you expect to find in UPS
257 monitoring software: safe shutdowns when the power fails.
259 In the layered scheme of NUT software, it is a client.  It has this
260 separate section in the documentation since it is so important.
262 You configure it by telling it about UPSes that you want to monitor in
263 upsmon.conf.  Each UPS can be defined as one of two possible types:
265 Master
266 ~~~~~~
268 This UPS supplies power to the system running `upsmon`, and this system is also
269 responsible for shutting it down when the battery is depleted.  This occurs
270 after any slave systems have disconnected safely.
272 If your UPS is plugged directly into a system's serial port, the `upsmon`
273 process on that system should define that UPS as a master.
275 For a typical home user, there's one computer connected to one UPS.
276 That means you run a driver, `upsd`, and `upsmon` in master mode.
278 Slave
279 ~~~~~
281 This UPS may supply power to the system running `upsmon`, but this system can't
282 shut it down directly.
284 Use this mode when you run multiple computers on the same UPS.  Obviously, only
285 one can be connected to the serial port on the UPS, and that system is the
286 master.  Everything else is a slave.
288 For a typical home user, there's one computer connected to one UPS.
289 That means you run a driver, upsd, and upsmon in master mode.
291 Additional Information
292 ~~~~~~~~~~~~~~~~~~~~~~
294 More information on configuring upsmon can be found in these places:
296 - The linkman:upsmon[8] man page
297 - <<BigServers,Typical setups for big servers>>
298 - <<UPS_shutdown,Configuring automatic UPS shutdowns>> chapter
299 - The stock `upsmon.conf` that comes with the package
302 Clients
303 -------
305 Clients talk to upsd over the network and do useful things with the data
306 from the drivers.  There are tools for command line access, and a few
307 special clients which can be run through your web server as CGI
308 programs.
310 For more details on specific programs, refer to their man pages.
312 upsc
313 ~~~~
315 `upsc` is a simple client that will display the values of variables known
316 to `upsd` and your UPS drivers.  It will list every variable by default,
317 or just one if you specify an additional argument.  This can be useful
318 in shell scripts for monitoring something without writing your own
319 network code.
321 `upsc` is a quick way to find out if your driver(s) and upsd are working
322 together properly.  Just run `upsc <ups>` to see what's going on, i.e.:
324         morbo:~$ upsc sparky@localhost
325         ambient.humidity: 035.6
326         ambient.humidity.alarm.maximum: NO,NO
327         ambient.humidity.alarm.minimum: NO,NO
328         ambient.temperature: 25.14
329         ...
331 If you are interested in writing a simple client that monitors `upsd`,
332 the source code for `upsc` is a good way to learn about using the
333 upsclient functions.
335 See the linkman:upsc[8] man page and
336 <<nut-names,NUT command and variable naming scheme>> for more information.
338 upslog
339 ~~~~~~
341 `upslog` will write status information from `upsd` to a file at set
342 intervals.  You can use this to generate graphs or reports with other
343 programs such as `gnuplot`.
345 upsrw
346 ~~~~~
348 `upsrw` allows you to display and change the read/write variables in your
349 UPS hardware.  Not all devices or drivers implement this, so this may
350 not have any effect on your system.
352 A driver that supports read/write variables will give results like this:
354         $ upsrw sparky@localhost
356         ( many skipped )
358         [ups.test.interval]
359         Interval between self tests
360         Type: ENUM
361         Option: "1209600"
362         Option: "604800" SELECTED
363         Option: "0"
365         ( more skipped )
367 On the other hand, one that doesn't support them won't print anything:
369         $ upsrw fenton@gearbox
371         ( nothing )
373 `upsrw` requires administrator powers to change settings in the hardware.
374 Refer to linkman:upsd.users[5] for information on defining
375 users in `upsd`.
377 upscmd
378 ~~~~~~
380 Some UPS hardware and drivers support the notion of an instant command -
381 a feature such as starting a battery test, or powering off the load.
382 You can use upscmd to list or invoke instant commands if your
383 hardware/drivers support them.
385 Use the -l command to list them, like this:
387         $ upscmd -l sparky@localhost
388         Instant commands supported on UPS [sparky@localhost]:
390         load.on - Turn on the load immediately
391         test.panel.start - Start testing the UPS panel
392         calibrate.start - Start run time calibration
393         calibrate.stop - Stop run time calibration
394         ...
396 `upscmd` requires administrator powers to start instant commands.
397 To define users and passwords in `upsd`, see
398 linkman:upsd.users[5].
401 CGI Programs
402 ------------
404 The CGI programs are clients that run through your web server.  They
405 allow you to see UPS status and perform certain administrative commands
406 from any web browser.  Javascript and cookies are not required.
408 These programs are not installed or compiled by default.  To compile
409 and install them, first run `configure --with-cgi`, then do `make` and
410 `make install`.  If you receive errors about "gd" during configure, go
411 get it and install it before continuing.
413 You can get the source here:
415         http://www.libgd.org/
417 In the event that you need libpng or zlib in order to compile gd,
418 they can be found at these URLs:
420         http://www.libpng.org/pub/png/pngcode.html
422         http://www.gzip.org/zlib/
425 Access Restrictions
426 ~~~~~~~~~~~~~~~~~~~
428 The CGI programs use hosts.conf to see if they are allowed to talk to a
429 host.  This keeps malicious visitors from creating queries from your web
430 server to random hosts on the Internet.
432 If you get error messages that say "Access to that host is not
433 authorized", you're probably missing an entry in your hosts.conf.
435 upsstats
436 ~~~~~~~~
438 `upsstats` generates web pages from HTML templates, and plugs in status
439 information in the right places.  It looks like a distant relative of
440 APC's old Powerchute interface.  You can use it to monitor several
441 systems or just focus on one.
443 It also can generate IMG references to `upsimage`.
445 upsimage
446 ~~~~~~~~
448 This is usually called by upsstats via IMG SRC tags to draw either the
449 utility or outgoing voltage, battery charge percent, or load percent.
451 upsset
452 ~~~~~~
454 `upsset` provides several useful administration functions through a web
455 interface.  You can use `upsset` to kick off instant commands on your UPS
456 hardware like running a battery test.  You can also use it to change
457 variables in your UPS that accept user-specified values.
459 Essentially, `upsset` provides the functions of `upsrw` and `upscmd`, but
460 with a happy pointy-clicky interface.
462 `upsset` will not run until you convince it that you have secured your
463 system.  You *must* secure your CGI path so that random interlopers
464 can't run this program remotely.  See the `upsset.conf` file.  Once you
465 have secured the directory, you can enable this program in that
466 configuration file.  It is not active by default.
469 Version Numbering
470 -----------------
472 The version numbers work like this: if the middle number is odd, it's a
473 development tree, otherwise it is the stable tree.
475 The past stable trees were 1.0, 1.2, 1.4, 2.0, 2.2 and 2.4, with the
476 latest stable tree designated 2.6.  The development trees were 1.1, 1.3,
477 1.5, 2.1 and 2.3.  As of the 2.4 release, there is no real development
478 branch anymore since the code is available through a revision control
479 system (namely Subversion) and snapshots.
481 Major release jumps are mostly due to large changes to the features
482 list.  There have also been a number of architectural changes which
483 may not be noticeable to most users, but which can impact developers.
486 Backwards and Forwards Compatibility
487 ------------------------------------
489 The old network code spans a range from about 0.41.1 when TCP support 
490 was introduced up to the recent 1.4 series.  It used variable names
491 like STATUS, UTILITY, and LOADPCT.  Many of these names go back to the
492 earliest prototypes of this software from 1997.  At that point there
493 was no way to know that so many drivers would come along and introduce 
494 so many new variables and commands.  The resulting mess grew out of
495 control over the years.
497 During the 1.3 development cycle, all variables and instant commands
498 were renamed to fit into a tree-like structure.  There are major groups,
499 like input, output and battery.  Members of those groups have been
500 arranged to make sense - input.voltage and output.voltage compliment
501 each other.  The old names were UTILITY and OUTVOLT.  The benefits in
502 this change are obvious.
504 The 1.4 clients can talk to either type of server, and can handle either
505 naming scheme.  1.4 servers have a compatibility mode where they can
506 answer queries for both names, even though the drivers are internally
507 using the new format.
509 When 1.4 clients talk to 1.4 or 2.0 (or more recent) servers, they will
510 use the new names.
512 Here's a table to make it easier to visualize:
514 [options="header"]
515 |=============================================
516 |                   4+| Server version
517 | *Client version*    | 1.0 | 1.2 | 1.4 | 2.0+
518 | 1.0                 | yes | yes | yes | no
519 | 1.2                 | yes | yes | yes | no
520 | 1.4                 | yes | yes | yes | yes
521 | 2.0+                | no  | no  | yes | yes
522 |=============================================
524 Version 2.0, and more recent, do not contain backwards compatibility for
525 the old protocol and variable/command names.  As a result, 2.0 clients can't 
526 talk to anything older than a 1.4 server.  If you ask a 2.0 client to 
527 fetch "STATUS", it will fail.  You'll have to ask for "ups.status" 
528 instead.
530 Authors of separate monitoring programs should have used the 1.4 series
531 to write support for the new variables and command names.  Client
532 software can easily support both versions as long as they like.  If upsd
533 returns 'ERR UNKNOWN-COMMAND' to a GET request, you need to use REQ.
536 Support / Help / etc.
537 ---------------------
539 If you are in need of help, refer to the
540 <<Support_Request,Support instructions>> in the user manual.
543 Hacking / Development Info
544 --------------------------
546 Additional documentation can be found in:
548 - the linkdoc:developer-guide[Developer Guide],
549 - the linkdoc:packager-guide[Packager Guide].
552 Acknowledgements / Contributions
553 --------------------------------
555 The many people who have participated in creating and improving NUT are
556 listed in the user manual <<Acknowledgements,acknowledgements appendix>>.