Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > by-pkgid > 37e222326095a93978d54b1564dd9954 > files > 137

apcupsd-3.10.5-1mdk.ppc.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
        "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>
<TITLE>APC's smart protocol</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<h2 align="center">APC's smart protocol</h2>

<HR>
<h1>Credits</h1>
The APC UPS protocol was originally analyzed by Pavel Korensky
with additions from Andre H. Hendrick beginning in 1995, and 
we want to give credit for good, hard work, where credit is due. After having
said that, you will see that Steven Freed built much of the
orginal <b>apcupsd</b> information file. [Comment inserted by Riccardo Facchetti]<p>
The start of this chapter of the <b>apcupsd</b> manual in HTML format was pulled from the 
<a href="http://www.exploits.org/nut/library/apcsmart.html">Network UPS Tools (NUT)</a>
site. It has been an invaluable tool in improving <b>apcupsd</b>, and I
consider it the <b>Bible</b> of APC UPS programming. In the course of
using it, I have added information gleaned from <b>apcupsd</b> and information
graciously supplied by APC. Hopefully, the additions made herein can
benefit the original author and his 
<a href="http://www.exploits.org/nut">programming project</a>, and maybe
some day, the <b>Apcupsd</b> project and the <b>NUT</b> project can join
forces.
<H2>Description</H2>
Here's the information on the elusive APC smart signaling protocol used
by their higher end units (Back-UPS Pro, Smart-UPS, Matrix-UPS, etc).
What you see here has been collected from a variety of sources.  Some people
analyzed the chatter between PowerChute and their hardware.  Others sent
various characters to the UPS and figured out what the results meant.

<H2>RS-232 differences</H2>
Normal 9 pin serial connections have TxD on 3 and RxD on 2.  APC's smart
serial ports put TxD on pin 1 and RxD on pin 2.  This means you go nowhere
if you use a normal straight through serial cable.  In fact, you might even
power down the load if you plug one of those cables in.  This is due to 
the odd routing of pins - DTR and RTS from the PC usually wind up driving
the on/off line.  So, when you open the port, they go high and *poof* your
computer dies.
<P>
Originally this evil hack
was used to connect the UPS to the PC when this page was first being built.
As you can see, I cheated and neglected the ground (only 2 wires!) and 
it still worked.  This method can be used for playing around, but for
professional systems this is obviously not a viable option.
<P>
That hack didn't work out so well (damned cats), so it was retired quite
awhile back.  The most practical solution was to go out and BUY the 
DOS/Win version of PowerChute just for the black (smart) cable.  I recommend
doing the same thing if you actually care about this thing working properly.
Of course, if you have one of the newer packages that came with PowerChute,
you already have the cable you need. 

<h2>Diagram for cable hackers</h2>
If you are handy with cable creation tools, check out the
<A HREF="http://www.exploits.org/nut/library/940-0024C.jpg">940-0024C clone diagram</A>.  
That's the black &quot;smart&quot;
cable normally provided with APC models sold after 1996.  The loopback
pins on that diagram are used to keep PowerChute happy by allowing cable
detection.  If you use the <A HREF="http://www.exploits.org/nut/">NUT</A>
apcsmart driver, those pins don't matter.  
<P>
Many thanks to Steve Draper for providing this scan.
<p>For additional information on cables, see the <a href="cables.html">
cables section</a> of this manual.

<H2>The Smart Protocol</H2>
Despite the lack of official information from APC, this table has been 
constructed.  It's standard RS-232 serial communications at 2400 bps/8N1.
Don't rush the UPS while transmitting or it may stop talking to you.
This isn't a problem with the normal single character queries, but it
really does matter for multi-char things like &quot;@000&quot;.  Sprinkle a
few calls to usleep() in your code and everything will work a lot better.

<P>
The following table describes the single character <b>Code</b> or command
that you can send to the UPS, its meaning, and what sort of response the
UPS will provide. Typically, the response shown below is followed by a 
newline (\n in C) and a carriage return (\r in C). If you send the
UPS a command that it does not recognize or that is not available 
on your UPS, it will normally respond by &quot;NA&quot; for not available, otherwise
the response is given in the &quot;Typical results&quot; column.
<p>
<TABLE BORDER>
<TR><TH>Code<TH width="45%">Meaning<TH width="45%">Typical results</tr>
<TR><TD>^A<TD>Model string<TD>SMART-UPS 700</tr>
<TR><TD>^N<TD>Turn on UPS (send twice, with &gt; 1.5s delay between chars)<BR>Only on 3rd gen 
SmartUPS and Black Back-UPS Pros<TD>n/a</tr>
<TR><TD>^Z<TD>Permitted EEPROM Values<TD>A large string (254 chars) that gives the EEPROM
              permitted values for your model. For details see below.</tr>
