First, you will need a serial port or USB cable between the APC UPS and your computer running apcupsd. If you have a USB UPS and a free USB port, you can simply connect your UPS to that port, assume you have a "smart" or "sub-smart"device, and skip the rest of this section.
Otherwise, you can either use the cable that came with your UPS (the easiest if we support it) or you can make your own cable. We recommend that you obtain a supported cable directly from APC.
If you already have an APC cable, you can determine what kind it is by examining the flat sides of the two connectors where you will find the cable number embossed into the plastic. It is generally on one side of the male connector.
To make your own cable, first, you must know whether you have a Smart UPS that sends ASCII characters called Smart Signaling, or a "dumb" UPS that uses serial port line voltage signaling, called Simple Signaling.
The "dumb" UPSes are older models such as the BackUPS (not BackUPS Pro) and the ShareUPS Basic Port that use Simple Signaling. Most other UPSes (including USB UPSes) use Smart Signaling. If in doubt consult the Configuration Section of this manual, or the documentation that came with your UPS.
SMART-CUSTOM CABLE
Signal Computer UPS
DB9F DB9M
RxD 2 -------------------- 2 TxD Send
TxD 3 -------------------- 1 RxD Receive
GND 5 -------------------- 9 Ground
When using this cable with apcupsd specify the
following in apcupsd.conf:
UPSCABLE smart UPSTYPE smartups DEVICE /dev/ttyS0 (or whatever your serial port is)
The jack in the UPS is actually a 10 pin RJ45. However, you can just as easily use a 8 pin RJ45 connector, which is more standard (ethernet TX, and ISDN connector). It is easy to construct the cable by cutting off one end of a standard RJ45-8 ethernet cable and wiring the other end (three wires) into a standard DB9F female serial port connector.
Below, you will find a diagram for the CUSTOM-RJ45 cable:
CUSTOM-RJ45 CABLE
Signal Computer UPS UPS
DB9F RJ45-8 RJ45-10
RxD 2 ---------------- 1 2 TxD Send
TxD 3 ---------------- 7 8 RxD Receive
GND 5 ---------------- 6 7 Ground
The RJ45-8 pins are: looking at the end of the connector:
8 7 6 5 4 3 2 1
___________________
| . . . . . . . . |
| |
-------------------
|____|
The RJ45-10 pins are: looking at the end of the connector:
10 9 8 7 6 5 4 3 2 1
_______________________
| . . . . . . . . . . |
| |
-----------------------
|____|
For the serial port DB9F connector, the pin numbers
are stamped in the plastic near each pin. In addition,
there is a diagram near the end of this chapter.
When using this cable with apcupsd specify the following in apcupsd.conf:
UPSCABLE smart UPSTYPE smartups DEVICE /dev/ttyS0 (or whatever your serial port is)
The information for constructing this cable was discovered and transmitted to us by slither_man. Many thanks!
For "dumb" UPSes using Simple Signaling, if you are going to build your own cable, we recommend to make the cable designed by the Apcupsd team as follows:
SIMPLE-CUSTOM CABLE
Signal Computer UPS
DB9F 4.7K ohm DB9M
DTR 4 --[####]--* DTR set to +5V by Apcupsd
|
CTS 8 ----------*--------- 5 Low Battery
GND 5 -------------------- 4 Ground
DCD 1 -------------------- 2 On Battery
RTS 7 -------------------- 1 Kill UPS Power
List of components one needs to make the Simple cable:
- Solder the resistor into pin 4 of the female DB9 connector.
- Next bend the resistor so that it connects to pin 8 of the female DB9 connector.
- Pin 8 on the female connector is also wired to pin 5 on the male DB9 connector. Solder both ends.
- Solder the other pins, pin 5 on the female DB9 to pin 4 on the male connector; pin 1 on the female connector to pin 2 on the male connector; and pin 7 on the female connector to pin 1 on the male connector. - Double check your work.We use the DTR (pin 4 on the female connector) as our +5 volts power for the circuit. It is used as the Vcc pull-up voltage for testing the outputs on any "UPS by APC" in Simple Signaling mode. This cable may not work on a BackUPS Pro if the default communications are Smart Signaling mode. This cable is also valid for "ShareUPS" BASIC Port mode and is also reported to work on SmartUPSes. However, the Smart Cable described above is much simpler. To have a better idea of what is going on inside apcupsd, for the SIMPLE cable apcupsd reads three signals and sets three:
Reads:
CD, which apcupsd uses for the On Battery signal when high.
CTS, which apcupsd uses for the Battery Low signal when high.
RxD (SR), which apcupsd uses for the Line Down
signal when high. This signal isn't used for much.
Sets:
DTR, which apcupsd sets when it detects a power failure (generally
5 to 10 seconds after the CD signal goes high). It
clears this signal if the CD signal subsequently goes low
-- i.e. power is restored.
TxD (ST), which apcupsd clears when it detects that the CD signal
has gone low after having gone high - i.e. power is restored.
RTS, which apcupsd sets for the killpower signal -- to cause the UPS
to shut off the power.
Please note that these actions apply only to the SIMPLE cable, the signals used on the other cables are different.
Finally, here is another way of looking at the CUSTOM-SIMPLE cable:
APCUPSD SIMPLE-CUSTOM CABLE
Computer Side | Description of Cable | UPS Side
DB9f | DB25f | | DB9m | DB25m
4 | 20 | DTR (5vcc) *below | n/c |
8 | 5 | CTS (low battery) *below | <- 5 | 7
2 | 3 | RxD (no line voltage) *below | <- 3 | 2
5 | 7 | Ground (Signal) | 4 | 20
1 | 8 | CD (on battery from UPS) | <- 2 | 3
7 | 4 | RTS (kill UPS power) | -> 1 | 8
n/c | 1 | Frame/Case Gnd (optional) | 9 | 22
Note: the <- and -> indicate the signal direction.
Optional connections of original SIMPLE-CUSTOM specification
that are not used.
4.7K ohm
DTR 4 --[####]--* Note needed
|
RxD 2 ----------*--------- 3 Not used by Apcupsd
When using this cable with apcupsd specify the
following in apcupsd.conf:
UPSCABLE simple UPSTYPE backups DEVICE /dev/ttyS0 (or whatever your serial port is)
940-0020B/C Simple Signal Only, all models.
940-0023A Simple Signal Only, all models.
940-0119A Simple Signal Only, Back-UPS Office, and BackUPS ES.
940-0024[B/C/G] SmartMode Only, SU and BKPro only.
940-0095[A/B/C] PnP (Plug and Play), all models.
940-1524C SmartMode Only
940-0127A/B USB Cables
940-0128A Simple Signal Only, Back-UPS CS in serial mode.
| Cable | Power Loss | Low Battery | Kill Power | Cable Disconnected |
|---|---|---|---|---|
| 940-0020B | Yes | No | Yes | No |
| 940-0020C | Yes | Yes | Yes | No |
| 940-0023A | Yes | No | No | No |
| 940-0119A | Yes | Yes | Yes | No |
| 940-0127A | Yes | Yes | Yes | No |
| 940-0128A | Yes | Yes | Yes | No |
| 940-0095A/B/C | Yes | Yes | Yes | No |
| simple | Yes | Yes | Yes | No |
The signals presented or accepted by the UPS on its DB9 connector using the numbering scheme listed above is:
UPS Pin Signal meaning
1 <- Shutdown when set by computer for 1-5 seconds.
2 -> On battery power (this signal is normally low but
goes high when the UPS switches to batteries).
3 -> Mains down (line fail) See Note 1 below.
5 -> Low battery. See Note 1 below.
6 -> Inverse of mains down signal. See Note 2 below.
7 <- Turn on/off power (only on advanced UPSes only)
Note 1: these two lines are normally open, but close when the
appropriate signal is triggered. In fact, they are open collector
outputs which are rated for a maximum of +40VDC and 25 mA. Thus
the 4.7K ohm resistor used in the Custom Simple cable works
quite well.
Note 2: the same as note 1 except that the line is normally closed,
and opens when the line voltage fails.
Looking at the end of the connector:
6 5 4 3 2 1
_____________
| . . . . . . |
| |
| |----------|
|__|
It appears that the signals work as follows:
UPS Signal meaning
1 (brown) <- Shutdown when set by computer for 1-5 seconds.
2 (black) -> On battery power
3 (blue) -> Low battery
4 (red) Signal ground
5 (yellow) <- Begin signaling on other pins
6 (none) none
This cable can only be used on simple signaling UPSes, and provides the On Battery signal as well as kill UPS power. Most recent evidence (Lazar's analysis) indicates that this cable under the right conditions may provide the Low Battery signal. This is to be confirmed.
APC Part# - 940-0020B
Signal Computer UPS
DB9F DB9M
CTS 8 -------------------- 2 On Battery
DTR 4 -------------------- 1 Kill power
GND 5 ---------------*---- 4 Ground
|
--- *---- 9 Common
DCD 1 ----|///|----------- 5 Low Battery
|\\\|
RTS 7 ----|///| (probably a
--- semi-conductor)
Thanks to Lazar M. Fleysher for proper
APC Part# - 940-0020C
Signal Computer UPS
DB9F DB9M
CTS 8 -------------------- 2 On Battery
DTR 4 -------------------- 1 Kill power
GND 5 ---------------*---- 4 Ground
|
*---- 9 Common
RTS 7 -----[ 93.5K ohm ]----- 5 Low Battery
or semi-conductor
APC Part# - 940-0023A
Signal Computer UPS
DB9F DB9M
DCD 1 -------------------- 2 On Battery
3.3K ohm
TxD 3 --[####]-*
|
DTR 4 ---------*
GND 5 ---------------*---- 4 Ground
|
*---- 9 Common
Construction and operation of the APC #940-0095A cable.
This cable is included with the APC Back-UPS Pro PNP series.
UPS end Computer end
------- ------------
47k 47k
BATTERY-LOW (5) >----R1----*----R2----*----< DTR,DSR,CTS (4,6,8)
| |
| |
| / E
| |/
| B |
*-------| 2N3906 PNP
|
|\
\ C
|
|
*----< DCD (1) Low Batt
|
|
R 4.7k
3
|
4.7k |
SHUTDOWN (1) >----------*----R4----*----< TxD (3)
|
| 1N4148
*----K|---------< RTS (7) Shutdown
POWER-FAIL (2) >--------------------------< RxD,RI (2,9) On Batt
GROUND (4,9) >--------------------------< GND (5)
Operation:
* DTR is "cable power" and must be held at SPACE. DSR or CTS may be
used as a loopback input to determine if the cable is plugged in.
* DCD is the "battery low" signal to the computer. A SPACE on this
line means the battery is low. This is signalled by BATTERY-LOW
being pulled down (it is probably open circuit normally).
Normally, the transistor is turned off, and DCD is held at the MARK
voltage by TxD. When BATTERY-LOW is pulled down, the voltage
divider R2/R1 biases the transistor so that it is turned on, causing
DCD to be pulled up to the SPACE voltage.
* TxD must be held at MARK; this is the default state when no data is
being transmitted. This sets the default bias for both DCD and
SHUTDOWN. If this line is an open circuit, then when BATTERY-LOW is
signalled, SHUTDOWN will be automatically signalled; this would be
true if the cable were plugged in to the UPS and not the computer,
or if the computer were turned off.
* RTS is the "shutdown" signal from the computer. A SPACE on this
line tells the UPS to shut down.
* RxD and RI are both the "power-fail" signals to the computer. A
MARK on this line means the power has failed.
* SPACE is a positive voltage, typically +12V. MARK is a negative
voltage, typically -12V. Linux appears to translate SPACE to a 1
and MARK to a 0.
APC Part# - 940-0095B
Signal Computer UPS
DB9F DB9M
DTR 4 ----*
CTS 8 ----|
DSR 6 ----|
DCD 1 ----*
GND 5 ---------------*---- 4 Ground
|
*---- 9 Common
RI 9 ----*
|
RxD 2 ----*--------------- 2 On Battery
TxD 3 ----------[####]---- 1 Kill UPS Power
4.7K ohm
APC Part# - 940-0119A
UPS Computer
pins pins Signal Signal meaning
1 (brown) 4,6 DSR DTR <- Shutdown when set by computer for 1-5 seconds.
2 (black) 8,9 RI CTS -> On battery power
3 (blue) 1,2 CD RxD -> Low battery
4 (red) 5 Ground
5 (yellow) 7 RTS <- Begin signaling on other pins
6 (none) none
computer ----------- BackUPS-ES -----------------
DB9-M DB-9F
pin signal pin
4 DSR -> 4 --+
| diode resistor
6 DTR -> 6 --+---->|----/\/\/\---o kill power
1 DCD <- 1 --+
|
2 RxD <- 2 --+----------------+--o low battery
|
7 RTS -> 7 --------+--/\/\/\--+
|
+--/\/\/\--+
|
8 RI <- 8 --+----------------+--o on battery
|
9 CTS <- 9 --+
5 GND --- 5 ----------------------o ground
3 TxD 3 nc
An amazing discovery by slither_man allows one to build a CUSTOM-RJ45 cable (documented above) and run the BackUPS CS (and probably also the ES) in Smart mode. Running it this way provides all the same information that you would get by running it in USB mode. As a consequence, we recommend that you either purchase (where I don't know) or build your own CUSTOM-RJ45 cable rather than use the 940-0128A cable.
Thanks to all the people who have helped test this and have provided information on the cable wiring, our best guess for the cable schematic is the following:
computer --------- Inside the Connector--------- UPS
DB9-F | | RJ45
pin - signal | | Pin - Color
| |
4 DSR ->|---+ |
| | diode resistor |
6 DTR ->|---+---->|----/\/\/\---o kill power | 8 Orange
| |
1 DCD <-|----+ |
| | |
2 RxD <-|----+----------------+--o low battery| 3 Brown
| | |
7 RTS ->|----------+--/\/\/\--+ |
| | |
| +--/\/\/\--+ |
| | |
8 RI <-|----+----------------+--o on battery | 2 Black
| | |
9 CTS <-|----+ |
| signal |
5 GND --|-----------------------o ground | 7 Red
| |
3 TxD | |
| chassis |
Chassis/GND |-----------------------o ground | 4 Black
| |
| Not connected | 1, 5, 6, 9, 10
--------------------------------------
The RJ45 pins are: looking at the end of the connector:
10 9 8 7 6 5 4 3 2 1
_______________________
| . . . . . . . . . . |
| |
-----------------------
|____|
This imposes a few minor restrictions on the functionality of some of the cables. In particular, LineDown on the Custom Simple cable, and Low Battery on the 0023A cable are not implemented.
This section describes how apcupsd 3.8.5 (March 2002) treats the serial port line signals for simple cables. apcaction.c: condition = power failure detected cable = CUSTOM_SIMPLE action = ioctl(TIOCMBIS, DTR) set DTR (enable power bit?) apcaction.c: condition = power back cable = CUSTOM_SIMPLE action = ioctl(TIOCMBIC, DTR) clear DTR (clear power bit) action = ioctl(TIOCMBIC, ST) clear ST (TxD) apcserial.c: condition = serial port initialization cable = 0095A, 0095B, 0095C action = ioctl(TIOMBIC, RTS) clear RTS (set PnP mode) cable = 0119A, 0127A, 0128A action = ioctl(TIOMBIC, DTR) clear DTR (killpower) action = ioctl(TIOMBIS, RTS) set RTS (ready to receive) apcserial.c: condition = save_dumb_status cable = CUSTOM_SIMPLE action = ioctl(TIOMBIC, DTR) clear DTR (power bit?) action = ioctl(TIOMBIC, RTS) clear RTS (killpower) cable = 0020B, 0020C, 0119A, 0127A, 0128A action = ioctl(TIOMBIC, DTR) clear DTR (killpower) cable = 0095A, 0095B, 0095C action = ioctl(TIOMBIC, RTS) clear RTS (killpower) action = ioctl(TIOMBIC, CD) clear DCD (low batt) action = ioctl(TIOMBIC, RTS) clear RTS (killpower) a second time! apcserial.c: condition = check_serial cable = CUSTOM_SIMPLE action = OnBatt = CD action = BattLow = CTS action = LineDown = SR cable = 0020B, 0020C, 0119A, 0127A, 0128A action = OnBatt = CTS action = BattLow = CD action = LineDown = 0 cable = 0023A action = Onbatt = CD action = BattLow = SR action = LineDown = 0 cable = 0095A, 0095B, 0095C action = OnBatt = RNG action = BattLow = CD action = LineDown = 0 apcserial.c condition = killpower cable = CUSTOM_SIMPLE, 0095A, 0095B, 0095C action = ioctl(TIOMCBIS, RTS) set RTS (kills power) action = ioctl(TIOMCBIS, ST) set TxD cable = 0020B, 020C, 0119A, 0127A, 0128A action = ioctl(TIOMCBIS, DTR) set DTR (kills power)
| DB-25
Pin # | DB-9
Pin # | Name | DTE-DCE Description |
|---|---|---|---|
| 1 | -- | FG | --- Frame Ground/Chassis GND |
| 2 | 3 | TD | ---> Transmitted Data, TxD |
| 3 | 2 | RD | <--- Received Data, RxD |
| 4 | 7 | RTS | ---> Request To Send |
| 5 | 8 | CTS | <--- Clear To Send |
| 6 | 6 | DSR | <--- Data Set Ready |
| 7 | 5 | SG | ---- Signal Ground, GND |
| 8 | 1 | DCD | <--- Data Carrier Detect |
| 9 | -- | -- | --- Positive DC test voltage |
| 10 | -- | -- | --- Negative DC test voltage |
| 11 | -- | QM | <--- Equalizer mode |
| 12 | -- | SDCD | <--- Secondary Data Carrier Detect |
| 13 | -- | SCTS | <--- Secondary Clear To Send |
| 14 | -- | STD | ---> Secondary Transmitted Data |
| 15 | -- | TC | <--- Transmitter (signal) Clock |
| 16 | -- | SRD | <--- Secondary Receiver Clock |
| 17 | -- | RC | ---> Receiver (signal) Clock |
| 18 | -- | DCR | <--- Divided Clock Receiver |
| 19 | -- | SRTS | ---> Secondary Request To Send |
| 20 | 4 | DTR | ---> Data Terminal Ready |
| 21 | -- | SQ | <--- Signal Quality Detect |
| 22 | 9 | RI | <--- Ring Indicator |
| 23 | -- | -- | ---> Data rate selector |
| 24 | -- | -- | <--- Data rate selector |
| 25 | -- | TC | <--- Transmitted Clock |
13 1 5 1
_______________________________ _______________
\ . . . . . . . . . . . . . / \ . . . . . / RS232-connectors
\ . . . . . . . . . . . . / \ . . . . / looking into the
--------------------------- ----------- end of the cable.
25 14 9 6
The diagram above represents the Female end of the cable. The
male end is the same, but looking from inside the cable.
DTE : Data Terminal Equipment (i.e. computer)
DCE : Data Communications Equipment (i.e. UPS)
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 hang-up
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
#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 #define TIOCM_OUT1 0x2000 #define TIOCM_OUT2 0x4000