Penguin
Diff: HowToUPSHOWTO
EditPageHistoryDiffInfoLikePages

Differences between current version and predecessor to the previous major change of HowToUPSHOWTO.

Other diffs: Previous Revision, Previous Author, or view the Annotated Edit History

Newer page: version 3 Last edited on Monday, October 25, 2004 5:03:27 am by AristotlePagaltzis
Older page: version 2 Last edited on Friday, June 7, 2002 1:07:43 am by perry Revert
@@ -1,4813 +1 @@
-  
-  
-  
-The UPS Howto  
-  
-  
-  
-----  
-  
-!!!The UPS Howto  
-  
-!!Harvey J. Stein,  
-hjstein@bfr.co.il, Berger Financial Research, Ltd.v2.42, 18 November 1997  
-  
-  
-----  
-''This document will help you connect an uninterruptable power supply to  
-a Linux box... if you're lucky...  
-Copyright (c) 1994, 1995, 1996, 1997 by Harvey J. Stein. You may use  
-this document as you see fit, as long as it remains intact. In  
-particular, this notice (along with the contributions below) must  
-remain untouched.''  
-----  
-  
-  
-  
-  
-!!1. Introduction  
-  
-  
-****1.1 Contributors  
-  
-****1.2 Important disclaimer  
-  
-****1.3 Other documents  
-  
-  
-  
-  
-  
-!!2. Important note on obsolete information  
-  
-  
-  
-  
-!!3. Smart and dumb UPSs.  
-  
-  
-  
-  
-!!4. Software  
-  
-  
-  
-  
-!!5. Do it yourself guide  
-  
-  
-****5.1 What you need to do (summary)  
-  
-****5.2 How it's supposed to work  
-  
-****5.3 How to set things up  
-  
-****5.4 User Enhancements  
-  
-  
-  
-  
-  
-!!6. Hardware notes  
-  
-  
-****6.1 How to make a cable  
-  
-****6.2 Reverse-engineering cables and hacking powerd.c  
-  
-****6.3 Serial port pin assignments  
-  
-****6.4 Ioctl to RS232 correspondence  
-  
-  
-  
-  
-  
-!!7. What to do when you're really stuck  
-  
-  
-  
-  
-!!8. Info on selected UPSs  
-  
-  
-****8.1 General Experiences.  
-  
-****8.2 Advice 1200 A  
-  
-****8.3 Trust Energy Protector 400/650  
-  
-****8.4 Trust UPS 400-A  
-  
-****8.5 Sustainer S-40a  
-  
-****8.6 Systel  
-  
-****8.7 Deltec Power, Fiskars Power Systems and Exide.  
-  
-****8.8 Beaver model UB500 UPS  
-  
-****8.9 Sendom  
-  
-****8.10 Best  
-  
-****8.11 GPS1000 from ACCODATA  
-  
-****8.12 !TrippLite BC750LAN (Standby UPS)  
-  
-****8.13 APC  
-  
-  
-  
-  
-  
-!!9. How to shutdown other machines on the same UPS  
-----  
-  
-!!1. Introduction  
-  
-  
-  
-  
-  
-This HOWTO covers connecting a UPS to a computer running Linux. The  
-idea is to connect the two in such a way that Linux can shutdown  
-cleanly when the power goes out, and before the UPS's battery gives  
-out.  
-  
-  
-This includes pointing out the existence of software packages which  
-aid in establishing such communications, and detailing exactly how  
-such communications are carried out. The latter often is unnecessary  
-if you can find a software package that's already been configured for  
-your UPS. Otherwise, you'll have to read on.  
-  
-  
-To a large extent this document is even more redundant than when I  
-originally wrote it three years ago. All the basic information has  
-always been contained in the powerd man page that comes with the  
-!SysVinit package. Whereas three years ago one could commonly  
-find Linux distributions which didn't even include this man page, I  
-don't believe this is the case any longer.  
-  
-  
-Furthermore, when I first wrote this Howto, there was no software  
-other than powerd.c for Linux/UPS communications and control.  
-Today there are quite afew UPS control packages available in  
-Sunsite's UPS directory.  
-  
-  
-None the less, I'm continuing to maintain the UPS Howto. Why bother?  
-Well,  
-  
-  
-  
-  
-  
-****An additional general overview might help to understand how  
-to connect a Linux system to a UPS, even if it's just the same  
-information written differently.  
-****  
-  
-****The HOWTO is serving as a repository for UPS specific data -  
-there are many UPSs that haven't yet been incorporated into the  
-general packages.  
-****  
-  
-****The HOWTO contains additional details that aren't available  
-in other documents.  
-****  
-  
-****Some of the UPS software packages available in  
-Sunsite's UPS directory seem  
-to be quite sparsely documented. You might need to read this  
-before you can understand how to use them.  
-****  
-  
-****This thing seems to have a life of it's own now. It's clear  
-when a Howto should be born. It's less clear when it should be  
-put to sleep.  
-****  
-  
-  
-  
-  
-  
-!!1.1 Contributors  
-  
-  
-  
-  
-  
-  
-I am forever indebted to those from whom I've received help,  
-suggestions, and UPS specific data. The list includes:  
-  
-  
-  
-  
-  
-****Hennus Bergman  
-(  
-hennus@sky.owl.nl)  
-  
-****  
-  
-****Charli  
-(  
-mefistos@impsat1.com.ar)  
-  
-****  
-  
-****Ciro Cattuto  
-(  
-Ciro Cattuto)  
-  
-****  
-  
-****Nick Christenson  
-(  
-npc@minotaur.jpl.nasa.gov)  
-  
-****  
-  
-****Lam Dang  
-(  
-angit@netcom.com)  
-  
-****  
-  
-****Markus Eiden  
-(  
-Markus@eiden.de)  
-  
-****  
-  
-****Dan Fandrich  
-(  
-dan@fch.wimsey.bc.ca)  
-  
-****  
-  
-****Ben Galliart  
-(  
-bgallia@orion.it.luc.edu)  
-  
-****  
-  
-****Danny ter Haar  
-(  
-dth@cistron.nl)  
-  
-****  
-  
-****Christian G. Holtje  
-(  
-docwhat@uiuc.edu)  
-  
-****  
-  
-****Raymond A. Ingles  
-(  
-inglesra@frc.com)  
-  
-****  
-  
-****Peter Kammer  
-(  
-pkammer@ics.uci.edu)  
-  
-****  
-  
-****Marek Michalkiewicz  
-(  
-ind43@sun1000.ci.pwr.wroc.pl)  
-  
-****  
-  
-****Jim Ockers  
-(  
-ockers@umr.edu)  
-  
-****  
-  
-****Evgeny Stambulchik  
-(  
-fnevgeny@plasma-gate.weizmann.ac.il)  
-  
-****  
-  
-****Clive A. Stubbings  
-(  
-cas@vjet.demon.co.uk)  
-  
-****  
-  
-****Miquel van Smoorenburg  
-(  
-miquels@cistron.nl)  
-  
-****  
-  
-****Slavik Terletsky  
-(  
-ts@polynet.lviv.ua)  
-  
-****  
-  
-****Tom Webster  
-(  
-webster@kaiwan.com)  
-  
-****  
-  
-  
-  
-Note that email addresses appearing below as excerpts from email  
-messages can be out of date. The above is probably out of date too,  
-but some of it's more recent than what's below.  
-  
-  
-Also, many apologies to anyone whom I've failed to note in this list.  
-Please email me and I'll add you.  
-  
-  
-  
-  
-  
-  
-  
-!!1.2 Important disclaimer  
-  
-  
-  
-I really can't guarantee that any of this will work for you.  
-Connecting a UPS to a computer can be a tricky business. One or the  
-other or both might burn out, blow up, catch fire, or start World War  
-Three. Furthermore, I only have direct experience with the Advice  
-1200 A UPS, and a 5kva Best Ferrups, and I didn't have to make a  
-cable. So, BE CAREFUL. GATHER ALL INFORMATION YOU CAN ON YOUR UPS.  
-THINK FIRST. DON'T IMPLICITLY TRUST ANYTHING YOU READ HERE OR  
-ANYWHERE ELSE.  
-  
-  
-On the other hand, I managed to get everything working with my UPSs,  
-without much information from the manufacturer, and without blowing  
-anything up, so it is possible.  
-  
-  
-  
-  
-  
-  
-  
-!!1.3 Other documents  
-  
-  
-  
-This document does not cover the general features and capabilities of  
-UPSs. For that type of information, you might turn to  
-The UPS FAQ. It  
-can also be found at  
-ftp://rtfm.mit.edu/pub/usenet-by-hierarchy/comp/answers/UPS-faq.  
-It is maintained by Nick Christenson (  
-npc@minotaur.jpl.nasa.gov), but seems to have last been  
-updated in 1995. In email to him, he'd like that  
-you put UPS or UPS FAQ or something along these lines in the  
-Subject line of the message.  
-  
-  
-There're also more and more UPS manufactures sprouting up on the net.  
-Some of them actually supply useful information on their web sites. A  
-convenient list of UPS manufacturers' web sites is available at  
-The UPS Directory. Said site also has a  
-UPS FAQ.  
-  
-  
-  
-----  
-  
-!!2. Important note on obsolete information  
-  
-  
-I've just discovered that some of the documentation below is obsolete.  
-In particular, the init daemon that comes with  
-the latest sysvinit package  
-is more sophisticated than I've portrayed it to be. Although it seems  
-that the current version is backward compatible with what's written  
-here, it looks like it has some undocumented features which are  
-__very important__ for UPS support.  
-  
-  
-The control mechanism outlined below only allows powerd to give  
-init one of two messages, namely powerfail or powerok.  
-init runs one command when it receives powerfail, and another  
-when it receives powerok. This leads to complicated powerd  
-logic for dealing with low battery signals and other sorts of special  
-situations.  
-  
-  
-Newer versions of init (as of version 2.58, it seems) are more  
-sophisticated. These versions can be signaled to run one of  
-three scripts. Thus, init can have a powerfail script  
-for announcing a power outage, a powerfailnow script for doing an  
-immediate shutdown, and a powerok script for halting any pending  
-shutdowns. This is much cleaner than the gyrations one would have to  
-go through with the mechanisms detailed below.  
-  
-  
-Although most of the discussion here assumes the old init  
-communication method, I just added two new sections where the authors  
-uses the new communcation method. These are sections  
-Trust Energy Protector 400/650 and  
-APC Smart-UPS 700. The former is especially detailed. Both include a  
-powerd.c which signals init to do an immediate shutdown when  
-a low battery signal is received, as well as the relevant  
-/etc/inittab lines to make this work. Other than this, all I  
-can tell you is to look at the source code for init.  
-  
-  
-Also, for all I know, many of the software packages listed below also  
-use this newer communication method.  
-  
-  
-  
-----  
-  
-!!3. Smart and dumb UPSs.  
-  
-  
-UPSs fall into two categories, which I'll call ``smart'' and ``dumb''.  
-The difference between the two is the amount of information one can get  
-from the UPS and the amount of control one can exert over the UPS.  
-  
-  
-  
-  
-  
-  
-  
-; __Dumb UPS__:  
-  
-  
-  
-  
-****Connects to the computer via serial port.  
-****  
-  
-****Uses modem control lines to communicate with the computer.  
-****  
-  
-****Can signal whether or not the power is out.  
-****  
-  
-****Typically can signal whether or not the battery is low.  
-****  
-  
-****The computer can usually signal the UPS to turn itself  
-off.  
-****  
-  
-  
-  
-  
-; __Smart UPS__:  
-  
-  
-  
-  
-****Connects to the computer via serial port.  
-****  
-  
-****Communicates with the computer via normal data transfer  
-through the serial port.  
-****  
-  
-****Typically has some sort of command language that the computer  
-can use to get various pieces of information from the UPS, to  
-set various operating parameters for the UPS, and to control the  
-UPS (such as turning it off).  
-****  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-Usually smart UPSs can be operated in dumb mode. This is useful  
-because as far as I know, the company which manufactures the most  
-popular smart UPS (namely APC) will only disclose the communication  
-protocol for their UPSs to people who sign a non-disclosure  
-agreement.  
-  
-  
-As far as I know, the only smart UPS available which is easy to  
-communicate with under Linux are those made by Best. Furthermore, BEST  
-fully documents the smart mode (and the dumb mode) of their UPSs.  
-BEST also supplies source code for programs which can communicate with  
-their UPSs.  
-  
-  
-All the packages listed in section  
-Software  
-will communicate with a UPS in dumb mode. This is all you really  
-need. The ones specifically for the APC UPSs make various claims as  
-to being usable in smart mode, but I don't know exactly what they  
-permit. A full implementation would give you a pop-up window with all  
-sorts of fun gauges displaying various statistics for the UPS, such as  
-load, internal temperature, fault history, input voltage, output  
-voltage, etc. It seems like the smupsd-.9-1.i386.rpm package  
-(section  
-Software) approaches this. I'm  
-not sure about the others.  
-  
-  
-The rest of this document is pretty much confined to configuring your  
-system to work with a dumb UPS. The general idea is about the same  
-with a smart UPS, but the details of how powerd would need to  
-work and what kind of cable you need are different for a smart UPS.  
-  
-  
-  
-  
-  
-  
-----  
-  
-!! 4. Software  
-  
-  
-Basically, all you need is a working powerd binary, usually  
-found in /sbin/powerd. This is usually part of the !SysVinit  
-package. As far as I know, all current Linux distributions include a  
-recent version of !SysVinit. Very old versions didn't include  
-powerd.  
-  
-  
-The only problem you might have is that your cable might not match how  
-powerd is set up, in which case you'll have to either rewire your  
-cable, or pick up a copy of powerd.c and modify it to work with your  
-cable. Or, for that matter, you can always pick up one of the  
-following packages, most of which allow you to configure them to match  
-your cable.  
-  
-  
-As mentioned, an alternative to using the powerd that comes with the  
-!SysVinit package would be to use one of the UPS packages now  
-available. There are many packages currently available to aid in  
-setting up computer/ups communications. None of this was available  
-when I first wrote this Howto, which is why I had to write it. In  
-fact, there's a good chance that you might be able to use one of these  
-software packages, and avoid this Howto entirely!  
-  
-  
-As of 15 March 1997 or so,  
-Sunsite's UPS directory had quite a few  
-packages available. Other sites seem to have UPS control packages  
-available too. Here's what I've found to date (all but two from sunsite):  
-  
-  
-  
-  
-; __  
-Enhanced_APC_BackUPS.tar.gz__:  
-  
-A package for controlling APC Smart UPSs. Seems to basically  
-follow the BUPS Howto (included here), but also seems to have some  
-low battery warning support.  
-  
-  
-  
-; __  
-Enhanced_APC_UPSD-v1.4.tar.gz__:  
-  
-The .lsm file says that it's formerly the above package,  
-but it actually includes the above package as a .tar.gz  
-file inside of this tar.gz file! The documentation is  
-spotty. It seems to support APC UPSs in both smart mode and dumb  
-mode, but I can't be sure.  
-  
-  
-  
-; __  
-apcd-.5.tar.gz__:  
-  
-Another package for controlling APC Smart UPSs. Seems to include  
-some sort of master/slave support (i.e. - one machine signals  
-others to shut down when the power goes out). Seems to use the UPS  
-in smart mode, as opposed to via modem signal line toggling.  
-  
-  
-  
-; __  
-smupsd-.9-1.i386.rpm__:  
-  
-  
-; __  
-smupsd-.9-1.src.rpm__:  
-  
-The author (  
-David E. Myers, dem@netsco.com) writes:  
-  
-  
-smupsd monitors an  
-APC Smart-UPS [[TM ] under  
-Red Hat[[TM] Linux. Should power fail, smupsd will power  
-down the system and the UPS in an orderly fashion.  
-  
-  
-smupsd has the following features:  
-  
-  
-  
-  
-  
-****Shuts down the system and the UPS based on either remaining UPS  
-battery charge or elapsed time since power failure.  
-  
-****  
-  
-****UPS parameters can be monitored live from any host with the  
-graphical monitor program upsmon, written in JavaTM].  
-  
-****UPS parameters can be logged to a file for analysis and reporting.  
-  
-****When additional systems share the same UPS, instances of smupsd  
-running on these systems can read UPS parameters from the one  
-running on the system serially connected to the UPS (master/slave).  
-  
-****Network access from remote hosts can be controlled via the  
-/etc/hosts.allow file.  
-****  
-  
-****  
-  
-****  
-  
-****  
-  
-  
-  
-  
-  
-  
-  
-; __  
-genpower-1..1.tgz__:  
-  
-A general UPS handling package. Includes configurations for many  
-UPSs - two !TrippLite configurations, and three APC configurations.  
-Includes good documentation. A best buy.  
-  
-  
-  
-; __  
-powerd-2..tar.gz__:  
-  
-A replacement for the powerd that comes with the !SysVinit package.  
-As opposed to comments included in the documentation it doesn't  
-seem to have been merged into the !SysVinit package as of version  
-2.62. Its advantages are that it can act as a server for other  
-powerds running on other machines (for when you have a network of  
-machines hanging off a single UPS), and it can be configured by  
-config file - the source code doesn't have to be edited and  
-recompiled.  
-  
-  
-  
-; __  
-upsd-1..tgz__:  
-  
-Another replacement for powerd. Seems to be quite comparable in  
-features to powerd-2..tar.gz.  
-  
-  
-  
-; __  
-checkups.tar__:  
-  
-This package is for controlling Best UPSs. It's direct from  
-Best's web site. Includes binaries for lots of unix flavors,  
-but more importantly, it includes source code, so you can try it  
-out under Linux, and if it doesn't work, you can try to fix it.  
-The source code includes both ``basic checkups'' which controls  
-the UPS in dumb mode, and ``advanced checkups'' which is a little  
-more sophisticated - it will signal a shutdown when the UPS says  
-it has X minutes of power remaining instead of just shutting down  
-X minutes after the power goes out. The advanced checkups program  
-also will shut down when the UPS registers various alarms such as  
-High Ambient Temperature, Near Low Battery, Low AC Out, or User  
-Test Alarm.  
-  
-  
-  
-; __  
-bestups-.9.tar.gz__:  
-  
-A package that might very well be on sunsite by the time you read  
-this. It's a pair of communications module which works with Best  
-Ferrups UPSs. It operates the UPS in smart mode. It inter-operates  
-well with powerd-2.0 - useful if you have a big Best Ferrups UPS  
-keeping up all the machines on a network.  
-  
-  
-NOTE - This package has yet to be uploaded to Sunsite. I keep  
-begging the author to finish and upload it, but he has yet to find  
-the time.  
-  
-  
-  
-  
-  
-  
-; __  
-!LanSafe III__:  
-  
-Deltec Electronics (and Exide) sell a software package called  
-!LanSafe III. They have a Linux version. It comes with their UPSs.  
-They also say that it works with other UPSs (on the dumb level).  
-  
-  
-  
-; __  
-apcupsd-2.8.tar.gz__:  
-  
-The author (  
-Andre Hedrick, hedrick@astro.dyer.vanderbilt.edu) writes:  
-  
-  
-apcupsd-2.1.tar.gz replaces Enhanced-APC-UPSD.tar.gz  
-  
-  
-It is a very complete package for APC UPSs. There is support for  
-the entire range of UPSs in their product line. I have now added  
-smart mode signaling to the package and support with APC's own  
-cables or a custom cable if you don't have an APC cable that is  
-supported to date.  
-  
-  
-  
-  
-  
-  
-; __  
-smartups-1.1.tgz__:  
-  
-From the LSM:  
-  
-  
-A powerd and an X11 graphing utility which shows you the  
-voltages, frequencies, load percentage and battery level in  
-realtime. The protocol that the "Safeware" software uses,  
-and "Tripplite" UPSs are supported. Source + ELF binaries.  
-  
-  
-  
-; __  
-ups.tar.gz__:  
-  
-From the LSM:  
-  
-  
-Program to interact with battery backups (Powerbox UPS).  
-  
-  
-  
-; __  
-usvd-2...tgz__:  
-  
-From the LSM:  
-  
-  
-usvd is a daemon that monitors the state of an uninterrupted  
-power supply and reacts upon state changes (line fail,  
-line back, battery low situations). You can write your  
-own scripts that are called in these cases. It does *not*  
-require SYSVINIT.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-Note that I've only glanced at these packages. I haven't used them.  
-We were just about to start using  
-bestups-.9.tar.gz  
-in conjunction with  
-powerd-2..tar.gz,  
-but we never quite got around to it.  
-  
-  
-  
-----  
-  
-!!5. Do it yourself guide  
-  
-  
-This discussion is specifically tailored for dumb UPS control.  
-However, most of the process is about the same for dumb UPSs and smart  
-UPSs. The biggest difference is in the details of how the UPS  
-monitoring daemon (typically powerd) communicates with the UPS.  
-  
-  
-Before doing anything, I suggest the following algorithm:  
-  
-  
-****Skim this document.  
-****  
-  
-****Download and investigate all packages which seem specifically  
-tailored to your UPS.  
-****  
-  
-****Download and investigate the more generic packages. Note that  
-some of the more generic packages are actually more powerful,  
-better documented, and easier to use than their more specific  
-counterparts.  
-****  
-  
-****If you still can't get things working, or if points are still  
-unclear, read this document more carefully, and hack away...  
-****  
-  
-  
-  
-  
-  
-  
-  
-  
-!!5.1 What you need to do (summary)  
-  
-  
-  
-  
-  
-  
-****Plug the computer into the UPS.  
-****  
-  
-****Connect the computer's serial port to the UPS with a special cable.  
-****  
-  
-****Run powerd (or some sort of equivalent) on the computer.  
-****  
-  
-****Setup your init to do something reasonable on powerfail and  
-powerok events (like start a shutdown and kill any currently  
-running shutdowns, respectively, for example).  
-****  
-  
-  
-  
-  
-  
-!!5.2 How it's supposed to work  
-  
-  
-  
-  
-  
-  
-  
-  
-; __UPS's job__:  
-  
-When the power goes out, the UPS continues to power the computer and  
-signals that the power went out by throwing a relay or turning  
-on an opticoupler on it's control port.  
-  
-  
-  
-; __Cable's job__:  
-  
-The cable is designed so that when the UPS throws said relay,  
-this causes a particular serial port control line (typically  
-DCD) to go high.  
-  
-  
-  
-; __Powerd's job__:  
-  
-The powerd daemon monitors the serial port. Keeps raised/lowered  
-whatever serial port control lines the UPS needs to have  
-raised/lowered (typically, DTR must be kept high and whatever line  
-shuts off the UPS must be kept low). When powerd sees the  
-UPS control  
-line go high, it writes FAIL to /etc/powerstatus and  
-sends the  
-init process a SIGPWR signal. (Older versions of  
-powerd and initd wrote to /etc/powerfail.)  
-When the control line goes low again, it writes OK to  
-/etc/powerstatus and sends init  
-a SIGPWR signal.  
-  
-  
-  
-; __Init's job (aside from everything else it does)__:  
-  
-When it receives a SIGPWR, it looks at /etc/powerstatus.  
-If it contains FAIL it runs the powerfail entry from  
-/etc/inittab. If it contains OK it runs the  
-powerokwait entry from inittab.  
-  
-  
-  
-  
-  
-  
-  
-  
-!!5.3 How to set things up  
-  
-  
-  
-  
-  
-  
-The following presupposes that you have a cable that works properly  
-with powerd. If you're not sure that your cable works (or how it  
-works), see section  
-Reverse-engineering cables and hacking powerd.c  
-for information on dealing with poorly described cables and  
-reconfiguring powerd.c. Sections  
-Serial port pin assignments and  
-Ioctl to RS232 correspondence  
-will also be useful.  
-  
-  
-If you need to make a cable, see section  
-How to make a cable for the overall details, and the  
-subsection of section  
-Info on selected UPSs that refers to your UPS. The latter might also include  
-information on manufacturer supplied cables. You may want to at least  
-skim all of section  
-Info on selected UPSs because each section has a few additional generally helpful  
-details.  
-  
-  
-  
-  
-  
-****Edit /etc/inittab. Put in something like this:  
-  
-# What to do when power fails (Halt system & drain battery :):  
-pf::powerfail:/etc/powerfailscript +5  
-# If power is back before shutdown, cancel the running shutdown.  
-pg:0123456:powerokwait:/etc/powerokscript  
-  
-  
-****  
-  
-****Write scripts /etc/powerfailscript and  
-/etc/powerokscript to shutdown in 5 minutes (or whatever's  
-appropriate) and kill any existing shutdown, respectively.  
-Depending on the version of shutdown that you're using, this will  
-be either so trivial that you'll dispense with the scripts, or be a  
-1 line bash script, something along the lines of:  
-  
-kill `ps -aux | grep "shutdown" | grep -v grep | awk '{print $2}'`  
-  
-and you'll keep the scripts. (In case it doesn't come out right,  
-the first single quote on the above line is a backquote, the  
-second and third are single quotes, and the last is also a  
-backquote.)  
-  
-****  
-  
-****Tell init to re-process the inittab file with the command:  
-  
-telinit q  
-  
-  
-****  
-  
-****Edit rc.local so that powerd gets run upon startup. The syntax  
-is:  
-  
-powerd <line>  
-  
-Replace <line> with the serial port that the UPS  
-is connected, such as /dev/cua1.  
-  
-****  
-  
-****Connect computer's serial port to UPS's serial port. DO NOT PLUG  
-THE COMPUTER INTO UPS YET.  
-  
-****  
-  
-****Plug a light into the UPS.  
-  
-****  
-  
-****Turn on the UPS and the light.  
-  
-****  
-  
-****Run powerd.  
-  
-****  
-  
-****Test the setup:  
-  
-  
-*****Yank the UPS's plug.  
-  
-  
-******Check that the light stays on.  
-******  
-  
-******Check that /etc/powerfailscript runs.  
-******  
-  
-******Check that shutdown is running.  
-******  
-  
-  
-*****  
-  
-*****Plug the UPS back in.  
-  
-  
-******Check that the light stays on.  
-******  
-  
-******Check that /etc/powerokscript runs.  
-******  
-  
-******Check that /etc/powerfailscript is not running.  
-******  
-  
-******Check that shutdown is no longer running.  
-******  
-  
-  
-*****  
-  
-*****Yank the UPS's plug again. Leave it out and make sure that the  
-computer shuts down properly in the proper amount of time.  
-  
-*****  
-  
-*****__The Dangerous Part.__ After everything seems to be  
-proper, power down the computer and plug it into the UPS. Run a  
-script that sync's the hard disk every second or so.  
-Simultaneously run a second script that keeps doing a find over  
-your entire hard disk. The first is to make this a little  
-safer and the second is to help draw lots of power. Now, pull  
-the plug on the UPS, check again that shutdown is running  
-and wait. Make sure that the computer shuts down cleanly before the  
-battery on the UPS gives out. This is dangerous because if the  
-power goes out before the computer shuts down, you can end up with a  
-corrupt file system, and maybe even lose all your files.  
-You'll probably want to do a full backup before this test, and  
-set the shutdown time extremely short to begin with.  
-*****  
-  
-  
-****  
-  
-  
-  
-Congratulations! You now have a Linux computer that's protected by a UPS  
-and will shutdown cleanly when the power goes out!  
-  
-  
-  
-  
-  
-  
-  
-!!5.4 User Enhancements  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-****Hack powerd.c to monitor the line indicating that the batteries  
-are low. When the batteries get low, do an __immediate__ shutdown.  
-****  
-  
-****Modify the shutdown procedure so that if it's shutting down in a  
-powerfail situation, then it turns off the UPS after doing  
-everything necessary.  
-****  
-  
-  
-  
-  
-----  
-  
-!!6. Hardware notes  
-  
-  
-  
-  
-!! 6.1 How to make a cable  
-  
-  
-  
-This section is just from messages I've seen on the net. I haven't  
-done it so I can't write from experience. If anyone has, please write  
-this section for me :). See also the message about the GPS1000  
-contained in section  
-GPS1000 from ACCODATA,  
-not to mention all the UPS specific data in section  
-Info on selected UPSs.  
-  
-  
-  
-  
->From miquels@caution.cistron.nl.mugnet.org Wed Jul 21 14:26:33 1993  
-Newsgroups: comp.os.linux  
-Subject: Re: UPS interface for Linux?  
-From: miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg)  
-Date: Sat, 17 Jul 93 18:03:37  
-Distribution: world  
-Organization: Cistron Electronics.  
-In article <1993Jul15.184450.5193@excaliber.uucp>  
-joel@rac1.wam.umd.edu (Joel M. Hoffman) writes:  
->I'm in the process of buying a UPS (Uninteruptable Power Supply), and  
->notice that some of them have interfaces for LAN's to signal the LAN  
->when the power fails.  
->  
->Is there such an interface for Linux?  
->  
->Thanks.  
->  
->-Joel  
->(joel@wam.umd.edu)  
->  
-When I worked on the last versioon of !SysVinit (Now version 2.4),  
-I temporarily had a UPS on my computer, so I added support for it.  
-You might have seen that in the latest <signal.h> header files there  
-is a #define SIGPWR 30 now :-). Anyway, I did not have such a special  
-interface but the output of most UPS's is just a relais that makes or breaks  
-on power interrupt. I thought up a simple way to connect this to the  
-DCD line of the serial port. In the !SysVinit package there is a daemon  
-called 'powerd' that keeps an eye on that serial line and sends SIGPWR  
-to init when the status changes, so that init can do something (such as  
-bringing the system down within 5 minutes). How to connect the UPS to  
-the serial line is described in the source "powerd.c", but I will  
-draw it here for explanation:  
-+------------------------o DTR  
-|  
-+---+  
-| | resistor  
-| | 10 kilo-Ohm  
-| |  
-+---+ To serial port.  
-|  
-+-----o-------+------------------------o DCD  
-| |  
-o UPS |  
-\ relais |  
-\ |  
-| |  
-+-----o-------+------------------------o GND  
-Nice drawing eh?  
-Hope this helps.  
-!SysVinit can be found on sunsite (and tsx-11 probably) as  
-SysVinit2.4.tar.z  
-Mike.  
---  
-Miquel van Smoorenburg, <miquels@cistron.nl.mugnet.org>  
-Ibmio.com: cannot open CONFIG.SYS: file handle broke off.  
->From danny@caution.cistron.nl.mugnet.org Wed Jul 21 14:27:04 1993  
-Newsgroups: comp.os.linux  
-Subject: Re: UPS interface for Linux?  
-From: danny@caution.cistron.nl.mugnet.org (Danny ter Haar)  
-Date: Mon, 19 Jul 93 11:02:14  
-Distribution: world  
-Organization: Cistron Electronics.  
-In article <9307174330@caution.cistron.nl.mugnet.org>  
-miquels@caution.cistron.nl.mugnet.org (Miquel van Smoorenburg) writes:  
->How to connect the UPS to the serial line is described in the source  
->"powerd.c", but I will draw it here for explanation:  
-The drawing wasn't really clear, please use this one in stead !  
->  
-> +------------------------o DTR  
-> |  
-> +---+  
-> | | resistor  
-> | | 10 kilo-Ohm  
-> | |  
-> +---+ To serial port.  
-> |  
-> +-----o-------+------------------------o DCD  
-> |  
-> o UPS  
-> \ relais  
-> \  
-> |  
-> +-----o--------------------------------o GND  
->  
-The DTR is kept high, when the UPS's power input is gone it  
-will close the relais . The computer is monitoring  
-the DCD input port to go LOW . When this happens it will start a  
-shutdown sequence...  
-_____  
-Danny  
---  
-<=====================================================================>  
-Danny ter Haar <dannyth@hacktic.nl> or <danny@cistron.nl.mugnet.org>  
-Robins law #103: 'a couple of lightyears can't part good friends'  
-  
-  
-  
-  
-  
-!! 6.2 Reverse-engineering cables and hacking powerd.c  
-  
-  
-  
-Try to get documentation for the cables that your UPS seller supplies.  
-In particular find out:  
-  
-  
-  
-  
-  
-****What lines need to be kept high.  
-****  
-  
-****What line(s) turn off the UPS.  
-****  
-  
-****What lines the UPS toggles to indicate that:  
-  
-  
-*****Power is out.  
-*****  
-  
-*****Battery is low.  
-*****  
-  
-  
-****  
-  
-  
-  
-You then need to either hack powerd.c appropriately, or use one  
-of the above configurable packages (see the packages  
-genpower-1..1.tgz, powerd-2..tar.gz, or upsd-1..tgz  
-described in section  
-Software). If you use  
-one of the packages, follow the instructions there. If you want to  
-hack powerd.c, keep reading.  
-  
-  
-If you have trouble getting the above information, or just want to  
-check it (a ''good'' idea) the following program might help. It's a  
-hacked version of powerd.c. It allows you to set the necessary port  
-flags from the command line and then monitors the port, displaying the  
-control lines every second. I used it as ``upscheck /dev/cua1 2'' (for  
-example) to set the 2nd bit (DTR) and to clear the other bits. The  
-number base 2 indicates which bits to set, so for example to set bits  
-1, 2 and 3, (and clear the others) use 7. See the code for details.  
-  
-  
-Here's the (untested) upscheck.c program. It's untested because I  
-edited the version I originally used to make it clearer, and can't  
-test the new version at the moment.  
-  
-  
-  
-  
-  
-/*  
-* upscheck Check how UPS & computer communicate.  
-*  
-* Usage: upscheck <device> <bits to set>  
-* For example, upscheck /dev/cua4 4 to set bit 3 &  
-* monitor /dev/cua4.  
-*  
-* Author: Harvey J. Stein <hjstein@math.huji.ac.il>  
-* (but really just a minor modification of Miquel van  
-* Smoorenburg's <miquels@drinkel.nl.mugnet.org> powerd.c  
-*  
-* Version: 1.0 19940802  
-*  
-*/  
-#include <sys/types.h>  
-#include <sys/ioctl.h>  
-#include <fcntl.h>  
-#include <errno.h>  
-#include <stdlib.h>  
-#include <unistd.h>  
-#include <stdio.h>  
-#include <signal.h>  
-/* Main program. */  
-int main(int argc, char **argv)  
-{  
-int fd;  
-/* These TIOCM_* parameters are defined in <linux/termios.h>, which */  
-/* is indirectly included here. */  
-int dtr_bit = TIOCM_DTR;  
-int rts_bit = TIOCM_RTS;  
-int set_bits;  
-int flags;  
-int status, oldstat = -1;  
-int count = ;  
-int pc;  
-if (argc < 2) {  
-fprintf(stderr, "Usage: upscheck <device> <bits-to-set>\n");  
-exit(1);  
-}  
-/* Open monitor device. */  
-if ((fd = open(argv[[1], O_RDWR | O_NDELAY)) < ) {  
-fprintf(stderr, "upscheck: %s: %s\n", argv[[1], sys_errlist[[errno]);  
-exit(1);}  
-/* Get the bits to set from the command line. */  
-sscanf(argv[[2], "%d", &set_bits);  
-while (1) {  
-/* Set the command line specified bits (& only the command line */  
-/* specified bits). */  
-ioctl(fd, TIOCMSET, &set_bits);  
-fprintf(stderr, "Setting %o.\n", set_bits);  
-sleep(1);  
-/* Get the current line bits */  
-ioctl(fd, TIOCMGET, &flags);  
-fprintf(stderr, "Flags are %o.\n", flags);  
-/* Fiddle here by changing TIOCM_CTS to some other TIOCM until */  
-/* this program detects that the power goes out when you yank */  
-/* the plug on the UPS. Then you'll know how to modify powerd.c. */  
-if (flags & TIOCM_CTS)  
-{  
-pc = 0 ;  
-fprintf(stderr, "power is up.\n");  
-}  
-else  
-{  
-pc = pc + 1 ;  
-fprintf(stderr, "power is down.\n");  
-}  
-}  
-close(fd);  
-}  
-  
-  
-  
-  
-  
-  
-!! 6.3 Serial port pin assignments  
-  
-  
-  
-The previous section presupposes knowledge of the correspondence  
-between terminal signals and serial port pins. Here's a reference for  
-that correspondence, taken from David Tal's ``Frequently Used Cables  
-and Connectors'' document. I'm including a diagram illustrating the  
-connectors, and a table listing the correspondence between pin numbers  
-and terminal line signals.  
-  
-  
-If you need a general reference for cable wiring, connectors, etc,  
-then David Tal's would be a good one, but I can't seem to locate this  
-document on the net any more. But I've found a good replacement.  
-It's  
-The Hardware Book.  
-  
-  
-Other useful sites:  
-  
-  
-****  
-Yost Serial Device Wiring Standard which contains  
-interesting information on how to use RJ-45 jacks and eight wire  
-cables for all serial port connections.  
-****  
-  
-****  
-Stokely Consulting for  
-general Unix info, and in particular their Unix Serial Port Resources.  
-****  
-  
-****  
-Unix Workstation System Administration Education Certification which  
-contains  
-RS-232: Connectors and Cabling  
-****  
-  
-  
-  
-Incidentally, it seems that the Linuxdoc-sgml package still doesn't  
-format tables very well in the html output. If you want to be  
-able to read the following table, you're probably going to have to  
-look at either the DVI version or the plain text version of this  
-document.  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-DB-25 DB-9 Name EIA CCITT DTE-DCE Description  
-Pin # Pin #  
-1 FG AA 101 --- Frame Ground/Chassis GND  
-2 3 TD BA 103 ---> Transmitted Data, TxD  
-3 2 RD BB 104 <--- Received Data, RxD  
-4 7 RTS CA 105 ---> Request To Send  
-5 8 CTS CB 106 <--- Clear To Send  
-6 6 DSR CC 107 <--- Data Set Ready  
-7 5 SG AB 102 ---- Signal Ground, GND  
-8 1 DCD CF 109 <--- Data Carrier Detect  
-9 -- -- - - Positive DC test voltage  
-10 -- -- - - Negative DC test voltage  
-11 QM -- - <--- Equalizer mode  
-12 SDCD SCF 122 <--- Secondary Data Carrier Detect  
-13 SCTS SCB 121 <--- Secondary Clear To Send  
-14 STD SBA 118 ---> Secondary Transmitted Data  
-15 TC DB 114 <--- Transmitter (signal) Clock  
-16 SRD SBB 119 <--- Secondary Receiver Clock  
-17 RC DD 115 ---> Receiver (signal) Clock  
-18 DCR -- - <--- Divided Clock Receiver  
-19 SRTS SCA 120 ---> Secondary Request To Send  
-20 4 DTR CD 108.2 ---> Data Terminal Ready  
-21 SQ CG 110 <--- Signal Quality Detect  
-22 9 RI CE 125 <--- Ring Indicator  
-23 -- CH 111 ---> Data rate selector  
-24 -- CI 112 <--- Data rate selector  
-25 TC DA 113 <--- Transmitted Clock  
- Pin Assignment for the Serial Port (RS-232C), 25-pin and 9-pin  
-  
-  
-  
-  
-  
-1 13 1 5  
-_______________________________ _______________  
-\ . . . . . . . . . . . . . / \ . . . . . / RS232-connectors  
-\ . . . . . . . . . . . . / \ . . . . / seen from outside  
---------------------------- ----------- of computer.  
-14 25 6 9  
-DTE : Data Terminal Equipment (i.e. computer)  
-DCE : Data Communications Equipment (i.e. modem)  
-RxD : Data received; 1 is transmitted "low", 0 as "high"  
-TxD : Data sent; 1 is transmitted "low", 0 as "high"  
-DTR : DTE announces that it is powered up and ready to communicate  
-DSR : DCE announces that it is ready to communicate; low=modem hangup  
-RTS : DTE asks DCE for permission to send data  
-CTS : DCE agrees on RTS  
-RI : DCE signals the DTE that an establishment of a connection is attempted  
-DCD : DCE announces that a connection is established  
-  
-  
-  
-  
-  
-!! 6.4 Ioctl to RS232 correspondence  
-  
-  
-  
-Since you also might need to modify powerd.c to raise and lower the  
-correct lines, you might also need the numeric values of different  
-terminal signals. The can be found in  
-/usr/include/linux/termios.h, but are reproduced here for  
-reference. Since they could change, you're best off confirming these  
-values against said file.  
-  
-  
-  
-  
-  
-/* modem lines */  
-#define TIOCM_LE 0x001  
-#define TIOCM_DTR 0x002  
-#define TIOCM_RTS 0x004  
-#define TIOCM_ST 0x008  
-#define TIOCM_SR 0x010  
-#define TIOCM_CTS 0x020  
-#define TIOCM_CAR 0x040  
-#define TIOCM_RNG 0x080  
-#define TIOCM_DSR 0x100  
-#define TIOCM_CD TIOCM_CAR  
-#define TIOCM_RI TIOCM_RNG  
-  
-  
-  
-  
-Note that the 3rd column is in Hex.  
-  
-  
-  
-----  
-  
-!!7. What to do when you're really stuck  
-  
-  
-Here's a novel solution to UPS control for when the UPS and the  
-computer just aren't on speaking terms. I must say that every time I  
-read this, I'm struck by how clever a solution it is.  
-  
-  
-  
-  
-  
-  
-  
-  
-From: " Raymond A. Ingles" <inglesra@frc.com>  
-To: hjstein@math.huji.ac.il  
-Subject: UPS HOWTO tip  
-Date: Mon, 24 Feb 1997 11:48:32 -0500 (EST)  
-I don't know if others would find this useful, but I thought I might  
-pass this along for possible inclusion in the HOWTO. Thanks for  
-maintaining a HOWTO that I found very useful!  
------------------  
-My fiancee bought me a UPS as a present, a Tripp-Lite 400, I believe. It  
-was very welcome and seems to operate as expected, but unfortunately  
-doesn't have a serial interface to let the computer know the line power  
-has failed. It's apparently intended for home or office use where the  
-computer will not be left unattended.  
-This, of course, was unacceptable and I began working on a line monitor,  
-planning on opening up the case and figuring out how to add the hardware  
-that the manufacturer had left out. Then I realized that there was a  
-quicker and simpler and cheaper (if somewhat less functional) way.  
-I had an old 2400 baud modem that I wasn't using, and hooked it up to an  
-unused serial port on my computer. I then plugged the modem into a surge  
-supressor plugged into the wall power. I set up powerd with the options  
-as follows:  
------  
-serialline /dev/ttyS1  
-monitor DCD  
-failwhen low  
------  
-Now, when the wall power fails (or, since that hasn't happened lately,  
-when I pull the surge supressor from the wall to test this setup) the modem  
-fails but the UPS starts supplying power to the computer. When powerd  
-notices the modem has dropped DCD, it triggers the powerfail sequence.  
-Obviously, this has some limitations. You can't tell from the modem when  
-the battery is low and so on. You can only tell that the wall power has  
-failed. Still, it's certainly cheap and I hate to see functioning  
-computer equipment lie unused. These days you should be able to get a  
-2400 baud modem for very nearly free.  
-I'd still suggest getting a real UPS with full communication capability.  
-But if you're stuck with a less-functional one, this may at least make it  
-useful.  
-Sincerely,  
-Ray Ingles (810) 377-7735 inglesra@frc.com  
-"Anybody who has ever seen a photograph showing the kind of damage that  
-a trout traveling that fast can inflict on the human skull knows that  
-such photographs are very valuable. I paid $20 for mine." - Dave Barry  
-  
-  
-  
-  
-  
-----  
-  
-!! 8. Info on selected UPSs  
-  
-  
-  
-  
-  
-This section contains UPS specific information. What I'd like is to  
-have the UPS control port information (what each pin does and needs to  
-have done), information on the manufacturer supplied cable (what it  
-connects where), and a hacked version of powerd.c which works with the  
-UPS. What I currently have is fairly complete descriptions of setting  
-up each UPS. I'd try to distill out the relevant information, but  
-since I can't test each UPS, it's hard to decide exactly what's  
-relevant. Furthermore, each UPS seems to have some additional quirks  
-that are nicely described by the authors of each section. So for now  
-I'm leaving everything in. Makes for a hefty Howto.  
-  
-  
-__Please send me your experiences for inclusion here.__  
-  
-  
-  
-  
-!!8.1 General Experiences.  
-  
-  
-  
-I've been saving peoples comments, but haven't gotten permission yet  
-to include them here. Here's a general summary of what I've heard  
-from people.  
-  
-  
-APC:  
-Won't release info on their smart mode without your signature on  
-a non-disclosure agreement. Thus, people are forced to run their  
-smart UPSs in the dumb mode as outlined above. Various  
-people have had varying amounts of success reverse engineering  
-  
-  
-Best:  
-Helpful and friendly. Supply source code and documentation both  
-for dumb modes and smart modes.  
-  
-  
-!TrippLite:  
-One person reported that !TrippLite won't release info either.  
-  
-  
-Upsonic:  
-One person reported that Upsonic has discussed technical details  
-over the phone, answered questions via fax and are generally helpful.  
-  
-  
-  
-  
-  
-  
-  
-!!8.2 Advice 1200 A  
-  
-  
-  
-UPS from Advice Electronics, Tel Aviv Israel (they stick their own  
-name on the things).  
-  
-  
-I don't recommend them. Our experiences with them have been very bad.  
-We've twice had a 17" monitor fry when the power failed. We've had  
-computers spontaneously reboot when the power failed.  
-  
-  
-None the less, for completeness, here's he UPS Control Port's pin  
-specifications.  
-  
-  
-  
-  
-  
-****2 - Power Fail.  
-****  
-  
-****5 - Battery Low.  
-****  
-  
-****6 - Shut Down UPS.  
-****  
-  
-****4 - Common ground for pin 2, 5, 6.  
-****  
-  
-  
-  
-They also gave me the following picture which didn't help me, but  
-may help you if you want to build a cable yourself:  
-  
-  
-  
-  
-  
-  
-  
-  
-2 ----------+  
-|  
-\  
-\|  
-|--------------  
-/|  
-\/ <--- The "\/" here indicates the type of  
-| this transister. I forget what  
-| denotes what, but this one points  
-+-----+ away from the center line.  
-/ / /  
-5 ----------+  
-|  
-\  
-\|  
-|--------------  
-/|  
-\/  
-|  
-|  
-+-----+  
-/ / /  
-+-------------  
-|  
-/  
-10K |/  
-6 --\/\/\/--|  
-|\  
-\/  
-|  
-|  
-+-----+  
-/ / /  
-4 ----------+  
-|  
-|  
-+-----+  
-/ / /  
-  
-  
-  
-  
-Cable supplied  
-  
-  
-They first gave me a cable that was part of a DOS UPS control  
-package called RUPS. I used this for testing. When I was  
-satisfied, they gave me a cable they use for Netware servers  
-connected to UPSs. It functioned identically. Here are the  
-details:  
-  
-  
-  
-  
-  
-****DTR - Powers cable (make powerd.c keep it high).  
-****  
-  
-****CTS - Power out (stays high and goes low when power goes out).  
-****  
-  
-****DSR - Battery low (stays high. Goes low when battery does).  
-****  
-  
-****RTS - Turns off UPS (keep it low. Set it high to turn off UPS).  
-****  
-  
-  
-  
-(The powerd.c that comes with !SysVinit set or left RTS high,  
-causing the UPS to shut off immediately when powerd was started  
-up!)  
-  
-  
-  
-  
-  
-  
-  
-!! 8.3 Trust Energy Protector 400/650  
-  
-  
-  
-This section is good for more than just the Trust Energy Protector.  
-It illustrates how to work with the new features of init.  
-  
-  
-How to use a Trust Energy Protector 400/650 under Linux  
-  
-  
-by  
-Ciro Cattuto  
-  
-Version 1.0 - 31 March 1997  
-  
-  
-  
-  
-  
-  
-  
-!The computer to UPS connection  
-  
-  
-The Trust Energy Protector 400/650 is equipped with a remote signal port.  
-Using a properly designed cable, it is possible to connect the UPS port  
-to the serial port of a computer, thus making it aware of power failure events.  
-  
-  
-  
-  
-  
-  
-  
-!The UPS signal port  
-  
-  
-These are the pin assignments for the DB-9 signal port of the Trust  
-Energy Protector 400/650, as described in the user's manual:  
-  
-  
-  
-  
-  
-  
-  
-; __pin 2__:  
-  
-The relay will close when input power fails.  
-  
-  
-  
-; __pin 4__:  
-  
-Common for pins 2 and 5.  
-  
-  
-  
-; __pin 5__:  
-  
-The relay will close when the battery inside  
-the Trust Energy Protector 400/650 has less  
-than 1.5 minutes of backup time left.  
-  
-  
-  
-; __pin 6__:  
-  
-The user may send a high level signal (+5V - +12V)  
-for over 1ms to turn off the Trust Energy Protector  
-400/650. However this option can only be activated  
-when the input power fails.  
-  
-  
-  
-; __pin 7__:  
-  
-Common for pin 6.  
-  
-  
-  
-  
-  
-!The Cable  
-  
-  
-This is the cable I used to connect the UPS  
-to the serial port of my computer:  
-  
-  
-  
-  
-  
-computer side (DB-25) UPS side (DB-9)  
-===================================================  
-6 DSR --+ [[R] = 10 kilo-Ohm resistor  
-|  
-20 DTR --+----+  
-| |  
-[[R] [[R] +--- 7  
-| | |  
-8 DCD --+----|----------- ---------|--- 2  
-| |  
-7 GND -------|----------- ---------+--- 4  
-| ....  
-5 CTS -------+----------- ------------- 5  
-2 TX ------------------- ------------- 6  
-===================================================  
-  
-  
-  
-  
-In the case of a DB-9 serial port, the pins 6,20,8,7,5,2 are mapped to  
-pins 6,4,1,5,8,3.  
-  
-  
-  
-  
-  
-  
-  
-!How the cable works  
-  
-  
-The computer raises DTR and checks whether DSR is high, to  
-ensure that the cable is connected to the computer. While the power is  
-good, DCD and CTS are both high (because of the pull-up  
-resistors).  
-  
-  
-When the power fails, the relay between pins 2 and 4 of the  
-UPS port closes, and DCD becomes low, signalling the failure  
-condition.  
-  
-  
-Similarly, when the UPS batteries are getting low,  
-the relay between pins 5 and 4 closes, thus lowering CTS.  
-  
-  
-During a power failure the computer is able to turn off the UPS  
-by raising TX for over 1ms. This can be easily accomplished  
-sending a 0xFF byte to the serial port, at a low baud rate.  
-  
-  
-  
-  
-  
-  
-  
-!The powerd daemon  
-  
-  
-To make use of the information available at the serial port  
-we need to run a program which monitors the port,  
-decodes the signals and sends the appropriate messages  
-to the operating system, i.e. to the init process.  
-The init process can execute scripts and programs  
-designed to handle (gracefully!) the power failure event.  
-  
-  
-  
-  
-  
-  
-  
-!Compiling powerd  
-  
-  
-In Appendix A you'll find the source code of powerd,  
-the daemon I use to monitor the Trust Energy Protector 400/650.  
-To compile it you will need the source code of the sysvinit  
-package (I used the code from sysvinit-2.60). Just overwrite  
-the original powerd.c and compile it.  
-  
-  
-  
-  
-  
-  
-  
-!How powerd works  
-  
-  
-As soon as powerd starts it opens the serial device connected  
-to the UPS and forces DTR high. It then forks a daemon and exits,  
-leaving the daemon running. The powerd daemon can be in one of  
-three states:  
-  
-  
-  
-  
-; __State 0 - POWER IS GOOD__:  
-  
-In this state powerd reads the serial port every  
-T0_SLEEP seconds (see the #define lines at the beginning of  
-the code). If DCD drops, powerd switches to state 1. If  
-CTS drops powerd switches to state 2 (this shouldn't  
-happen without DCD dropping before, but I decided to stay on  
-the safe side).  
-  
-  
-  
-; __State 1 - POWER FAILURE__:  
-  
-A power failure was detected. DCD is low and powerd reads  
-the UPS port every T1_SLEEP seconds. If DCD becomes high,  
-it switches to state . If CTS drops, it switches to state 2.  
-  
-  
-  
-; __State 2 - POWER CRITICAL__:  
-  
-UPS batteries are low. The powerd daemon will remain in this  
-state.  
-  
-  
-  
-Each time powerd changes state, it notifies the init process,  
-so that the appropriate action can be taken. These events  
-are logged using the system logging facility.  
-  
-  
-If DSR is low there must be something wrong with the cable.  
-Powerd keeps monitoring the DSR line, and every two minutes  
-sends a warning message to the system logging facility.  
-  
-  
-  
-  
-  
-  
-  
-!Running powerd  
-  
-  
-The powerd daemon should be launched from the system  
-initialization scripts, during system startup. I added the following  
-lines to my /etc/rc.d/rc.local script:  
-  
-  
-  
-  
-  
-# Add support for the UPS  
-echo "Starting powerd daemon..."  
-rm -f /etc/turnUPSoff  
-stty -crtscts speed 75 < /dev/cua3 > /dev/null  
-if [[ -x /usr/sbin/powerd ]; then  
-/usr/sbin/powerd /dev/cua3  
-fi  
-  
-  
-  
-  
-First we remove (if present) the file /etc/turnUPSoff. This  
-file is used by the system shutdown script (/etc/rc.d/rc.,  
-in my case) to decide whether we want to turn the UPS off. See later  
-in this document for more information.  
-  
-  
-Then we disable hardware flow control on the serial device  
-connected to the UPS, and set its baud rate to 75.  
-Now we're confident that the TX signal will stay high  
-for a time long enough to turn the UPS off, if we send  
-a character to the serial port (again, see later).  
-  
-  
-Finally we launch the powerd daemon, specifying the serial port  
-to monitor. Notice that we're not going to read characters from the  
-serial device, so don't worry if you have interrupt conflicts -  
-they'll do no harm.  
-  
-  
-  
-  
-  
-  
-  
-!The inittab file and the shutdown scripts  
-  
-  
-The powerd process is now running, and it will send signals to  
-init whenever a power failure occurs. Now we have to configure the  
-system so that it can react in a useful way when those signals are  
-received.  
-  
-  
-  
-  
-  
-  
-  
-!Modifying inittab  
-  
-  
-Add the following lines near the beginning of your /etc/inittab file:  
-  
-  
-  
-  
-  
-# What to do when power fails (delayed shutdown).  
-pf::powerfail:/etc/powerfail_script  
-# If power is back before shutdown, cancel the running shutdown.  
-pg::powerokwait:/etc/powerokay_script  
-# If UPS batteries are getting low, do an immediate shutdown.  
-pc::powerfailnow:/etc/powerfailnow_script  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!The scripts  
-  
-  
-The scripts powerfail_script, powerokay_script and  
-powerfailnow_script are executed when init receives the  
-corresponding signal. They have the responsibility of shutting down  
-the system in a clean way or cancelling a running shutdown in case  
-power comes back. These are the scripts I'm currently using:  
-  
-  
-/etc/powerfail_script:  
-  
-  
-  
-  
-  
-#!/bin/sh  
-/bin/sync  
-/usr/bin/sleep 10m  
-kill -9 `ps auxw | grep "shutdown" | grep -v grep | awk '{print $2}'`  
-> /etc/turnUPSoff  
-/sbin/shutdown -t30 -h +3 "POWER FAILURE"  
-  
-  
-  
-  
-My Trust Energy Protector 400 powers only the computer, so I have  
-quite a long backup time. Since power failures only last for some  
-minutes in my zone, the system responds to a blackout in the following  
-way: it waits for 10 minutes (usually the power comes back before) and  
-then halts the system, allowing the users to close their applications  
-and leave the machine. Before issuing the shutdown command, I make  
-sure that there are no running shutdowns. I also create the file  
-/etc/turnUPSoff, so that the system will turn off the UPS.  
-  
-  
-/etc/powerokay_script:  
-  
-  
-  
-  
-  
-#!/bin/sh  
-kill `ps auxw | grep "powerfail_script" | grep -v grep | awk '{print $2}'`  
-kill -9 `ps auxw | grep "shutdown" | grep -v grep | awk '{print $2}'`  
-rm -f /etc/turnUPSoff  
-  
-  
-  
-  
-If power comes back, we kills the running powerfail_script  
-and any running shutdown. We also remove /etc/turnUPSoff.  
-  
-  
-/etc/powerfailnow_script:  
-  
-  
-  
-  
-  
-#!/bin/sh  
-kill -9 `ps auxw | grep "shutdown" | grep -v grep | awk '{print $2}'`  
-> /etc/turnUPSoff  
-/sbin/shutdown -h now "UPS batteries low. IMMEDIATE SHUTDOWN."  
-  
-  
-  
-  
-If batteries are getting low, we make sure that there are no running  
-shutdowns, create the /etc/turnUPSoff file and then shutdown  
-the system immediately.  
-  
-  
-  
-  
-  
-  
-  
-!The system shutdown script  
-  
-  
-When system shutdown is complete, we can turn off the UPS  
-raising the TX signal of the serial port for over 1ms.  
-The serial device is already properly configured (see the  
-stty command in the rc.local script). If the file  
-/etc/turnUPSoff is present, we send the byte 0xff  
-(all '1' bits) to the serial port.  
-  
-  
-To do this, add the following lines near the bottom of your  
-system shutdown script (/etc/rc.d/rc., in my case).  
-The proper place depends on the way your system is configured,  
-but it should be okay to insert the lines before the echo command  
-which prints the "System is halted" message.  
-  
-  
-  
-  
-  
-  
-  
-  
-# Is this a powerfail situation?  
-if [[ -f /etc/turnUPSoff ]; then  
-echo "Turning off UPS. Bye."  
-sleep 5  
-echo -e "\377" > /dev/cua3  
-exit 1  
-fi  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!General remarks  
-  
-  
-This document contains things I learned while trying to configure  
-*my* Linux system to use the Trust Energy Protector 400.  
-Some informations (the path of the system inizialization scripts,  
-for example) may be specific to my system, and you probably  
-will need some customization. However, I hope this document  
-will be a useful trace for those trying to use a Trust Energy  
-Protector 400/650 under Linux. If you experience difficulties,  
-look for general information in the rest of this UPS-Howto.  
-Good luck!  
-  
-  
-  
-  
-  
-  
-  
-!Feedback  
-  
-  
-I would greatly appreciate receiving feedback about this document,  
-so that I can polish it and correct possible mistakes (I know the  
-English is not very good, but I'm Italian after all!).  
-Direct any comments/suggestions/critics to the following e-mail address:  
-  
-  
-  
-ciro@stud.unipg.it  
-  
-If you have problems using Trust Energy Protector 400/650  
-under Linux, feel free to contact me. I'll try to help you.  
-  
-  
-  
-  
-  
-  
-  
-!Legal Issues  
-  
-  
-I have no relation at all with Trust Networking Products.  
-  
-  
-The information contained in this document comes "as is".  
-Use it at your own risk. I can't be held responsible for  
-any damage or loss of data resulting from the use of the code  
-and information given here.  
-  
-  
-  
-  
-  
-Ciro Cattuto  
-  
-  
-  
-  
-  
------  
-  
-!Appendix A - Source code for the powerd daemon  
-  
-  
-powerd.c:  
-  
-  
-  
-  
-  
-/*  
-* powerd Catch power failure signals from  
-* a Trust Energy Protector 400/650  
-* and notify init  
-*  
-* Usage: powerd /dev/cua3 (or any other serial device)  
-*  
-* Author: Ciro Cattuto <ciro@stud.unipg.it>  
-*  
-* Version 1.0 - 31 March 1997  
-*  
-* This code is heavily based on the original powerd.c code  
-* by Miquel van Smoorenburg <miquels@drinkel.ow.org>.  
-*  
-* This program is free software; you can redistribute it and/or  
-* modify it under the terms of the GNU General Public License  
-* as published by the Free Software Foundation; either version  
-* 2 of the License, or (at your option) any later version.  
-*  
-*/  
-/* state 0 - power is good */  
-#define T0_SLEEP 10 /* interval between port reads, in seconds */  
-#define T0_DCD 3 /* number of seconds DCD has to be high  
-to cause an action */  
-#define T0_CTS 3 /* number of seconds CTS has to be high  
-to cause an action */  
-/* state 1 - power is failing */  
-#define T1_SLEEP 2 /* interval between ports reads */  
-#define T1_DCD 3 /* same as T0_DCD */  
-#define T1_CTS 3 /* same as T0_CTS */  
-#define DSR_SLEEP 2  
-#define DSR_TRIES 60  
-/* Use the new way of communicating with init. */  
-#define NEWINIT  
-#include <sys/types.h>  
-#include <sys/stat.h>  
-#include <sys/ioctl.h>  
-#include <fcntl.h>  
-#include <errno.h>  
-#include <stdlib.h>  
-#include <unistd.h>  
-#include <stdio.h>  
-#include <signal.h>  
-#include <syslog.h>  
-#include <string.h>  
-#include "paths.h"  
-#ifdef NEWINIT  
-#include "initreq.h"  
-#endif  
-#ifndef SIGPWR  
-# define SIGPWR SIGUSR1  
-#endif  
-#ifdef NEWINIT  
-void alrm_handler()  
-{  
-}  
-#endif  
-/* Tell init that the power has gone (1), is back (),  
-or the UPS batteries are low (2). */  
-void powerfail(int event)  
-{  
-int fd;  
-#ifdef NEWINIT  
-struct init_request req;  
-/* Fill out the request struct. */  
-memset(&req, , sizeof(req));  
-req.magic = INIT_MAGIC;  
-switch (event)  
-{  
-case :  
-req.cmd = INIT_CMD_POWEROK;  
-break;  
-case 1:  
-req.cmd = INIT_CMD_POWERFAIL;  
-break;  
-case 2:  
-default:  
-req.cmd = INIT_CMD_POWERFAILNOW;  
-}  
-/* Open the fifo (with timeout) */  
-signal(SIGALRM, alrm_handler);  
-alarm(3);  
-if ((fd = open(INIT_FIFO, O_WRONLY)) >=  
-&& write(fd, &req, sizeof(req)) == sizeof(req)) {  
-close(fd);  
-return;  
-}  
-/* Fall through to the old method.. */  
-#endif  
-/* Create an info file for init. */  
-unlink(PWRSTAT);  
-if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= ) {  
-switch (event)  
-{  
-case :  
-write(fd, "OK\n", 3);  
-break;  
-case 1:  
-write(fd, "FAIL\n", 5);  
-break;  
-case 2:  
-default:  
-write(fd, "LOW\n", 4);  
-break;  
-}  
-close(fd);  
-}  
-kill(1, SIGPWR);  
-}  
-/* Main program. */  
-int main(int argc, char *argv[[])  
-{  
-int fd;  
-int dtr_bit = TIOCM_DTR;  
-int flags;  
-int DCD, CTS;  
-int status = -1;  
-int DCD_count = , CTS_count = ;  
-int tries;  
-if (argc < 2) {  
-fprintf(stderr, "Usage: powerd <device>\n");  
-exit(1);  
-}  
-/* Start syslog. */  
-openlog("powerd", LOG_CONS|LOG_PERROR, LOG_DAEMON);  
-/* Open monitor device. */  
-if ((fd = open(argv[[1], O_RDWR | O_NDELAY)) < ) {  
-syslog(LOG_ERR, "%s: %s", argv[[1], sys_errlist[[errno]);  
-closelog();  
-exit(1);  
-}  
-/* Line is opened, so DTR is high. Force it anyway to be sure. */  
-ioctl(fd, TIOCMBIS, &dtr_bit);  
-/* Daemonize. */  
-switch(fork()) {  
-case : /* Child */  
-closelog();  
-setsid();  
-break;  
-case -1: /* Error */  
-syslog(LOG_ERR, "can't fork.");  
-closelog();  
-exit(1);  
-default: /* Parent */  
-closelog();  
-exit();  
-}  
-/* Restart syslog. */  
-openlog("powerd", LOG_CONS, LOG_DAEMON);  
-/* Now sample the DCD line. */  
-while(1) {  
-/* Get the status. */  
-ioctl(fd, TIOCMGET, &flags);  
-/* Check the connection: DSR should be high. */  
-tries = ;  
-while((flags & TIOCM_DSR) == ) {  
-/* Keep on trying, and warn every two minutes. */  
-if ((tries % DSR_TRIES) == )  
-syslog(LOG_ALERT, "UPS connection error");  
-sleep(DSR_SLEEP);  
-tries++;  
-ioctl(fd, TIOCMGET, &flags);  
-}  
-if (tries > )  
-syslog(LOG_ALERT, "UPS connection OK");  
-/* Calculate present status. */  
-DCD = flags & TIOCM_CAR;  
-CTS = flags & TIOCM_CTS;  
-if (status == -1)  
-{  
-status = (DCD != ) ? 0 : 1;  
-if (DCD == )  
-{  
-syslog(LOG_ALERT, "Power Failure. UPS active.");  
-powerfail(1);  
-}  
-}  
-switch (status)  
-{  
-case :  
-if ((DCD != ) && (CTS != ))  
-{  
-DCD_count = ;  
-CTS_count = ;  
-sleep(T0_SLEEP);  
-continue;  
-}  
-if (DCD == )  
-DCD_count++;  
-if (CTS == )  
-CTS_count++;  
-if ((DCD_count < T0_DCD) && (CTS_count < T0_CTS))  
-{  
-sleep(1);  
-continue;  
-}  
-if (CTS_count == T0_CTS)  
-{  
-status = 2;  
-syslog(LOG_ALERT, "UPS batteries low!");  
-break;  
-}  
-status = 1;  
-DCD_count = ;  
-syslog(LOG_ALERT, "Power Failure. UPS active.");  
-break;  
-case 1:  
-if ((DCD == ) && (CTS != ))  
-{  
-DCD_count = ;  
-CTS_count = ;  
-sleep(T1_SLEEP);  
-continue;  
-}  
-if (DCD != )  
-DCD_count++;  
-if (CTS == )  
-CTS_count++;  
-if ((DCD_count < T1_DCD) && (CTS_count < T1_CTS))  
-{  
-sleep(1);  
-continue;  
-}  
-if (CTS_count == T1_CTS)  
-{  
-status = 2;  
-syslog(LOG_ALERT, "UPS batteries low!");  
-break;  
-}  
-status = ;  
-DCD_count = ;  
-CTS_count = ;  
-syslog(LOG_ALERT, "Power okay.");  
-break;  
-case 2:  
-sleep(1);  
-continue;  
-default:  
-break;  
-}  
-powerfail(status);  
-}  
-/* Never happens */  
-return();  
-}  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!!8.4 Trust UPS 400-A  
-  
-  
-  
-I received a submission about the Trust UPS 400-A. I don't know if  
-it's the same as the Trust Energy Protector 400, so I'm including the  
-submission.  
-  
-  
-  
-  
-  
-From: "Marcel Ammerlaan" <marcel@ch.twi.tudelft.nl>  
-To: hjstein@math.huji.ac.il  
-Subject: UPS addition  
-Date: Wed, 16 Jul 1997 01:17:11 +100  
-Hello Harvey,  
-I've got an addition to your UPS Howto. I've got a  
-"Trust UPS 400-A" which isn't listed. This product doesn't seem  
-to be manufactured anymore by it's producer (www.trust.box.nl).  
-But that doesn't mean it's not available anymore, I've got mine  
-really cheap just a month ago. Also this company just relabels  
-products so maybe there are others that have got the same UPS.  
-I have included a picture of the UPS in case anybody got such a beast  
-under another label.  
-The cable was easily constructed based on the original powerd cable  
-and the documentation from trust.  
-It clearly describes which pins of the D-shell connector of the UPS  
-carry which signal.  
-It extends the original design with 2 extra functions:  
-1) Battery low indication  
-2) Power down UPS  
-The cable I created looks like (see the other attachement).  
-This cable has been tested with powergend by Tom Webster and did work  
-completely (although your milage may vary).  
-Type: "pleur"  
-Cable Power: {TIOCM_DTR,}  
-Inverter Kill: {TIOCM_RTS,1}  
-Inverter Kill Time: 5  
-Power Check: {TIOCM_CTS,}  
-Battery Check: {TIOCM_CAR,}  
-Cable Check: {TIOCM_RI,}  
-Although (just as the powerd cable) the cable check function isn't  
-used because the UPS doesn't seem to support it.  
-Well that's about it I guess. If you need more information about the  
-UPS the cable or the software feel free to contact me.  
-And remember, everything described here works for me but I don't  
-guarantee it will for you.  
-Marcel Ammerlaan  
-CEO Pleursoft (explains the cablename doesn't it :-)  
-The Netherlands  
-<RSA implemented in 3 lines of perl deleted by the editor ;)>  
-Marcel Ammerlaan | <m.j.ammerlaan@twi.tudelft.nl>  
-Paardenmarkt 78 | Just another nerd on the loose  
-2611 PD Delft |  
-The Netherlands |  
-  
-  
-  
-  
-  
-  
-!!8.5 Sustainer S-40a  
-  
-  
-  
-Information on the Sustainer S-40a.  
-  
-  
-  
-  
-  
-  
-  
-  
-From: fnevgeny@plasma-gate.weizmann.ac.il (Evgeny Stambulchik)  
-To: hjstein@math.huji.ac.il, hjstein@math.huji.ac.il, hjstein@math.huji.ac.il,  
-hjstein@math.huji.ac.il  
-Subject: UPS-!HowTo add-ons  
-Date: Sun, 10 Sep 1995 13:09:50 +0300 (IST)  
-Hi Harvey,  
-This is an addition to your UPS-!HowTo. I'm using Sustainer S-40a UPS for a few  
-months with unipower package (now it's called genpower) and home-made cable  
-constructed as follows (I've sent all this stuff to Tom Webster, author of the  
-package, too, and it should appear in the next version):  
-UPS SIDE LINUX SIDE  
-2 POWER FAIL 1(8)  
-+-----------o-------------------------+----------------o DCD  
-| |  
-o |  
-/ |  
-/ |  
-| 4 COMMON | 5(7)  
-+-----------o------+------------------|----------------o GND  
-| | |  
-\ | |  
-\ | |  
-o | |  
-| 5 BATT | LOW | 8(5)  
-+-----------o------|------------------|--------+-------o CTS  
-| | |  
-| +-+-+ +-+-+  
-| | | | |  
-| 3 resistors | | | |  
-| | | | |  
-| by 10 kOhm | | | |  
-| +-+-+ +-+-+  
-| | | 4(20)  
-| +--------+-------o DTR  
-|  
-| 6 SHUT | DOWN +-------+ 7(4)  
-+-+ +----o------|-------------------+ +-------o RTS  
-\ | | +-------+  
-\| -+- |  
-| <- \ / |  
-/| -+- |  
-/ | 7 |  
-| +----o------+  
---+--  
----  
--  
-NOTE!!!: Shutdown pins in the tech info supplied with UPS (4 and 6) are given  
-incorrectly! The valid ones are 6 and 7, as shown above.  
-Note2: Pin numbers on the PC side in the brackets are for 25-pin connector,  
-outside - for 9-pin one.  
-Here's the unipowerd.h file I used:  
-/************************************************************************/  
-/* File Name : unipowerd.h */  
-/* Program Name : unipowerd Version: 1..0 */  
-/* Author : Tom Webster <webster@kaiwan.com> */  
-/* Created : 1994/04/20 */  
-/* Last Modified By : Tom Webster Date: 1995/04/09 */  
-/* Last Modified By : Evgeny Stambulchik (for Sustainer UPS) */  
-/* */  
-/* Compiler (created) : GCC 2.5.8 */  
-/* Compiler (env) : Linux 1..9 */  
-/* ANSI C Compatable : No */  
-/* POSIX Compatable : Yes? */  
-/* */  
-/* Purpose : Header file for unipowerd. */  
-/* : Contains the configuration information for */  
-/* : unipowerd. Edit this file as indicated */  
-/* : below to activate features and to customize */  
-/* : unipowerd for your UPS. */  
-/* */  
-/* Copyright : GNU Copyleft */  
-/************************************************************************/  
-/* The following are the RS232 control lines */  
-/* */  
-/* D D */  
-/* T C */  
-/* Macro English E E */  
-/* ---------------------------------------------- */  
-/* TIOCM_DTR DTR - Data Terminal Ready --> */  
-/* TIOCM_RTS RTS - Ready to send --> */  
-/* TIOCM_CTS CTS - Clear To Send <-- */  
-/* TIOCM_CAR DCD - Data Carrier Detect <-- */  
-/* TIOCM_RNG RI - Ring Indicator <-- */  
-/* TIOCM_DSR DSR - Data Signal Ready <-- */  
-#define HIGH (1)  
-#define LOW  
-#define PWRSTAT "/etc/powerstatus"  
-#define UPSSTAT "/etc/upsstatus"  
-/* CABLEPOWER is the line which provides power to */  
-/* the cable for normal monitoring activities. */  
-#define CABLEPOWER TIOCM_DTR  
-#define POWERBIT TIOCM_CAR  
-#define POWEROK HIGH  
-/* Define CABLECHECK as 1 to check for low battery */  
-/* Define CABLECHECK as 0 value to skip */  
-#define CABLECHECK  
-#define CABLEBIT TIOCM_RNG  
-#define CABLEOK HIGH  
-/* Define BATTCHECK as 1 to check for low battery */  
-/* Define BATTCHECK as 0 value to skip. */  
-#define BATTCHECK 1  
-#define BATTBIT TIOCM_CTS  
-#define BATTOK HIGH  
-/* Define INVERTERKILL as 1 to hndle killing the inverter */  
-/* Define INVERTERKILL as 0 value to skip. */  
-/* INVERTERBIT is the line which will kill the inverter */  
-/* while the UPS is in powerfail mode. */  
-/* INVERTERTIME is the time in seconds to hold the line */  
-/* defiined by INVERTERBIT high to kill the inverter. */  
-#define INVERTERKILL 1  
-#define INVERTERBIT TIOCM_RTS  
-#define INVERTERTIME 5  
-/************************************************************************/  
-/* End of File unipowerd.h */  
-/************************************************************************/  
-I'm aware that current name of the package is genpower. I haven't try it yet as  
-see no reason to switch to the new version meantime; the former seems to work  
-very stable. Nevertheless, here is the add-on for genpower-1..1's genpowerd.h  
-file (hopefully, I "translated" unipowerd.h correctly):  
-Add-on for genpower-1..1's genpowerd.h file:  
-/* Evgeny's Sustainer S-40A */  
-{"sustainer", {TIOCM_DTR,}, {TIOCM_RTS,1}, 5, {TIOCM_CAR,}, {TIOCM_CTS,},  
-{,}}  
-Evgeny  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!!8.6 Systel  
-  
-  
-  
-Another Israeli company. I never ended up purchasing a UPS from  
-them, but they were very good about getting me detailed documentation  
-on their communication port. It should be easy enough to control  
-their UPS. Their phone number is 972-8-409-019 (972-8-407-216 for  
-fax).  
-  
-  
-  
-  
-!!8.7 Deltec Power, Fiskars Power Systems and Exide.  
-  
-  
-  
-  
-Fiskars is a Finnish holding  
-company. They used to own  
-Deltec Power. In March of 1996 Fiskars sold  
-Deltec Power to  
-Exide Electronics Group. At that time, Deltec Power was one  
-of the world's largest makers of UPSs.  
-  
-  
-Under Fiskars, Deltec used to make the !PowerServers 10, 20, 30, and  
-40. The Deltec Power home page mentions other UPSs.  
-  
-  
-Exide now bundles UPS control software with their UPSs that works  
-under Linux. They also sell the software separately. They say that  
-their software works with other UPSs too.  
-  
-  
-I'd like to hear from people using their software.  
-  
-  
-Here's the advertisement they emailed me:  
-  
-  
-Exide Electronics announces !LanSafe III UPS Power Management Software for  
-Linux.  
-  
-  
-!LanSafe III is a UPS Power Management application. It provides automatic  
-orderly shutdown functionality incase of an extended power failure that  
-should outlast the UPS battery run time.  
-  
-  
-!LanSafe III enables broadcast messages and e-mail to be sent according to  
-user defined power condition changes. The shutdown procedure can also be  
-customized.  
-  
-  
-!LanSafe III works together with the vast majority of all Exide Electronics  
-UPS models. It goes even one step further by supporting basic shutdown  
-functionality also with other manufacturers UPSs.  
-  
-  
-!LanSafe III for Linux runs on Intel based Linux systems. Both character  
-based and X11/Motif based user interfaces are provided.  
-  
-  
-!LanSafe III supports all the major OS platforms: Linux, IBM AIX, HP UX,  
-Digital UNIX, SCO UNIX, Solaris, SunOS, AT&T UNIX, all Windows platforms,  
-OS/2,  
-Novell and Macintosh among others.  
-  
-  
-!LanSafe III is bundled with the following Exide Electronics UPSs: OneUPS  
-Plus, NetUPS, !PowerWare Prestige, !PowerWare Profile, !PowerWare Plus 5xx.  
-  
-  
-It also ships with FPS Power Systems UPSs: !PowerRite Plus, !PowerRite Max,  
-!PowerWorks A30, !PowerWorks A40, Series 9000 and Series 10000.  
-  
-  
-It is also possible to purchase a separate software license to use with a  
-previous UPS model or an other manufactures UPS. Regular licenses are  
-S$149, with site licenses also available.  
-  
-  
-For details please visit our Web sites at www.exide.com, www.fiskarsUPS.com  
-and www.deltecpower.com.  
-  
-  
-Incidentally, when I tried to connect to www.fiskarsUPS.com, it  
-prompted me for a username and password.  
-  
-  
-  
-  
-  
-  
-  
-!!8.8 Beaver model UB500 UPS  
-  
-  
-  
-dan@fch.wimsey.bc.ca (Dan Fandrich) writes:  
-  
-  
-  
-  
-  
-I seem to have gotten my old Beaver model UB500 UPS working with genpower.  
-The interface uses RS-232 compatible voltage levels, so installing it is a  
-snap. There is a DE-9 female connector on the back which plugs directly  
-into a 9-pin PC serial port using a plain 9-pin video monitor extension  
-cable.  
-  
-  
-  
-  
-  
-The DIP switches allow quite versatile pinouts. To emulate genpower's  
-apc1-nt type of UPS, they must be set as follows:  
-  
-  
-  
-  
-  
-  
-1 on (CTS = power fail)  
-2 off (CTS = low battery)  
-3 off (DSR = power fail)  
-4 off (DSR = low battery)  
-5 off (CD = power fail)  
-6 on (CD = low battery)  
-7 off (RI = power fail)  
-8 off (RI = low battery)  
-9 on (DTR = inverter off)  
-10 off (RTS = inverter off)  
- DIP switch SW601 for Beaver model UB500 UPS.  
-  
-  
-  
-The switches form groups of adjacent pairs for each output pin. They  
-are mutually exclusive--don't try to turn on both switch 5 and 6  
-simultaneously, for example, or you'll be shorting the low battery and  
-power fail signals.  
-  
-  
-That's all there is to it. Feel free to add this do your documentation.  
-  
-  
-  
-  
-  
-  
-  
-!!8.9 Sendom  
-  
-  
-  
-Documentation on using the Sendom UPS.  
-  
-  
-  
-  
-  
-  
-  
-  
-From: charli <mefistos@impsat1.com.ar>  
-To: hjstein@math.huji.ac.il  
-Subject: ups howto contribution  
-Date: Wed, 13 Nov 1996 19:07:41 -0200  
-hjstein@math.huji.ac.il  
-sir:  
-i connected a sendom ups with the help of your UPS-howto and man powerd  
-and discovered something useful. perhaps this thing extends to some  
-other ups.  
-im using slackware 3.0 distribution. i has the soft configuration in  
-/etc/inittab already done. its only needed to add the /rc.local powerd  
-/cuaX  
-i used the man powerd diagram:  
-9pin 25pin  
-DTR 4 20 ---------  
-| >  
-DSR 6 6 -- < 10k  
->  
-DCD 1 8 -------------------------  
-relais  
-GND 5 7 -------------------------  
-the fact is that the sendom ups dont use relais but some electronic  
-solid state device, and it works one way BUT NO THE OTHER. so if you  
-make the cable and doesnt work, first try inverting the cable in the  
-ups "relais"  
-i hope this can be useful, if you want to include this somewhere, feel  
-free to correct my english. please aknowledge this mail even with an  
-empty  
-mail so i know it arrived  
-end  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!!8.10 Best  
-  
-  
-  
-  
-  
-  
-Information on Best UPSs is available on at the  
-Best Power website. Their website  
-includes the checkups.tar (section  
-Software) package  
-for communicating with Best UPSs, both in smart mode and in dumb mode,  
-and it includes source code, so you can compile it under Linux.  
-  
-  
-  
-  
-!Best Fortress - Using Best's software  
-  
-  
-  
-  
-  
-Linux Best Power UPS Mini-HOWTO  
-by Michael Stutz (  
-stutz@dsl.org, and  
-http://dsl.org/m/)  
-v1., 14 Aug 97  
-  
-  
-  
-  
-  
-.0 Disclaimer  
-  
-  
-Copyright 1997 by Michael Stutz; this information is free; it may be  
-redistributed and/or modified under the terms of the GNU General Public  
-License, either Version 2 of the License, or (at your preference) any later  
-version, and as long as this sentence remains; this information comes  
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  
-or FITNESS FOR A PARTICULAR PURPOSE; see the GNU General Public License for  
-more details.  
-  
-  
-  
-  
-  
-1.0 Introduction  
-  
-  
-  
-Best Power are the makers  
-of high quality UPS products, with their Fortress line in particular  
-being well-suited for typical Linux users. Although their products are  
-not currently priced as low as some (such as APC), Best Power provide  
-source code for their UPS software and have been very respondent to  
-queries from Linux users. Furthermore, their hardware seems to be  
-highly regarded, making Best Power a winning choice for Linux users.  
-  
-  
-This document describes the installation of a Best Power Fortress  
-UPS (model used was a 1996-model 660a with accompanying Best Power  
-CD-ROM) to a Linux box.  
-  
-  
-  
-  
-  
-2.0 Installation  
-  
-  
-  
-  
-  
-2.1 Hardware  
-  
-  
-Install the hardware as indicated in the instructions. The Best Power  
-``Fortress'' series comes with an RS-232 cable that should attach to a spare  
-serial port on the back of the computer.  
-  
-  
-  
-  
-  
-2.2 Software  
-  
-  
-This is where it differs from the manual, which does not currently have  
-Linux-specific instructions. The accompanying Fortress CD-ROM, however, does  
-come with source code for the UPS software, so getting it up and running on  
-a Linux system is a trivial task.  
-  
-  
-To do this, follow these steps, and use the manual as a reference to  
-get an overall feel for how the software works. I took the liberty of  
-making a few changes in this HOWTO from the way the Fortress software  
-is set up on other UNIX systems that I feel are better suited for a  
-Linux system. For example, I eliminated the need for an  
-/etc/best directory and put the executables in  
-/usr/local/sbin, which I feel is a more appropriate place.  
-  
-  
-  
-  
-  
-****First, create the "upsdown" script that is executed during a  
-power outage. This one will halt the system:  
-  
-  
-cat > /etc/upsdown << EOF  
-#!/bin/sh  
-shutdown -h now < /dev/console &  
-EOF  
-  
-  
-  
-****  
-  
-****Now, make directories for the documentation and the source code:  
-  
-  
-mkdir /usr/doc/best  
-mkdir /usr/local/src/best  
-  
-  
-  
-****  
-  
-****Mount the CD-ROM, and untar the unix/checkups.tar file into the /tmp  
-directory or somewhere similar:  
-  
-  
-cd /tmp  
-tar /cdrom/unix/checkups.tar  
-  
-  
-  
-****  
-  
-****Change into the etc/best/advanced directory that should have been  
-extracted from the checkups tarball.  
-  
-****  
-  
-****Copy the documentation and UPS script files to their proper place in the  
-sytem:  
-  
-  
-cp README /usr/doc/best  
-cp manual.txt /usr/doc/best  
-cp bestsend /etc  
-cp source/*.c /usr/local/src/best  
-  
-  
-  
-****  
-  
-****Clean up the /tmp mess and compile the software:  
-  
-  
-cd /usr/local/src/best  
-rm -R /tmp/etc  
-gcc -o checkups checkups.c  
-gcc -o mftalk mftalk.c  
-mv checkups /usr/local/sbin  
-mv mftalk /usr/local/sbin  
-  
-  
-  
-****  
-  
-****Test the UPS. Replace ttySx with the serial port of your choice. If you  
-have a good connection, you should see a row of characters print across the  
-screen:  
-  
-  
-mftalk /dev/ttySx  
-  
-  
-  
-****  
-  
-****Make the checkups program run at startup for testing. This can be done in  
-several different ways (described in the manual). The way I did it is by  
-adding this line to /etc/inittab:  
-  
-  
-ups:234:once:/usr/local/sbin/checkups -c500 /dev/ttyS1  
-  
-  
-  
-****  
-  
-****Test it. Do this by taking out power to UPS by pulling out the fuse  
-connected to the UPS, and wait a couple of minutes. It print a warning  
-messages and then halt the system after a few mintues.  
-  
-****  
-  
-****If that works, take out the "-c500" from the line in your inittab (which  
-basically means shut down the system right away instead of when the UPS  
-power runs out), and you're good to go!  
-  
-****  
-  
-  
-  
-3.0 Conclusions  
-  
-  
-I welcome suggestions for improving this document or the techniques  
-described herein. As of this writing, Best Power seemed interested in  
-including this or other information in their documentation to help Linux  
-users with their product, so this is definitely a company to support. Let  
-them know how you feel at  
-sales@bestpower.com and  
-support@bestpower.com.  
-  
-  
-  
-  
-!Best Fortress LI-950  
-  
-  
-Some comments on the Best Fortress.  
-  
-  
-  
-  
-  
-  
-  
-  
-From lnz@dandelion.com Wed May 31 19:53:09 1995  
-Newsgroups: comp.os.linux.hardware  
-Subject: Re: UPS for use with Linux?  
-From: Leonard N. Zubkoff <lnz@dandelion.com>  
-Date: 25 May 1995 16:27:55 -0700  
-Organization: Dandelion Digital  
-NNTP-Posting-Host: dandelion.com  
-NNTP-Posting-User: root  
-In-reply-to: nautix@community.net's message of 23 May 1995 09:41:40 -0700  
-In article <3pt384$sic@odin.community.net> nautix@community.net writes:  
-Ditto what Craig says. APC was very uncooperative, but I have only  
-good things to say about Best. I use their Fortress LI 660 model;  
-660 VA, lots of status features on the front, etc. The CheckUPS  
-software costs extra and needs some hacking to fit into my  
-FSSTND-ish file system (the directories and file names are hard-coded  
-to fit into SunOS 4.1.x). I'd be happy to send you my diffs, if  
-you want them. (I love it when a vendor ships the source as  
-a normal business practice!)  
-The CheckUPS software is limited to doing automagic shutdowns, though.  
-The UPS can give lots of status information; CheckUPS only asks for  
-``If the power has failed, how much battery time remains?''  
-Best follows up on their customer satisfaction cards, too.  
-I indicated that I was dissappointed that CheckUPS didn't do more  
-status reporting (like input voltage, output voltage, percent load,  
-etc.), which is available from the UPS. I asked for a the  
-spec on the interface lingo; they said ``sure'' and had it to me in  
-2 days, free. A full-featured UPS status checker is on my back burner.  
-Does anyone see a demand for such a utility?  
-Let me add yet another recommendation for Best Power. I just purchased a  
-Fortress LI-950, though I declined on the CheckUPS software. Unlike some  
-other brands, a simple three wire cable is all that's needed to connect the  
-Fortress to a serial port -- no need for pull-up circuitry in the cabling.  
-A few minutes hacking and I had program to act as both a shutdown monitor  
-daemon, and to kill the inverter output when the system is shutdown while  
-on battery power.  
-I may eventually want to use the smarter serial communication mode rather  
-than the simple contact mode, so I asked Best technical support for the  
-documentation, and it arrived today, a week after I called them. Once I  
-peruse the documentation I'll decide if a smarter interface is really  
-worthwhile, especially since at some point I'll need to shut down two  
-networked machines sharing the UPS.  
-Leonard  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!Best Ferrups  
-  
-  
-In addition to the doumentation and softare on Best's web site, you  
-could also use the bestups-.9.tar.gz (section  
-Software)  
-package. We've just started testing it with our 5kva FERRUPS.  
-  
-  
-The basic idea is that there are two modules. One which fields  
-information requests on a network port, relays those requests to the  
-UPS, and returns the results. The second module talks to the first,  
-interprets the results, and responds with either OK or FAIL.  
-  
-  
-This is sufficient to allow the powerd-2..tar.gz package  
-(section  
-Software) to do the rest of the work.  
-  
-  
-The details can be gotten from the bestups-.9.tar.gz package  
-(section  
-Software).  
-  
-  
-Incidentally, our 5kva Ferrups has performed flawlessly in keeping our  
-10 computers and 30 screens humming.  
-  
-  
-  
-  
-  
-  
-  
-!! 8.11 GPS1000 from ACCODATA  
-  
-  
-  
-  
-  
-  
->From hennus@sky.nl.mugnet.org Thu Mar 10 15:10:22 1994  
-Newsgroups: comp.os.linux.help  
-Subject: Re: auto-shutdown with UPS  
-From: hennus@sky.nl.mugnet.org (Hennus Bergman)  
-Date: Tue, 1 Mar 1994 22:17:45 GMT  
-Distribution: world  
-Organization: The Organization For Removal Of On-Screen Logos  
-In article <CRAFFERT.94Feb28125452@nostril.lehman.com>,  
-Colin Owen Rafferty <craffert@nostril.lehman.com> wrote:  
->I am about to buy an Uninterruptable Power Supply for my machine, and  
->I would like to get one that has the "auto-shutdown" feature.  
->  
-I just got one of those real cheap :-)  
-It's a GPS1000 by ACCODATA. Anybody know how good the output  
-signal of these things is? [[Don't have a scope myself :-(]  
->I assume that these each have some kind of serial connection that  
->tells the system information about it.  
->  
-I took it apart to find out how it worked. There were three optocouplers  
-(two output, one input) connected to a 9 pin connector at the back.  
-One turns on when the power fails, and goes off again when the power  
-returns. While the power is off, you can use the `input' to shut the  
-battery off. [[It releases the power-relay.] The third one is some kind  
-of feedback to tell that it did accepted the `shut-down command'.  
-I think the interface for my UPS was designed to be connected to TTL-level  
-signals, but with some resistors it could be connected to serial port.  
-It's wired in such a way that using a RS-232 port you cannot use both  
-output optocouplers; but the shutdown feedback is not necessary anyway,  
-just use the important one. ;-)  
-[[Note that it is possible to blow the transistor part in optocouplers  
-with RS-232 levels if you wire it the wrong way round ;-)]  
-I was hoping I would be able to connect it to my unused game port,  
-but that doesn't have an output, does it?  
-I'll probably end up getting an extra printer port for this.  
-Not all UPS' use optocouplers, some use simple relays, which are  
-less critical to connect, but of course not as `nice'.  
->Has anyone written a package that watches the UPS and does a shutdown  
->(or something) when the power is off?  
-!SysVinit-2.4 (and probably 2.5 as well) has a `powerd' daemon that  
-continually watches a serial port for presence of the CD (Carrier  
-Detect) line and signals init when it drops. Init then activates  
-shutdown with a time delay. If the power returns within a few minutes  
-the shutdown is cancelled. Very Nice.  
-The only problem I had with it is that it doesn't actually tell the  
-UPS to turn off when the shutdown is complete. It just sits there with  
-a root prompt. I'll probably write a small program to shut it down  
->from /etc/brc. RSN.  
-> Colin Rafferty, Lehman Brothers <craffert@lehman.com>  
-Hennus Bergman  
-  
-  
-  
-  
-  
-  
-!!8.12 !TrippLite BC750LAN (Standby UPS)  
-  
-  
-  
-Tom Webster (  
-webster@kaiwan.com, the author of the genpower package)  
-sent me information on the !TrippLite BC750LAN. If you have one of  
-these, your probably best off using his package.  
-  
-  
-  
-  
-  
-But, for completeness, here's his cable wiring diagram (done by trial  
-and error, and without documentation):  
-  
-  
-  
-  
-  
-UPS System  
-DB-25 DB-25  
-1 <--------------> 1 Ground  
-2 <--------------> 4 Power Fail  
-8 <--------------> 8 Sensing Circuit  
-3 <--------------> 2 Inverter Shutdown  
-20 <--------------> 22 Circuit  
-  
-  
-  
-  
-  
-  
-!!8.13 APC  
-  
-  
-  
-If the above plethora of APC packages doesn't get you running,  
-maybe the following sections will help.  
-  
-  
-  
-  
-!APC Back-UPS  
-  
-  
-There seems to be some controversy as to the accuracy of the  
-information here on APC Back-UPSs. So, please be careful. I'm  
-prefacing this section with one message of caution I received. It  
-might not make a lot of sense before the rest of this section is read,  
-but this way, at least you're more likely to see it. And again, since  
-I don't have any APC UPS units, I can't verify the accuracy of either  
-of these messages.  
-  
-  
-  
-  
-!A message of caution  
-  
-  
-  
-  
-  
-From ind43@sun1000.ci.pwr.wroc.pl Sun Oct 9 11:00:42 1994  
-Newsgroups: comp.os.linux.admin  
-Subject: BUPS-HOWTO warning  
-From: ind43@sun1000.ci.pwr.wroc.pl (Marek Michalkiewicz)  
-Date: 6 Oct 1994 18:38:15 GMT  
-Organization: Technical Univeristy of Wroclaw  
-NNTP-Posting-Host: ci3ux.ci.pwr.wroc.pl  
-X-Newsreader: TIN [[version 1.2 PL2]  
-If you want to connect the APC Back-UPS to your Linux box, this might  
-be of interest to you.  
-There is a good BUPS-HOWTO which describes how to do this. But it has  
-one "bug".  
-The RTS serial port signal is used to shut down the UPS. The UPS will  
-shut down only if it operates from its battery. The manual says that  
-the shutdown signal must be high for at least .5s. But few milliseconds  
-is enough, at least for my APC Back-UPS 600.  
-Using RTS to shut down the UPS can be dangerous, because the RTS goes  
-high when the serial device is opened. The backupsd program then turns  
-RTS off, but it is on (high) for a moment. This kills the power when  
-backupsd is first started and there is a power failure at this time.  
-This can happen for example when the UPS is shut down, unattended,  
-and the power comes back for a while.  
-Either start backupsd before mounting any filesystems for read-write,  
-or (better) use TX (pin 3) instead of RTS (pin 7) to shut down the  
-UPS (pin numbers are for 9-pin plug). Use ioctl(fd, TCSBRKP, 10);  
-to make TX high for one second, for example. Using TX should be safe.  
-Maybe I will post the diffs if time permits...  
--- Marek Michalkiewicz  
-ind43@ci3ux.ci.pwr.wroc.pl  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!BUPS-HOWTO  
-  
-  
-Luminated Software Group Presents  
-  
-  
-HOWTO use Back-UPS (by APC)  
-(to keep your linux box from frying)  
-  
-  
-  
-  
-  
-Version: 1.01 BETA  
-  
-  
-  
-  
-  
-  
-  
-  
-Document by: Christian G. Holtje <docwhat@uiuc.edu>  
-Cabling info and help: Ben Galliart <bgallia@orion.it.luc.edu>  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-This document, under one condition, is placed in Public Domain. The  
-one condition is that credit is given where credit is due. Modify this as  
-much as you want, just give some credit to us who worked.  
-  
-  
-*******************************************************************************  
-Warning!  
-I, nor any of us who have written or helped with this document, make  
-and guarantees or claims for this text/source/hints. If anything is damaged,  
-we take NO RESPONSIBILITY! This works to the BEST OF OUR KNOWLEDGE, but  
-we may have made mistakes. So be careful!  
-*******************************************************************************  
-  
-  
-Al right, you just bought (or are going to buy) a Back-UPS from APC.  
-(Other brands might be able to use this info, with little or no modification,  
-but we don't know) You've looked at the price of the Power-Chute  
-software/cabling, and just are not sure it's worth the price. Well, I made my  
-own cable, and my own software and am using it to automatically shut off the  
-power to my linux box when a power failure hits. Guess what? You can too!  
-  
-  
-*** The Cable ***  
-  
-  
-  
-  
-  
-This was the hardest part to figure out (I know little about hardware,  
-so Ben did the most work for this). To build one, you need to buy from your  
-local radio shack (or other part supplier) this stuff:  
-  
-  
-  
-  
-  
-1 9-Position Male D-Subminature Connector (solder-type)  
-[[Radio Shack cat. no. 276-1537c]  
-1 9-Position Female D-Subminature Connector (solder-type)  
-[[Radio Shack cat. no. 276-1538c]  
-2 casings for the above plugs (usually sold separately)  
-Some stranded wire (wire made of strands, not solid wire)  
-  
-  
-  
-  
-You also need, but may be able to borrow:  
-  
-  
-1 soldering iron  
-solder  
-  
-  
-  
-  
-Okay...this is how you connect it up!  
-  
-  
-These diagrams are looking into the REVERSE SIDE (the side where you solder  
-the wire onto the plugs) The letters G, R, and B represent the colors of the  
-wires I used, and help to distinguish one line from the next.  
-(NOTE: I'm use standard rs-232 (as near as we can tell) numbering. The APC  
-book uses different numbers. Ignore them! Use ours...I already changed the  
-numbers for you!)  
-  
-  
-  
-  
-  
---------------------- Male Side! (This goes into the UPS)  
-\ B R * * * /  
-\ * * * G /  
-------------  
---------------------- Female Side! (This goes into your COM port)  
-\ R * * * G /  
-\ * B * * /  
-------------  
-  
-  
-  
-  
-For those who like the numbers better:  
-  
-  
-  
-  
-  
-Male Female  
----------------------------------------  
-1 7 Black  
-2 1 Red  
-9 5 Green  
-  
-  
-  
-  
----------Aside: What the rs-232 pins are for!-----------  
-Since we had to dig this info up anyway:  
-  
-  
->From the REAR (the soldering side) the pins are numbered so:  
-  
-  
-  
-  
-  
----------------------  
-\ 1 2 3 4 5 /  
-\ 6 7 8 9 /  
-------------  
-  
-  
-  
-  
-The pins mean:  
-  
-  
-  
-  
-  
-Number Name Abbr. (Sometimes written with D prefix)  
-1 Carrier Detect CD  
-2 Receive Data RD  
-3 Transmit Data TD(?)  
-4 Data Terminal Ready DTR  
-5 Signal Ground Gnd  
-6 Data Set Ready DSR  
-7 Request to Send RTS(?)  
-8 Clear to Send CS  
-9 Ring Indicator RI  
-  
-  
-  
-  
-What we did is connect the UPS's RS-232 Line Fail Output to the CD, the UPS's  
-chassis to Gnd, and the UPS's RS-232 Shut Down Input to RTS.  
-Easy now that we told you, no?  
-  
-  
-I have no idea if the software below will work, if you purchase the cable  
-from APC. It might, and it might not.  
-  
-  
-  
-  
-  
-*** The Software ***  
-  
-  
-Okay, I use the SysVInit package by Miquel van Smoorenburg for Linux.  
-(see end for file locations, credits, email addresses, etc.) I don't know  
-what would have to be changed to use someone elses init, but I know this code  
-(following) will work with Miquel's stuff.  
-Just so I give credit where credit's due. I looked at Miquel's code  
-to figure out how ioctl()'s worked. If I didn't have that example, I'd have  
-been in trouble. I also used the powerfail() routine (verbatim, I think),  
-since it must interact with his init, I thought that he should know best.  
-The .c file is at the end of this document, and just needs to be  
-clipped off. To clip the file, edit away and extra '.sigs' and junk. This  
-document should end on the line /* End of File */.....cut the rest.  
-  
-  
-This program can either be run as a daemon to check the status of the  
-UPS and report it to init, or it can be run to send the kill-power command  
-to the UPS. The power will only be killed if there is a power problem, and  
-the UPS is running off the battery. Once the power is restored, it turns back  
-on.  
-  
-  
-To run as a daemon, just type:  
-backupsd /dev/backups  
-  
-  
-/dev/backups is a link to /dev/cua0 at the moment (COM 1, for you DOSers).  
-The niceness of the link is that I can just re-link the device if I change  
-to com 2 or 3.  
-  
-  
-Then, if the power dies init will run the commands for the powerwait.  
-An example (This is from my /etc/inittab):  
-  
-  
-  
-  
-  
-#Here are the actions for powerfailure.  
-pf::powerwait:/etc/rc.d/rc.power start  
-po::powerokwait:/etc/rc.d/rc.power stop  
-  
-  
-  
-  
-  
-  
-  
-The powerwait will run, if the power goes down, and powerokwait will  
-run if the power comes back up.  
-  
-  
-  
-  
-  
-Here is my entire rc.power:  
-  
-  
-  
-  
-  
-#! /bin/sh  
-#  
-# rc.power This file is executed by init when there is a powerfailure.  
-#  
-# Version: @(#)/etc/rc.d/rc.power 1.50 1994-08-10  
-#  
-# Author: Christian Holtje, <docwhat@uiuc.edu>  
-#  
-# Set the path.  
-PATH=/sbin:/etc:/bin:/usr/bin:/sbin/dangerous  
-# Find out how we were called.  
-case "$1" in  
-start)  
-echo "Warning there is Power problems." | wall  
-# Save current Run Level  
-ps | gawk '{ if (($5 == "init") && ($1 == "1")) print $6 }' \  
-| cut -f2 -d[[ | cut -f1 -d] \  
-> /tmp/run.level.power  
-/sbin/shutdown -h +1m  
-;;  
-stop)  
-echo "Power is back up. Attempting to halt shutdown." | wall  
-shutdown -c  
-;;  
-*)  
-echo "Usage: $0 [[start|stop]"  
-exit 1  
-;;  
-esac  
-  
-  
-  
-  
-  
-  
-  
-Pretty nifty, no? Actually, there is a problem here...I haven't had  
-time to figure it out...If there is a 'sh' wizard out there....  
-  
-  
-There is one little detail left, that is having the UPS turn off the power if  
-it was halted with the power out. This is accomplished by adding this line  
-into the end of your halt script:  
-  
-  
-  
-  
-  
-/sbin/backupsd /dev/backups killpower  
-  
-  
-  
-  
-This will only kill the power if there is no power being supplied to your  
-UPS.  
-  
-  
-  
-  
-  
-*** Testing the stuff ***  
-  
-  
-This is just a short section saying this:  
-  
-  
-BE CAREFUL!  
-  
-  
-I recommend backing up your linux partitions, syncing several times  
-before testing and just being careful in general. Of course, I'm just  
-recommending this. I wasn't careful at all, and had to clean my partition  
-several times testing my config. But it works. :)  
-  
-  
-  
-  
-  
-*** Where to Get It ***  
-  
-  
-Miquel van Smoorenburg's SysVInit can be gotten at:  
-  
-  
-sunsite.unc.edu:/pub/Linux/system/Daemons/!SysVinit-2.50.tgz  
-  
-  
-and a fix for some bash shells is right next-door as:  
-  
-  
-sunsite.unc.edu:/pub/Linux/system/Daemons/!SysVinit-2.50.patch1  
-  
-  
-As to getting this HOWTO, you can email me.  
-docwhat@uiuc.edu with the subject saying 'request'  
-and the keyword 'backups' in body of the letter.  
-(I may automate this, and other stuff)  
-  
-  
-*** Credit Where Credit's Due Dept. ***  
-  
-  
-Thanks to Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org>  
-for his wonderful SysVInit package and his powerd.c which helped me very much.  
-  
-  
-Christian Holtje <docwhat@uiuc.edu>  
-Documentation  
-backupsd.c (what wasn't Miquel's)  
-rc.power  
-  
-  
-Ben Galliart <bgallia@orion.it.luc.edu>  
-The cable  
-Information for the RS-232 standard  
-Lousy Jokes (none quoted here)  
-  
-  
-  
-  
-  
-  
-  
-  
-/* backupsd.c -- Simple Daemon to catch power failure signals from a  
-* Back-UPS (from APC).  
-*  
-* Parts of the code are from Miquel van Smoorenburg's powerd.c  
-* Other parts are original from Christian Holtje <docwhat@uiuc.edu>  
-* I believe that it is okay to say that this is Public Domain, just  
-* give credit, where credit is due.  
-*  
-* Disclaimer: We make NO claims to this software, and take no  
-* resposibility for it's use/misuse.  
-*/  
-#include <sys/types.h>  
-#include <sys/ioctl.h>  
-#include <fcntl.h>  
-#include <errno.h>  
-#include <stdlib.h>  
-#include <unistd.h>  
-#include <stdio.h>  
-#include <signal.h>  
-/* This is the file needed by SysVInit */  
-#define PWRSTAT "/etc/powerstatus"  
-void powerfail(int fail);  
-/* Main program. */  
-int main(int argc, char **argv)  
-{  
-int fd;  
-int killpwr_bit = TIOCM_RTS;  
-int flags;  
-int status, oldstat = -1;  
-int count = ;  
-if (argc < 2) {  
-fprintf(stderr, "Usage: %s <device> [[killpower]\n", argv[[]);  
-exit(1);  
-}  
-/* Open the the device */  
-if ((fd = open(argv[[1], O_RDWR | O_NDELAY)) < ) {  
-fprintf(stderr, "%s: %s: %s\n", argv[[], argv[[1], sys_errlist[[errno]);  
-exit(1);  
-}  
-if ( argc >= 3 && (strcmp(argv[[2], "killpower")==) )  
-{  
-/* Let's kill the power! */  
-fprintf(stderr, "%s: Attempting to kill the power!\n",argv[[] );  
-ioctl(fd, TIOCMBIS, &killpwr_bit);  
-/* Hmmm..... If you have a power outtage, you won't make it! */  
-exit();  
-}  
-else  
-/* Since we don't want to kill the power, clear the RTS. (killpwr_bit) */  
-ioctl(fd, TIOCMBIC, &killpwr_bit);  
-/* Become a daemon. */  
-switch(fork()) {  
-case : /* I am the child. */  
-setsid();  
-break;  
-case -1: /* Failed to become daemon. */  
-fprintf(stderr, "%s: can't fork.\n", argv[[]);  
-exit(1);  
-default: /* I am the parent. */  
-exit();  
-}  
-/* Now sample the DCD line. */  
-while(1) {  
-ioctl(fd, TIOCMGET, &flags);  
-status = (flags & TIOCM_CD);  
-/* Did DCD jumps to high? Then the power has failed. */  
-if (oldstat == 0 && status != ) {  
-count++;  
-if (count > 3) powerfail();  
-else { sleep(1); continue; }  
-}  
-/* Did DCD go down again? Then the power is back. */  
-if (oldstat > 0 && status == ) {  
-count++;  
-if (count > 3) powerfail(1);  
-else { sleep(1); continue; }  
-}  
-/* Reset count, remember status and sleep 2 seconds. */  
-count = ;  
-oldstat = status;  
-sleep(2);  
-}  
-/* Error! (shouldn't happen) */  
-return(1);  
-}  
-/* Tell init the power has either gone or is back. */  
-void powerfail(ok)  
-int ok;  
-{  
-int fd;  
-/* Create an info file needed by init to shutdown/cancel shutdown */  
-unlink(PWRSTAT);  
-if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= ) {  
-if (ok)  
-write(fd, "OK\n", 3);  
-else  
-write(fd, "FAIL\n", 5);  
-close(fd);  
-}  
-kill(1, SIGPWR);  
-}  
-/* End of File */  
-  
-  
-  
-  
-  
-  
-!More notes  
-  
-  
-  
-  
-  
-From ockers@carnot02.maem.umr.edu Mon Jan 16 15:27:29 1995  
-Newsgroups: comp.os.linux.hardware  
-Subject: Back-UPS, backupsd, and low battery signal  
-From: ockers@carnot02.maem.umr.edu (Jim Ockers)  
-Date: 12 Jan 1995 04:22:44 GMT  
-Reply-To: ockers@umr.edu  
-Organization: the all-male wasteland of Rolla, MO  
-NNTP-Posting-Host: carnot02.maem.umr.edu  
-X-Newsreader: TIN [[version 1.2 PL2]  
-Hello all,  
-I use the backupsd on my linux system and I like it a lot. I also  
-run Windows NT when I have to and it has a UPS daemon too. The pinouts  
-required by Windows NT are different from the ones you specify in the  
-program but that is easily changed since I have the source for your  
-program..  
-Anyways I was browsing through the Windows NT knowledge base (KB) and  
-found something interesting. If you look in the documentation for your  
-Back-UPS under "computer interface port" you will see that this UPS will  
-send a Low Battery signal at least two minutes before the battery fails.  
-At least the manual for my Back-UPS 400 says that...  
-However they also speak some Electrical Engineering gibberish ("Outputs ...  
-are actually open collector outputs which must be pulled up to a common  
-referenced supply no greater than +40 Vdc. The transistors are capable  
-of a maximum non-inductive load of 25mAdc.)  
-Well that means nothing to me, but what I discovered in the NT KB was  
-that it is possible to use the low battery signal in the same manner that  
-the other signals are used. The output from pin 5 on the UPS should go  
-to the pin on which you are reading the !LowBatt signal into the computer.  
-When that line goes high, the battery is running out of charge. When  
-the situation is normal, that line will be low. (Hi/Lo in a standard  
-RS-232 signal, just like the other lines.)  
-What they don't tell you in the APC manual, and they should, is that  
-you need to buy a 10 KOhm resistor (50 cents at Radio Shack) and connect  
-pins 5 and 8 on the UPS side using the resistor. Pin 8 provides the  
-"common referenced supply no greater than 40vdc". Here's how you would  
-make the cable (the 1st three lines are the same as the HOWTO):  
-PC side UPS side  
-pin 7 <------------------------------> 1 ShutDownUPS  
-1 <------------------------------> 2 !LineFail  
-5 <------------------------------> 4 (same as 9 ) GND  
-? your choice <-----------------> 5 !LowBatt  
-|  
-> 10  
-< KOhm  
-|  
-8  
-So then when the !LowBatt line is HIGH then the computer has 2 minutes  
-to shut down before the battery runs out.  
-This is not mentioned in the Back-UPS HOWTO nor is it addressed in the  
-backupsd source. However I would think that it would be a Good Thing  
-to have in there; especially since a power failure would not require  
-a shutdown unless the UPS batteries were low. In most cases it would  
-mean that the backupsd could send a warning to everyone if the !LineFails,  
-and give everyone a one (or two) minute warning when the batteries start  
-running down.  
-As far as I know this applies to all the APC Back-UPS and Smart-UPS  
-products. These instructions were for a Smart-UPS 900,1250, and 2000  
-according to the NT KB. However they have been tested with a Back-UPS  
-400 running Windows NT and everything works properly...  
-I'd sure like to have a backupsd that handled the !LowBatt situation too.  
-Does anyone feel like modifying the backupsd.c source so that it will do  
-this too? (I can't program in C yet...)  
-P.S. The APC manual says to use only pin 4 as the common and even though  
-in the diagram it says that pin 9 is connected to pin 4 you might want to  
-be sure and use pin 4 . This differs from the instructions in the HOWTO.  
-P.P.S. I mailed this to the Back-UPS HOWTO authors.  
---  
-Jim (ockers@umr.edu) Ask me about Linux!  
-http://www.umr.edu/~ockers/ - home page  
-  
-  
-  
-  
-  
-  
-  
-From: Peter Kammer <pkammer@liege.ICS.UCI.EDU>  
-To: "Harvey J. Stein" <hjstein@math.huji.ac.il>  
-cc: "Christian G. Holtje" <docwhat@uiuc.edu>  
-Subject: UPS-Howto--minor correction  
-Date: Mon, 07 Oct 1996 12:00:16 -0700  
-Mr. Stein,  
-Let me first thank you for putting together and maintaining the  
-Linux UPS-!HowTo document. I recently attached a APC Back-UPS 400 to a  
-a Linux box and the document turned out to be very helpful.  
-I would like to suggest a correction to the the text diagrams which  
-accompany the description in section 11.5.2. The diagrams are presented as  
-being the rear of the plug. This in mind, the diagram of the male is  
-backwards:  
---------------------- Male Side! (This goes into the UPS)  
-\ B R * * * /  
-\ * * * G /  
-------------  
-_From the rear_, the pins on the male connector are numbered  
-right-to-left. The correct diagram should be:  
---------------------- Male Side! (This goes into the UPS)  
-\ * * * R B /  
-\ G * * * /  
-------------  
-Similarly, the numbered diagram should be labeled as for the rear of the  
-female plug.  
----------------------  
-\ 1 2 3 4 5 /  
-\ 6 7 8 9 /  
-------------  
-The rear of the male is numbered the reverse:  
----------------------  
-\ 5 4 3 2 1 /  
-\ 9 8 7 6 /  
-------------  
-This caused us some confusion until we realized our mistake. With four  
-different configurations to be aware of (front, rear) x (male, female) it  
-is easy to get confused. Even now, reference in hand, I keep reexamining  
-my diagrams.  
-It might also be helpful to add a reference to the APC technical document  
-for the Back-UPS line which is available on-line at:  
-http://www.apcc.com/english/techs/techref4/224e.htm  
-Once we corrected our wiring, setting up the software was relatively simple  
-thanks to your documentation. We used the alternative (using TD to kill  
-the UPS power rather than RTS) wiring scheme and ran into few problems.  
-Your efforts in maintaining this information are much appreciated.  
-------------  
-Peter Kammer Dept. of Information and Computer Science  
-pkammer@ics.uci.edu University of California  
-http://www.ics.uci.edu/~pkammer/ Irvine, CA 92697-3425  
-  
-  
-  
-  
-  
-  
-!APC Back-UPS Pro 650  
-  
-  
-  
-  
-  
-From: Troy Muller <tmuller@agora.rdrop.com>  
-Sender: tmuller@napalm.it.wsu.edu  
-To: abel@netvision.net.il  
-Subject: APC Back-UPS Pro 650  
-Date: Sun, 06 Apr 1997 12:50:40 -0700  
-Dear Mr. Stein,  
-I have a Back-UPS Pro 650 from APC and finally got it working with a  
-standard APC cable.  
-I used cable number 940-0023A and Enhanced_APC_BackUPS software. My  
-only grudge is the software broadcasts every 2 seconds, but hacking the  
-dowall.c code to sleep 10 sec before broadcasting seems to limit it to  
-every 10 seconds with a 2-3 message queued to be printed (ie. much more  
-acceptable).  
-  
-  
-  
-  
-  
-  
-!APC Smart-UPS  
-  
-  
-Many people have APC Smart UPSs. There seem to be packages for using  
-them in smart modes (see the afore mentioned packages  
-Enhanced_APC_UPSD-v1.4.tar.gz, apcd-.5.tar.gz, and  
-smupsd-.7-1.i386.rpm described in section  
-Software). I  
-don't know how the support in each package is. It seems that APC  
-__still__ refuses to release the protocol for the ``smart'' mode  
-without a non-disclosure agreement, so everyone's left reverse engineering it.  
-  
-  
-The general consensus is to buy from a brand which does release the  
-information, such as Best.  
-  
-  
-Another possibility is to run the SCO Unix version of APC's Powerchute  
-UPS control software under Linux via the iBCS compatibility package.  
-I'm told by Clive A. Stubbings (  
-cas@vjet.demon.co.uk) that  
-this works nicely after some install script adjustments. He says that  
-the only problem is "the GUI stuff seems to have difficulty  
-controlling non-local UPSs across the net".  
-  
-  
-If you have an APC Smart-UPS, and you can't get any of the above  
-software to work in smart mode, you can still use it in dumb mode.  
-The following sections detail how to do that. In particular, I've  
-received messages from people regarding the Model 600, the Model 700,  
-and the model 1400. You'll probably have to hack powerd.c as  
-outlined in section  
-Reverse-engineering cables and hacking powerd.c.  
-  
-  
-  
-  
-!APC Smart-UPS, Model 600  
-  
-  
-  
-  
-  
-From dangit@netcom.com Mon Aug 22 10:16:23 1994  
-Newsgroups: comp.os.linux.misc  
-Subject: UPS Monitoring Cable For APC  
-From: dangit@netcom.com (Lam Dang)  
-Date: Fri, 19 Aug 1994 11:56:28 GMT  
-Organization: NETCOM On-line Communication Services (408 261-4700 guest)  
-X-Newsreader: TIN [[version 1.2 PL1]  
-[[Didn't make it the first time.]  
-A few netters have asked about UPS monitoring cables. This is what I  
-found when I made one for my APC Smart-UPS, Model 600. A disclaimer is in  
-order. This is just an experimenter's report; use it at your own risks.  
-Please read the User's Manual first, especially Section 6.4, Computer  
-Interface Port.  
-The cable is to run between a 9-pin female connector on the UPS and a  
-25-pin male connector on the PC. Since I cut off one end of a 9-pin  
-cable and replaced it with a 25-pin connector, I had to be VERY  
-CAREFUL ABOUT PIN NUMBERS. The 25-pin hood is big enough to contain a  
-voltage regulator and two resistors. I got all the materials (listed  
-below) from Radio Shack for less than 10 bucks. As required by Windows NT  
-Advanced Server 3.5 (Beta 2), the "interface" between the UPS connector  
-and the PC connector is as follows:  
-UPS (9-pin) PC (25-pin)  
-1 (Shutdown) 20 (DTR)  
-3 (Line Fail) 5 (CTS)  
-4 (Common) 7 (GND)  
-5 (Low Battery) 8 (DCD)  
-9 (Chassis Ground) 1 (Chassis Ground)  
-This is pretty straightforward. You can use UPS pin 6 instead of 3  
-(they're the inverse of each other). The complication is in pulling up  
-UPS open collector pins 3 (or 6) and 5.  
-This APC model provides an unregulated output of 24 Vdc at UPS pin 8. The  
-output voltage is available all the time (at least until some time after  
-Low Battery has been signalled). The supply is limited to 40 mA. To  
-pull up, UPS pin 8 is input to a +5 Vdc voltage regulator. The output of  
-the regulator goes into two 4.7K resistors. The other end of one  
-resistor connects both UPS pin 3 (Line Fail) and PC pin 5 (CTS). That  
-of the other resistor connects both UPS pin 5 (Low Battery) and PC pin 8  
-(DCD). The two resistors draw about 2 mA when closed.  
-Test your cable without connecting it to the PC. When the UPS is on  
-line, pins 5 (CTS) and 8 (DCD) at the PC end of the cable should be very  
-close to 5 Vdc, and applying a high to pin 20 (DTR) for 5 seconds should  
-have no effect. Now pull the power plug to put the UPS on battery. Pin  
-5 (CTS) should go down to zero Vdc, pin 8 (DCD) should stay the same at 5  
-Vdc, and applying a high to pin 20 (DTR), e.g., by shorting pins 8 and 20,  
-should shut down the UPS after about 15 seconds.  
-Keep the UPS on battery until Low Battery is lighted on its front panel.  
-Now pin 8 (DCD) should go down to zero Vdc too. Wait until the UPS  
-battery is recharged. Then connect your cable to the PC, disable the UPS  
-option switches by turning all of them ON, and run your favorite UPS  
-monitoring software.  
-For those who want to run it with Windows NT Advanced Server, the UPS  
-interface voltages are NEGATIVE for both power failure (using UPS pin 3)  
-and low battery conditions, and POSITIVE for remote shutdown. Serial  
-line parameters such as baud rate don't matter.  
-I haven't tested my cable with Linux powerd. When you do, please let us  
-know. I run NT as often as Linux on the same PC. I must conform to NT's  
-UPS scheme. Perhaps somebody can modify powerd to work with it and post  
-the source code here.  
-List of materials:  
-1 shielded D-sub connector hood (Radio Shack 276-1510)  
-1 25-pin female D-sub crimp-type connector (276-1430)  
-1 7805 +5Vdc voltage regulator (276-1770)  
-2 4.7K resistors  
-1 component perfboard (276-148)  
-1 cable with at least one 9-pin male connector.  
-You'll need a multimeter, a soldering iron, and a couple of hours.  
-Hope this helps.  
-Regards,  
---  
-Lam Dang  
-dangit@netcom.com  
-  
-  
-  
-  
-  
-  
-! APC Smart-UPS 700  
-  
-  
-Here're some details for running an APC Smart-UPS 700 in dumb mode.  
-  
-  
-It has a clever usage of a transistor in the cable so that the  
-UPS will turn off when the computer is turned off. And it includes a  
-powerd.c which also does a fast low battery shutdown.  
-  
-  
-Also, note that Markus' is also using init's new capabilities.  
-So we have here another illustration of how to use the new init  
-to your advantage.  
-  
-  
-  
-  
-  
-From: Markus Eiden <Markus@eiden.de>  
-Sender: eiden@eiden.de  
-To: "Harvey J. Stein" <abel@netvision.net.il>  
-Subject: Re: APC Smart-UPS  
-Date: Sun, 30 Mar 1997 16:21:05 +0200  
-I'm using an APC Smart-UPS 700 for my Linux box, running 2..21 on an  
-ASUS-Board.  
-To use some features of the UPS you need four things:  
-1) You have to build a RS232-cable with a small interface.  
-2) You need the powerd-source from the sysvinit-package (I use version 2.65  
-from Miquel van Smoorenburg). Then you have to patch his powerd.  
-3) You have to change your /etc/inittab  
-4) You need a script to run some commands if the power is down or battery  
-is low.  
-Some features:  
-When the power goes down, a script will start and a syslog-entry is done.  
-If the battery is low, an other script will start  
-(which shutdown your computer of course) and a syslog-entry is done.  
-If you shutdown your computer and the power is down, the UPS will be shut  
-down too.  
-1)Let's start with the cable:  
-================================  
-If you have a look at the back side of you UPS you will see a female  
-connector like this:  
-8 1: Shutdown the UPS when the power is down and  
-pin 1 is high.  
-X X X X 3: Goes low on "Linefail"  
-X X X X X 4: GND  
-5: Goes low on "Low battery"  
-1 3 4 5 8: +24V  
-On the other hand at the back side of your PC there exist a male  
-connector like this:  
-8 6 1: DCD  
-X X X X 4: DTR  
-X X X X X 5: GND  
-5 4 1 6: DSR  
-8: CTS  
-You have to build the following interface between these connectors:  
-PC UPS  
-#------------------ (8)  
-|  
-470 Ohm  
-|  
-#-----#-----#-----#-----#-----#----- ca. 9-12V  
-| | | | | |  
-47 3.3 3.3 3.3 1 470  
-kOhm kOhm kOhm kOhm kOhm Ohm  
-| | | | | |  
-(8) ------------------------# | |  
-| | | | |  
-(6) ------------#------------------------------------------- (5)  
-| | | |  
-(1) ------------------#------------------------------------- (3)  
-| | |  
-| C#------------------------- (1)  
-| -| |  
-| B/ |  
-(4) ------#-----12kOhm---------| |  
-\>E |  
-| |  
-(5)-----------------------------#-------#------------------- (4)  
--I use a "BC140" - transistor, but nearly any simple NPN-transistor  
-should work ;-)  
--The transistor works as an "inverter". If you shutdown your PC,  
-AND the power ist down, then pin 4(PC) goes low and 1(UPS) goes  
-high. This shuts down the UPS for saving batteries power.  
-2) The powerd-Source:  
-=======================  
-I patched the powerd-source very little (so it is really the source  
-of Miquel).  
-(a) Give an "alert" to the syslogd if 8(PC, CTS) is down (Cause  
-the cable is not connected)  
-(b) DCD droped to zero => power has failed => call powerfail()  
-=> Give INIT_CMD_POWERFAIL to the init-process  
-(c) DCD comes up again => power is back => call powerfail(1)  
-=> Give INIT_CMD_POWEROK to the init-process  
-(d) DSR and DCD are dropped to zero => power has failed and  
-battery is low => call powerfail(2) => Give  
-INIT_CMD_POWERFAILNOW to the init-process  
-Thats it.  
------------------------------->8---- Schnipp ----------------------------  
-/*  
-* powerd Monitor the DCD line of a serial port connected to  
-* an UPS. If the power goes down, notify init.  
-* If the power comes up again, notify init again.  
-* As long as the power is OK, the DCD line should be  
-* "HIGH". When the power fails, DCD should go "LOW".  
-* Powerd keeps DTR high so that you can connect  
-* DCD and DTR with a resistor of 10 Kilo Ohm and let the  
-* UPS or some relais pull the DCD line to ground.  
-* You also need to connect DTR and DSR together. This  
-* way, powerd can check now and then if DSR is high  
-* so it knows the UPS is connected!!  
-*  
-* Usage: powerd /dev/cua4 (or any other serial device).  
-*  
-* Author: Miquel van Smoorenburg, <miquels@drinkel.cistron.nl>.  
-* Some minor changes by Markus Eiden, <Markus@Eiden.de>  
-* for the APC-Smart-UPS-powerd.  
-*  
-* Version: 1.31, 29-Feb-1996.  
-*  
-* This program was originally written for my employer,  
-* ** Cistron Electronics **  
-* who has given kind permission to release this program  
-* for general puppose.  
-*  
-* Copyright 1991-1996 Cistron Electronics.  
-*  
-* This program is free software; you can redistribute it and/or  
-* modify it under the terms of the GNU General Public License  
-* as published by the Free Software Foundation; either version  
-* 2 of the License, or (at your option) any later version.  
-*  
-* Some minor changes for the APC-powerd by Markus Eiden  
-* Markus@Eiden.de  
-*/  
-/* Use the new way of communicating with init. */  
-#define NEWINIT  
-#include <sys/types.h>  
-#include <sys/stat.h>  
-#include <sys/ioctl.h>  
-#include <fcntl.h>  
-#include <errno.h>  
-#include <stdlib.h>  
-#include <unistd.h>  
-#include <stdio.h>  
-#include <signal.h>  
-#include <syslog.h>  
-#include <string.h>  
-#include "paths.h"  
-#ifdef NEWINIT  
-#include "initreq.h"  
-#endif  
-#ifndef SIGPWR  
-# define SIGPWR SIGUSR1  
-#endif  
-#ifdef NEWINIT  
-void alrm_handler()  
-{  
-}  
-#endif  
-/* Tell init the power has either gone or is back. */  
-void powerfail(ok)  
-int ok;  
-{  
-int fd;  
-#ifdef NEWINIT  
-struct init_request req;  
-/* Fill out the request struct. */  
-memset(&req, , sizeof(req));  
-req.magic = INIT_MAGIC;  
-/* INIT_CMD_* are definied in initreq.h *  
-* Have a look at init.c and /etc/inittab *  
-* *  
-* ok=0 -> INIT_CMD_POWERFAIL -> powerwait *  
-* ok=1 -> INIT_CMD_POWEROK -> powerokwait *  
-* ok=2 -> INIT_CMD_POWERFAILNOW -> powerfailnow */  
-switch (ok) {  
-case 0 : req.cmd = INIT_CMD_POWERFAIL;  
-/* Linefail -> warning */  
-break;  
-case 1 : req.cmd = INIT_CMD_POWEROK;  
-/* Power is back -> cancel warning */  
-break;  
-case 2 : req.cmd = INIT_CMD_POWERFAILNOW;  
-/* Linefail and !LowBatt -> reboot */  
-break;  
-}  
-/* Open the fifo (with timeout) */  
-signal(SIGALRM, alrm_handler);  
-alarm(3);  
-if ((fd = open(INIT_FIFO, O_WRONLY)) >=  
-&& write(fd, &req, sizeof(req)) == sizeof(req)) {  
-close(fd);  
-return;  
-}  
-/* Fall through to the old method.. */  
-#endif  
-/* Create an info file for init. */  
-unlink(PWRSTAT);  
-if ((fd = open(PWRSTAT, O_CREAT|O_WRONLY, 0644)) >= ) {  
-if (ok)  
-write(fd, "OK\n", 3);  
-else  
-write(fd, "FAIL\n", 5);  
-close(fd);  
-}  
-kill(1, SIGPWR);  
-}  
-/* Main program. */  
-int main(int argc, char **argv)  
-{  
-int fd;  
-int dtr_bit = TIOCM_DTR;  
-int flags;  
-int status, oldstat = -1;  
-int count = ;  
-int tries = ;  
-int powerfailed = ;  
-int rebootnow = ;  
-if (argc < 2) {  
-fprintf(stderr, "Usage: powerd <device>\n");  
-exit(1);  
-}  
-/* Start syslog. */  
-openlog("powerd", LOG_CONS|LOG_PERROR, LOG_DAEMON);  
-/* Open monitor device. */  
-if ((fd = open(argv[[1], O_RDWR | O_NDELAY)) < ) {  
-syslog(LOG_ERR, "%s: %s", argv[[1], sys_errlist[[errno]);  
-closelog();  
-exit(1);  
-}  
-/* Line is opened, so DTR is high. Force it anyway to be sure. */  
-/* USE: low Batt -> Reboot -> DTR goes low *  
-* transistor is open -> shutdown-pin of the UPS goes *  
-* high -> UPS goes down after about 20s. If there is a *  
-* linefail and the computer is off, the *  
-* UPS goes down. If the power is back, the *  
-* UPS goes on, the computer boots, and powerd *  
-* is startet. */  
-/* Verwendung: Die UPS meldet low Batt -> Reboot -> DTR geht *  
-* auf Low -> Transistor oeffnet -> Shutdown der UPS geht auf *  
-* High -> UPS schaltet sich nach circa 20s aus. Bei jedem *  
-* Linefail und ausgeschaltetem Computer, schaltet sich die *  
-* UPS aus. Kommt der Strom zurueck, dann schaltet sich die *  
-* UPS selbstaendig ein, der Computer bootet, und der powerd *  
-* wird gestartet. */  
-ioctl(fd, TIOCMBIS, &dtr_bit);  
-/* Daemonize. */  
-switch(fork()) {  
-case : /* Child */  
-closelog();  
-setsid();  
-break;  
-case -1: /* Error */  
-syslog(LOG_ERR, "can't fork.");  
-closelog();  
-exit(1);  
-default: /* Parent */  
-closelog();  
-exit();  
-}  
-/* Restart syslog. */  
-openlog("powerd", LOG_CONS, LOG_DAEMON);  
-syslog(LOG_INFO, "APCpowerd started...");  
-/* Now sample the DCD line. */  
-while(1) {  
-/* Get the status. */  
-ioctl(fd, TIOCMGET, &flags);  
-/* Check the connection: CTS should be high. */  
-tries = ;  
-/* TIOCM_*- have a look at .../ams/termios.h */  
-while((flags & TIOCM_CTS) == ) {  
-/* Keep on trying, and warn every two minutes. */  
-if ((tries % 60) == )  
-syslog(LOG_ALERT, "UPS connection error");  
-sleep(2);  
-tries++;  
-ioctl(fd, TIOCMGET, &flags);  
-}  
-if (tries > )  
-syslog(LOG_ALERT, "UPS connection OK");  
-/* Calculate present status. */  
-status = (flags & TIOCM_CAR);  
-/* Did DCD drop to zero? Then the power has failed. */  
-if (oldstat != 0 && status == ) {  
-count++;  
-if (count > 3) {  
-powerfailed = 1;  
-powerfail();  
-}  
-else {  
-sleep(1);  
-continue;  
-}  
-}  
-/* Did DCD come up again? Then the power is back. */  
-if (oldstat == 0 && status > ) {  
-count++;  
-if (count > 3) {  
-powerfailed = ;  
-/* eigentlich unnoetig: */  
-rebootnow = ;  
-powerfail(1);  
-}  
-else {  
-sleep(1);  
-continue;  
-}  
-}  
-/* Low battery and Linefail ? */  
-if (rebootnow==)  
-if (powerfailed==1)  
-if ((flags & TIOCM_DSR) == )  
-{  
-rebootnow=1;  
-powerfail(2);  
-}  
-/* Reset count, remember status and sleep 2 seconds. */  
-count = ;  
-oldstat = status;  
-sleep(2);  
-}  
-/* Never happens */  
-return();  
-}  
-------------------- schnap ------------ 8<-----------------------------  
-3) Change your inittab:  
-=========================  
-Init gets the INIT_CMDs and will start a script:  
-pf::powerwait:/sbin/init.d/powerfail start  
-pn::powerfailnow:/sbin/init.d/powerfail now  
-po::powerokwait:/sbin/init.d/powerfail stop  
-(Which means for example: if the power has failed (powerwait) start the  
-script /sbin/init.d/powerfail with the parameter "start".)  
-4) The powerfail-Script  
-========================  
------------------- 8< ------- schnipp ---------------  
-#! /bin/sh  
-# Copyright (c) 1997 Markus Eiden, Markus@Eiden.de  
-#  
-case "$1" in  
-start)  
-echo "THE POWER IS DOWN!" | wall  
-logger "Powerfail"  
-;;  
-now)  
-echo "BATTERY IS LOW! Shutdown in 1 minute" | wall  
-logger "Battery is low, shutdown in 1 minute"  
-sync  
-/sbin/shutdown -r -t 5 +1  
-;;  
-stop)  
-echo "THE POWER IS BACK!!" | wall  
-logger "Power is back"  
-/sbin/shutdown -c >/dev/null 2>/dev/null  
-;;  
-*)  
-echo "Usage: $0 {start|now|stop}"  
-exit 1  
-;;  
-esac  
-exit  
---------------------- >8 ----------- schnapp -------------  
-Well, that should be easy ;-)  
-You are ready now, but be careful: It works for me, but I really can't  
-guarantee that any of this will work for you.  
-Some advice at the end: If /sbin/init.d/powerfail shuts down your  
-PC then DTR goes down, so the shutdown pin (UPS) goes high.  
->From that time it takes about 20 or 30 seconds for the UPS to shut down.  
-It is your job to prevent your Linux-box from booting within these 20  
-seconds (in particular to mount the filesystem). On my system it was no  
-problem. There are four easy ways to prevent the PC from the fast booting:  
-1) The BIOS should do some routines (Like searching the number of  
-tracks of your floppydisk if you have one)  
-2) If you have LILO installed, tell him to wait.  
-3) You do nothing (like I did)  
-4) You buy some more memory so that counting the memory takes 30 seconds.  
-That should be about 1024 Megabytes ;-).  
-Markus Eiden  
-Markus@Eiden.de  
---  
------------------------------------------------------------------------  
-StR Dipl.-Ing. Markus Eiden \\:// Markus@eiden.de  
-Am alten Sportplatz 3 (o -) http://www.rp.schule.de/eiden/  
-D-67599 Gundheim ---ooO-(_)-Ooo--- NIC-HDL: ME256-RIPE  
-  
-  
-  
-  
-  
-  
-  
-  
-  
-!APC Smart-UPS 1400  
-  
-  
-Another day, another APC. This is for the Smart-UPS 1400, in dumb  
-mode.  
-  
-  
-  
-  
-  
-  
-  
-  
-From: "Slavik Terletsky" <ts@polynet.lviv.ua>  
-To: hjstein@math.huji.ac.il  
-Subject: my contribution to UPS HOWTO  
-Date: Mon, 27 Jan 1997 21:10:16 +0000  
-Hello  
-I just hacked ups daemon, if you want, you may enclose it  
-in your UPS HOWTO document (i used some info from).  
-Please replay.  
---  
-UPS daemon for FreeBSD (2.1.5 - tested).  
-Interacts with APC Smart-UPS 1400.  
-Connection scheme:  
-UPS (pin, signal name) PC (pin, signal name)  
----------------------- ---------------------  
-1 Shutdown >-----------> 4 Data Terminal Ready  
-2 Line Failed >-----------> 8 Clear To Send  
-4 Common >-----------> 5 Ground  
-5 Battery Low >--------+--> 1 Data Carrier Detector  
-8 Battery (+24V) >--|10K|-+  
-UPSD DESCRIPTION  
-usage: upsd <device> [[wait [[script]]  
-device - device name upsd interacts thru (e.g. /dev/cuaa1)  
-wait - time (secs) to wait before running script, (default value 0 sec).  
-script - system shutdown script (default /etc/rc.shutdown).  
-Actions:  
-upsd logs all the changes of UPS status (power {up,down}, battery {low,ok}).  
-When "power down" and "battery low" upsd activates UPS SHUTDOWN signal,  
-waits for a <wait> seconds, and then runs system shutdown script - <script>.  
-Script sample:  
-#!/bin/sh  
-# Script is executed when system is going down.  
-PATH=/sbin:/bin:/usr/sbin:/usr/bin  
-echo "System is going DOWN right NOW" | wall  
-reboot  
-Upsd source:  
-/* UPS daemon  
-* Copyright 1997 Slavik Terletsky. All rights reserved.  
-* Author: Slavik Terletsky <ts@polynet.lviv.ua>  
-* System: FreeBSD  
-*/  
-#include <stdio.h>  
-#include <stdlib.h>  
-#include <signal.h>  
-#include <syslog.h>  
-#include <unistd.h>  
-#include <varargs.h>  
-#include <fcntl.h>  
-#include <errno.h>  
-#include <sys/uio.h>  
-#include <sys/types.h>  
-#include <sys/ioctl.h>  
-#include <sys/ttycom.h>  
-int status;  
-int wait = ;  
-FILE *fd;  
-char *scr = "/etc/rc.shutdown";  
-char *idf = "/var/run/upsd.pid";  
-void upsterm();  
-void upsdown(int);  
-int main(int argc, char *argv[[]) {  
-int pd;  
-int zero = ;  
-char d5, d6, d7;  
-char low = ;  
-char pow = 1;  
-/* check arguments */  
-switch(argc) {  
-case 4:  
-scr = argv[[3];  
-case 3:  
-wait = atoi(argv[[2]);  
-case 2:  
-break;  
-default:  
-fprintf(stderr, "usage: %s <device> [[wait [[script]]\n", argv[[]);  
-exit(1);  
-}  
-/* check if script exists */  
-if(!(fd = fopen(scr, "r"))) {  
-fprintf(stderr, "fopen: %s: %s\n", scr, sys_errlist[[errno]);  
-exit(1);  
-}  
-fclose(fd);  
-/* check if upsd is already running */  
-if(fd = fopen(idf, "r")) {  
-fprintf(stderr, "fopen: %s: File already exists\n", idf);  
-exit(1);  
-}  
-/* become a daemon */  
-switch(fork()) {  
-case -1: /* error */  
-fprintf(stderr, "fork: %s\n", sys_errlist[[errno]);  
-exit(1);  
-case : /* child */  
-break;  
-default: /* parent */  
-exit();  
-}  
-/* save the pid */  
-if(!(fd = fopen(idf, "w"))) {  
-fprintf(stderr, "fopen: %s: %s\n", idf, sys_errlist[[errno]);  
-exit(1);  
-}  
-fprintf(fd, "%d\n", (int)getpid());  
-fclose(fd);  
-/* open monitor device */  
-if((pd = open(argv[[1], O_RDWR | O_NDELAY)) < ) {  
-fprintf(stderr, "open: %s: %s\n", argv[[1], sys_errlist[[errno]);  
-exit(1);  
-}  
-/* daemon is alive */  
-openlog("upsd", LOG_PID, LOG_DAEMON);  
-syslog(LOG_INFO, "daemon started");  
-/* signal reaction */  
-(void)signal(SIGTERM, upsterm);  
-/* monitor device */  
-while(1) {  
-/* clear bits */  
-if(ioctl(pd, TIOCMSET, &zero) < ) {  
-fprintf(stderr, "ioctl: %s\n", sys_errlist[[errno]);  
-exit(1);  
-}  
-/* get device status */  
-if(ioctl(pd, TIOCMGET, &status) < ) {  
-fprintf(stderr, "ioctl: %s\n", sys_errlist[[errno]);  
-exit(1);  
-}  
-/* determin status */  
-d5 = status & 0x20;  
-d6 = status & 0x40;  
-d7 = status & 0x80;  
-/* power up */  
-if(!(d7 + d5)) {  
-if(!pow) {  
-syslog(LOG_CRIT, "power up");  
-pow = 1;  
-}  
-/* power down */  
-} else {  
-if(pow) {  
-syslog(LOG_CRIT, "power down");  
-pow = ;  
-}  
-}  
-/* battery low */  
-if(!d6 && !low) {  
-syslog(LOG_ALERT, "battery low");  
-low = 1;  
-/* down ups */  
-if(!pow) {  
-upsdown(pd);  
-}  
-}  
-/* battery ok */  
-if(d6 && low) {  
-syslog(LOG_CRIT, "battery ok");  
-low = ;  
-}  
-sleep(1);  
-}  
-/* not reached */  
-return ;  
-}  
-void upsterm() {  
-/* log termination message */  
-syslog(LOG_INFO, "daemon terminated");  
-/* remove pid file */  
-unlink(idf);  
-exit();  
-}  
-void upsdown(int pd) {  
-/* log shutdown message */  
-syslog(LOG_ALERT, "system is going down");  
-/* remove pid file */  
-unlink(idf);  
-/* save our filesystem */  
-system("/bin/sync");  
-system("/bin/sync");  
-system("/bin/sync");  
-/* shutdown ups */  
-status = TIOCM_DTR;  
-if(ioctl(pd, TIOCMSET, &status) < ) {  
-fprintf(stderr, "ioctl: %s\n", sys_errlist[[errno]);  
-exit(1);  
-}  
-/* wait and then run script */  
-sleep(wait);  
-system(scr);  
-}  
-# Slavik Terletsky # University "Lvivska Poytechnika" #  
-# Network Administrator # mailto:ts@polynet.lviv.ua #  
-  
-  
-  
-  
-  
-  
-  
-  
-----  
-  
-!!9. How to shutdown other machines on the same UPS  
-  
-  
-Some people (myself included) have several computers running Linux  
-connected to one UPS. One computer monitors the UPS and needs to get  
-the other computers to shut down when the power goes out.  
-  
-  
-We assume the computers can communicate over a network. Call the  
-computer that monitors the UPS the master and the other computers  
-the slaves.  
-  
-  
-In the old days this required some fancy programming.  
-  
-  
-These days, the best thing to do is to pick up either the  
-powerd-2..tar.gz package or the upsd-1..tgz package (see  
-section  
-Software), and follow the instructions. Both are  
-able to run on the slaves in a mode where they connect over the  
-network to a powerd or upsd process running on the master to  
-query the status of the UPS. Some of the APC specific packages seem  
-to have this ability too.  
-  
-  
-Note, though, that if your network is insecure, you might want to add  
-a little security to this, lest someone spoof the slave powerd  
-processes into thinking that the power is out.  
-  
-  
-Another possibility is to go for SNMP (Simple Network Management  
-Protocol). Detailing the use of SNMP is beyond the scope of this  
-document, not to mention currently being beyond me .  
-----  
+Describe [HowToUPSHOWTO ] here.