<TR><TD>A<TD>Front panel test<TD>Light show + &quot;OK&quot; (and 2s beep)</tr>
<TR><TD>B<TD>Battery voltage<TD>Ranges - typical &quot;27.87&quot;</tr>
<TR><TD>C<TD>Internal temperature (degrees C)<TD>Ranges - typical &quot;036.0&quot;</tr>
<TR><TD>D<TD>Runtime calibration - runs until battery is below 25% (35% for Matrix)<BR>This updates the 'j' 
values - only works at 100% battery charge<BR>Can be aborted with a second "D"<TD>! when on battery, $ on line</tr>
<TR><TD>E<TD>Automatic self test intervals<TD>Default = 336 (336 hours = 14 days) (336=14 days, 168=7 days, ON=power on, OFF=never)</tr>
<TR><TD>F<TD>Line frequency, Hz<TD>60.00 (50.0 in Europe)</tr>
<TR><TD>G<TD>Cause of transfer<TD>R = unacceptable utility voltage rate of change, <br>H = high utility voltage,
           <br>L = low utility voltage, 
           <br>T = line voltage notch or spike, 
           <br>O = no transfers yet (since turnon), 
           <br>S = transfer due to serial port U command or activation of UPS test from front panel,
           <br>NA = transfer reason still not available (read again).
<TR><TD>K--K<TD>Shutdown with grace period (set with 'p') - need &gt; 1.5s between first and second K
                <TD>Matrix/3rd gen SmartUPS/Black Back-UPS Pros: &quot;OK&quot;, all others: &quot;*&quot;
<TR><TD>L<TD>Input line voltage<TD>Ranges - typical &quot;118.3&quot; or &quot;228.8&quot; in Europe
<TR><TD>M<TD>Maximum line voltage received since last M query<TD>Ranges - typical &quot;118.9&quot; or &quot;230.1&quot; in Europe
<TR><TD>N<TD>Minimum line voltage received since last N query<TD>Ranges - typical &quot;118.9&quot; or &quot;226.2&quot; in Europe
<TR><TD>O<TD>Output voltage<TD>Ranges - typical &quot;118.3&quot; or &quot;228.8&quot; in Europe
<TR><TD>P<TD>Power load % <TD>Ranges - typical &quot;011.4&quot; depends on what you have plugged in.
<TR><TD>Q<TD>Status flags<TD>Bitmapped, see below
<TR><TD>R<TD>Turn dumb<BR>Only on 3rd gen SmartUPS, SmartUPS v/s, BackUPS Pro<TD>&quot;BYE&quot;
<TR><TD>S<TD>Soft shutdown after 'p' delay, return online when power returns<BR>Only works when UPS is on battery<TD>OK
<TR><TD>U<TD>Simulate power failure<TD>!! when switching to battery, then $ when back on line
<TR><TD>V<TD>Old firmware revision<TD>&quot;GWD&quot; or &quot;IWI&quot; The last character indicates the locale (Domestic, International).
<TR><TD>W<TD>Self test (battery), results stored in &quot;X&quot;<TD>&quot;OK&quot;
<TR><TD>X<TD>Results of last self test<TD>&quot;OK&quot; - good battery, &quot;BT&quot; - failed due to 
insufficient capacity, &quot;NG&quot; - failed due to overload, &quot;NO&quot; - no results available 
(no test performed in last 5 minutes)
<TR><TD>Y<TD>Enter smart mode<TD>&quot;SM&quot;
<TR><TD>Z--Z<TD>Shutdown immediately (no delay)
 - need &gt; 1.5s between first and second Z <TD>N/A
<TR><TD>a<TD>Show protocol version.alert messages.valid commands (delimited by periods)
          <TD>&quot;3.!$%+?=#|.^A^N^Z+-789&lt;@ABCDEFGKLMNOPQRSUVWXYZ'abcefgjklmnopqrsuvzy~^?&quot; 
              - Link-Level.alert-messages.commands
<TR><TD>b<TD>Firmware revision<TD>&quot;50.9.D&quot; - 50 = SKU (variable length), 
              9 = firmware revision, D = country code (D=USA, I=International, A=Asia, J=Japan, M=Canada)
<TR><TD>c<TD>UPS local id<TD>UPS_IDEN (you can program any 8 characters here)
<TR><TD>e<TD>Return threshold<TD>% battery charge threshold for return 
              (00=00%, 01=15%, 02=25%, 03=90%)
<TR><TD>f<TD>Battery level %<TD>Ranges - typical &quot;100.0&quot; when fully charged as should normally be the case
<TR><TD>g<TD>Nominal battery voltage (not actual voltage - see B) <TD>&quot;012&quot; or &quot;024&quot; or &quot;048&quot;.
<TR><TD>h<TD>Measure-UPS: ambient humidity (%)<TD>&quot;nnn.n&quot; - percentage
<TR><TD>i<TD>Measure-UPS: dry contacts<TD>10 = contact 1, 20 = 2, 40 = 3, 80 = 4
<TR><TD>j<TD>Estimated runtime at current load (minutes)<TD>&quot;0112:&quot; (note, it is terminated with a colon)
<TR><TD>k<TD>Alarm delay<TD>0(zero) = 5 second delay after fail, T = 30 second delay, L = alarm at low battery only, N = no alarm
<TR><TD>l<TD>Low transfer voltage<TD>Default &quot;103&quot; or &quot;208&quot; in Europe
<TR><TD>m<TD>Manufacturing date<TD>Unique within groups of UPSes (production runs)
<TR><TD>n<TD>Serial number<TD>Unique for each UPS
<TR><TD>o<TD>Nominal Output Voltage<TD>The Nominal Output Voltage when running on batteries. Default &quot;115&quot; or &quot;230&quot; in Europe.
<TR><TD>p<TD>Shutdown grace delay, seconds<TD>Default &quot;020&quot; (020/180/300/600)
<TR><TD>q<TD>Low battery warning, minutes<TD>Default &quot;02&quot;
<TR><TD>r<TD>Wakeup delay (time) - seconds<TD>Default &quot;000&quot; (000/060/180/300)
<TR><TD>s<TD>Sensitivity<TD>&quot;H&quot; - highest, &quot;M&quot; - medium, &quot;L&quot; - lowest, &quot;A&quot; - autoadjust (Matrix only)
<TR><TD>u<TD>Upper transfer voltage<TD>Default &quot;132&quot; or &quot;253&quot; in Europe
<TR><TD>t<TD>Measure-UPS: ambient temperature (degrees C)<TD>&quot;nn.nn&quot;
<TR><TD>x<TD>Last battery change<TD>Eight characters. Varies typically dd/mm/yy - 31/12/99
<TR><TD>y<TD>Copyright notice<TD>&quot;(C) APCC&quot; - only works if firmware letter (from &quot;V&quot;) is later than O
<TR><TD>z<TD>Reset the EEPROM to factory settings (but not ident or batt replacement date)<BR>Not on SmartUPS v/s or BackUPS Pro<TD>&quot;CLEAR&quot;
<TR><TD>+<TD>Capability cycle<TD>Cycle forward through possible values (&quot;|&quot; from UPS afterward to confirm change). Do not use
             this unless you know how to program your UPS EEPROM or you may damage your UPS.
<TR><TD>-<TD>Capability cycle<TD>Cycle backward through possible values (&quot;|&quot; from UPS afterward to confirm change)Do not use
             this unless you know how to program your UPS EEPROM or you may damage your UPS.
<TR><TD>@nnn<TD>Shutdown (after delay 'p') with delayed wakeup of nnn tenths of an hour (after 'r' time)<TD>Matrix/3rd gen UPS: &quot;OK&quot;, others &quot;*&quot;
<TR><TD>0x7f (DEL key)<TD>Abort shutdown - use to abort @, S, K--K<TD>&quot;OK&quot;
<TR><TD>~<TD>Register #1<TD>See below
<TR><TD>'<TD>Register #2<TD>See below
<TR><TD>7<TD>Dip switch positions (if applicable)<TD>See below
<TR><TD>8<TD>Register #3<TD>See below
<TR><TD>9<TD>Line quality<TD>&quot;FF&quot; acceptable, &quot;00&quot; unacceptable
<TR><TD>&gt;<TD>Number of external battery packs attached<TD>SmartCell models: &quot;nnn&quot; where nnn is how many external 
packs are connected<BR>Non-SmartCell units: whatever has been set with &gt;+ and &gt;- by the user
<TR><TH COLSPAN=3>Matrix UPS (and possibly Symmetra) specific commands
<TR><TD>^<TD>Run in bypass mode<TD>If online, &quot;BYP&quot; is received as bypass mode starts<BR>
If already in bypass, &quot;INV&quot; is received and UPS goes online<BR>&quot;ERR&quot; received if UPS is unable to transfer
<TR><TD>&lt;<TD>Number of bad battery packs<TD>&quot;nnn&quot; - count of bad packs connected to the UPS
<TR><TD>/<TD>Load current<TD>&quot;nn.nn&quot; - true RMS load current drawn by UPS
<TR><TD>\<TD>Apparent load power<TD>&quot;nnn.nn&quot; - output load as percentage of full rated load in VA.
<TR><TD>^V<TD>Output voltage selection (editable)<TD>&quot;A&quot; - automatic according to input tap, &quot;M&quot; - 208 VAC, &quot;I&quot; - 240 VAC
<TR><TD>^L<TD>Front panel language<TD>&quot;E&quot; - English, &quot;F&quot; - French, &quot;G&quot; - German, &quot;S&quot; - Spanish, &quot;1&quot; &quot;2&quot; &quot;3&quot; &quot;4&quot; - ?
<TR><TD>w<TD>Run time conservation<TD>&quot;NO&quot; (disabled) or &quot;02&quot; &quot;05&quot; &quot;08&quot; - minutes of runtime to 
leave in battery (UPS shuts down &quot;early&quot;)
</TABLE>

<H2>Dip switch info</H2>
<TABLE BORDER=5 CELLPADDING=5>
<TR>
<TH>Bit
<TH>Switch
<TH>Option when bit=1
<TR><TD>0<TD>4<TD>Low battery alarm changed from 2 to 5 mins.  Autostartup disabled on SU370ci and 400
<TR><TD>1<TD>3<TD>Audible alarm delayed 30 seconds
<TR><TD>2<TD>2<TD>Output transfer set to 115 VAC (from 120 VAC) or to 240 VAC (from 230 VAC)
<TR><TD>3<TD>1<TD>UPS desensitized - input voltage range expanded
<TR><TD>4-7<TD>-<TD>Unused at this time
</TABLE>

<H2>Status bits</H2>
This is probably the most important register of the UPS,
which indicates the overall UPS status.
Some common things you'll see:
<UL>
<LI>08 = On line, battery OK
<LI>10 = On battery, battery OK
<LI>50 = On battery, battery low 
<LI>SM = Status bit is still not available (retry reading)
</UL>

<TABLE BORDER=5 CELLPADDING=5>
<TR><TH>Bit<th>Hex Bit<TH>Meaning
<TR><TD>0<td>0x01<TD>1 = Runtime calibration occurring
<BR>Not reported by Smart UPS v/s and BackUPS Pro
<TR><TD>1<td>0x02<TD>1 = SmartTrim
<BR>Not reported by 1st and 2nd generation SmartUPS models
<TR><TD>2<td>0x04<TD>1 = SmartBoost
<TR><TD>3<td>0x08<TD>1 = On line (this is the normal condition)
<TR><TD>4<td>0x10<TD>1 = On battery
<TR><TD>5<td>0x20<TD>1 = Overloaded output
<TR><TD>6<td>0x40<TD>1 = Battery low
<TR><TD>7<td>0x80<TD>1 = Replace battery
</TABLE>

<H2>Alert messages</H2>
These single character messages are sent by the UPS any time
there is an Alert condition. All other responses indicated 
above are sent by the UPS only in response to a query or
action command.
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH>Character<TH>Description
<TR>
<TD>!
<TD>Line Fail - sent when the UPS goes on-battery, repeated every 30 seconds
until low battery condition reached.  Sometimes occurs more than once in the
first 30 seconds.
<TR>
<TD>$
<TD>Return from line fail - UPS back on line power, only sent if a ! has been
sent.
<TR>
<TD>%
<TD>Low battery - Sent to indicate low battery, but not on SmartUPS v/s or
BackUPS Pro models
<TR>
<TD>+
<TD>Return from low battery - Sent when the battery has been recharged to
some level only if a % has been sent previously
<TR>
<TD>?
<TD>Abnormal condition - sent for conditions such as &quot;shutdown due to overload&quot;
or &quot;shutdown due to low battery capacity&quot;.  Also occurs within 10 minutes of
turnon.
<TR>
<TD>=
<TD>Return from abnormal condition - Sent when the UPS returns from an
abnormal condition where ? was sent, but not a turn-on.  Not implemented
on SmartUPS v/s or BackUPS Pro models.
<TR>
<TD>*
<TD>About to turn off - Sent when the UPS is about to switch off the load.
No commands are processed after this character is sent.  Not implemented
on SmartUPS v/s, BackUPS Pro, or 3rd generation SmartUPS models.
<TR>
<TD>#
<TD>Replace battery - Sent when the UPS detects that the battery needs to
be replaced.  Sent every 5 hours until a new battery test is run or the
UPS is shut off.  Not implemented on SmartUPS v/s or BackUPS Pro models.
<TR>
<TD>&amp;
<TD>Check alarm register for fault (Measure-UPS) - sent to signal that
temp or humidity out of set limits.  Also sent when one of the contact
closures changes states.  Sent every 2 minutes, stops when the alarm conditions
are reset.  Only sent for alarms enabled with I.  Cause of alarm may be
determined with J.  Not on SmartUPS v/s or BackUPS Pro.
<TR>
<TD>|
<TD>Variable change in EEPROM - Sent whenever any EEPROM variable is changed.
Only supported on Matrix UPS and 3rd generation SmartUPS models.
</TABLE>

<H2>Register 1</H2>
All bits are valid on the Matrix UPS.  SmartUPS models only support bits
6 and 7.  Other models do not respond.
<P>
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH>Bit<th>Hex Bit<TH>Meaning</tr>
<TR><TD>0<td>0x01<TD>In wakeup mode (typically lasts &lt; 2s)</tr>
<TR><TD>1<td>0x02<TD>In bypass mode due to internal fault - see register 2 or 3</tr>
<TR><TD>2<td>0x04<TD>Going to bypass mode due to command</tr>
<TR><TD>3<td>0x08<TD>In bypass mode due to command</tr>
<TR><TD>4<td>0x10<TD>Returning from bypass mode</tr>
<TR><TD>5<td>0x20<TD>In bypass mode due to manual bypass control</tr>
<TR><TD>6<td>0x40<TD>Ready to power load on user command</tr>
<TR><TD>7<td>0x80<TD>Ready to power load on user command or return of line power</tr>
</TABLE>

<H2>Register 2</H2>
Matrix UPS models report bits 0-5.  SmartUPS models only support bits 4 and 6.
SmartUPS v/s and BackUPS Pro report bits 4, 6, 7.  Unused bits are set to 0.
Other models do not respond.
<P>
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH>Bit<TH>Meaning</tr>
<TR><TD>0<TD>Fan failure in electronics, UPS in bypass</tr>
<TR><TD>1<TD>Fan failure in isolation unit</tr>
<TR><TD>2<TD>Bypass supply failure</tr>
<TR><TD>3<TD>Output voltage select failure, UPS in bypass</tr>
<TR><TD>4<TD>DC imbalance, UPS in bypass</tr>
<TR><TD>5<TD>Command sent to stop bypass with no battery connected - UPS still in bypass</tr>
<TR><TD>6<TD>Relay fault in SmartTrim or SmartBoost</tr>
<TR><TD>7<TD>Bad output voltage</tr>
</TABLE>

<H2>Register 3</H2>
All bits are valid on the Matrix UPS and 3rd generation SmartUPS models.
SmartUPS v/s and BackUPS Pro models report bits 0-5.  All others report
0-4.  State change of bits 1,2,5,6,7 are reported asynchronously with ? and =
messages.
<P>
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH>Bit<TH>Meaning</tr>
<TR><TD>0<TD>Output unpowered due to shutdown by low battery</tr>
<TR><TD>1<TD>Unable to transfer to battery due to overload</tr>
<TR><TD>2<TD>Main relay malfunction - UPS turned off</tr>
<TR><TD>3<TD>In sleep mode from @ (maybe others)</tr>
<TR><TD>4<TD>In shutdown mode from S</tr>
<TR><TD>5<TD>Battery charger failure</tr>
<TR><TD>6<TD>Bypass relay malfunction</tr>
<TR><TD>7<TD>Normal operating temperature exceeded</tr>
</TABLE>
<h2>Interpretation of the Old Firmware Revision</h2>
The Old Firmware Revision is obtained with the &quot;V&quot; command,
which gives a typical response such as &quot;GWD&quot; or &quot;IWI&quot;, and
can be interpreted as follows:
<p><pre>
 Old Firmware revision and model ID String for SmartUPS & MatrixUPS

 This is a three character string XYZ

     where X == Smart-UPS or Matrix-UPS ID Code.
       range 0-9 and A-P
         1 == unknown
         0 == Matrix 3000
         5 == Matrix 5000
       the rest are Smart-UPS and Smart-UPS-XL
         2 == 250       3 == 400       4 == 400
         6 == 600       7 == 900       8 == 1250
         9 == 2000      A == 1400      B == 1000
         C == 650       D == 420       E == 280
         F == 450       G == 700       H == 700XL
         I == 1000      J == 1000XL    K == 1400
         L == 1400XL    M == 2200      N == 2200XL
         O == 3000      P == 5000

     where Y == Possible Level of Smart Features, unknown???
         G == Stand Alone
         T == Stand Alone
                 V == ???
         W == Rack Mount

     where Z == National Model Use Only Codes
         D == Domestic        115 Volts
         I == International   230 Volts
         A == Asia ??         100 Volts
         J == Japan ??        100 Volts
</pre>
<h2>Interpretation of the New Firmware Revision</h2>
The New Firmware Revision is obtained with the &quot;b&quot; command,
which give a typical response such as &quot;50.9.D&quot; or &quot;60.11.I&quot;,
and can be interpreted as follows:
<p><pre>
 New Firmware revison and model ID String in NN.M.L is the format

      where NN == UPS ID Code.
          12 == Back-UPS Pro 650
          13 == Back-UPS Pro 1000
          52 == Smart-UPS 700
          60 == SmartUPS 1000
          72 == Smart-UPS 1400

          where NN now Nn has possible meanings.
              N  == Class of UPS
              1n == Back-UPS Pro
              5n == Smart-UPS
              7n == Smart-UPS NET

               n == Level of intelligence
              N1 == Simple Signal, if detectable WAG(*)
              N2 == Full Set of Smart Signals
              N3 == Micro Subset of Smart Signals

      where M == Possible Level of Smart Features, unknown???
          1 == Stand Alone
          8 == Rack Mount
          9 == Rack Mount

      where L == National Model Use Only Codes
          D == Domestic        115 Volts
          I == International   230 Volts
          A == Asia ??         100 Volts
          J == Japan ??        100 Volts
          M == North America   208 Volts (Servers)
</pre>

<h2>EEPROM Values</h2>
Upon sending a ^Z, your UPS will probably spit back approximately
254 characters something like the following
(truncated here for the example):
<P>
#uD43132135138129uM43229234239224uA43110112114108 ....
<P>
It looks bizarre and ugly, but is easily parsed.  The # is some kind of
marker/ident character.  Skip it.  The rest fits this form:
<P>
<UL>
<LI>Command character - use this to select the value
<LI>Locale - use 'b' to find out what yours is (the last character), '4' applies to all
<LI>Number of choices - '4' means there are 4 possibilities coming up
<LI>Choice length - '3' means they are all 3 chars long
</UL>
Then it's followed by the choices, and it starts over.
<P>
Matrix-UPS models have ## between each grouping for some reason.
<p>Here is an example broken out to be more readable:
<p><pre>
   CMD DFO RSP FSZ FVL
   u   D   4   3   127 130 133 136
   u   M   4   3   229 234 239 224
   u   A   4   3   108 110 112 114
   u   I   4   3   253 257 261 265
   l   D   4   3   106 103 100 097
   l   M   4   3   177 172 168 182
   l   A   4   3   092 090 088 086
   l   I   4   3   208 204 200 196
   e   4   4   2   00   15  50  90
   o   D   1   3   115
   o   J   1   3   100
   o   I   1   3   230 240 220 225
   o   M   1   3   208
   s   4   4   1     H   M   L   L
   q   4   4   2    02  05  07  10
   p   4   4   3   020 180 300 600
   k   4   4   1     0   T   L   N
   r   4   4   3   000 060 180 300
   E   4   4   3   336 168  ON OFF
  
   CMD == UPSlink Command.
         u = upper transfer voltage
         l = lower transfer voltage
         e = return threshold
         o = output voltage
         s = sensitivity
         p = shutdown grace delay
         q = low battery warning
         k = alarm delay
         r = wakeup delay
         E = self test interval

   DFO == (4)-all-countries (D)omestic (I)nternational (A)sia (J)apan
          (M) North America - servers.
   RSP == Total number possible answers returned by a given CMD.
   FSZ == Max. number of field positions to be filled.
   FVL == Values that are returned and legal.
 
</pre>
<h2>Programming the UPS EEPROM</h2>
There are at this time a maximum of 12 different values that can be
programmed into the UPS EEPROM. They are:
<p>
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH align="center">Item<th align="center">Command<TH>Meaning</tr>
<tr><td>1.<td align="center">c<td>The UPS Id or name</tr>       
<tr><td>2.<td align="center">x<td>The last date the batteries were replaced</tr>
<tr><td>3.<td align="center">u<td>The Upper Transfer Voltage</tr>
<tr><td>4.<td align="center">l<td>The Lower Transfer Voltage</tr>
<tr><td>5.<td align="center">e<td>The Return Battery Charge Percentage</tr>
<tr><td>6.<td align="center">o<td>The Output Voltage when on Batteries</tr>
<tr><td>7.<td align="center">s<td>The Sensitivity to Line Quality</tr>
<tr><td>8.<td align="center">p<td>The Shutdown Grace Delay</tr>
<tr><td>9.<td align="center">q<td>The Low Battery Warning Delay</tr>
<tr><td>10.<td align="center">k<td>The Alarm Delay</tr>
<tr><td>11.<td align="center">r<td>The Wakeup Delay</tr>
<tr><td>12.<td align="center">E<td>The Automatic Self Test Interval</tr>
</table>
<p>
The first two cases (Ident and Batt date) are somewhat special 
in that you tell the UPS you want to change the value, then you
supply 8 characters that are saved in the EEPROM. The last ten
item are programmed by telling the UPS that you want it to cycle
to the next permitted value.
<p>In each case, you indicate to the UPS that you want to change
the EEPROM by first sending the appropriate query command (e.g.
"c" for the UPS ID or "u" for the Upper Transfer voltage. This command
is then immediately followed by the cycle EEPROM command or "-". In
the case of the UPS Id or the battery date, you follow the cycle 
command by the eight characters that you want to put in the EEPROM.
In the case of the other ten items, there is nothing more to enter.
<p>The UPS will respond by "OK" and approximately 5 seconds later by a
vertical bar (|) to indicate that the EEPROM was changed.
<H1>Acknowledgements</H1>
The apcupsd has a rather long and tormented history. Many thanks to the
guys that, with time, contributed to the general public knowledge.<p>
Pavel Korensky &lt;pavelk@dator3.anet.cz&gt;,<br>
Andre M. Hedrick &lt;hedrick@suse.de&gt;,<br>
Christopher J. Reimer &lt;reimer@doe.carleton.ca&gt;,<br>
Kevin D. Smolkowski &lt;kevins@trigger.oslc.org&gt;,<br>
Werner Panocha &lt;wpanocha@t-online.de&gt;,<br>
Steven Freed,<br>
<A HREF="http://www.exploits.org/~rkroll/contact.html">Russell Kroll</A>.
<HR>
26 November 1999
<p>additions by:
<ADDRESS><A HREF="http://www.sibbald.com">Kern Sibbald &lt;apcupsd-devel@apcupsd.org&gt;</A></ADDRESS>
21 December 1999
<p>additional credits by:<p>
Riccardo Facchetti<p>
08 February 2000
<hr>

<a href="status.html" target="_self"><img src="back.gif" border=0 alt="Back"></a>
<a href="usb.html" target="_self"><img src="next.gif" border=0 alt="Next"></a>
<a href="index.html"><img src="home.gif" border=0 alt="Home"></a>
</BODY>
</HTML>