APC Smart-UPS 1000 and 1500 on an 8S LiFePO4 battery: wiring, COM port setup, cooling
APC Smart-UPS 1000 and 1500 (SUA1000I, SUA1500I) on an 8S LiFePO4 battery instead of lead-acid. What it takes:
- wiring and wire sizes, Anderson connectors, BMS and fuse;
- an extra charger: the UPS itself charges a big battery very slowly;
- setup over the COM port: number of battery packs, voltmeter calibration so the UPS charges to the voltage you want, runtime calibration;
- starting from battery with no mains;
- cooling: a fan with a thermal switch for the 1000, a quieter fan for the 1500;
- which capacitors to replace;
- the full list of UPS commands.
draft — work in progress
⚠ Before you start. A 100 Ah LiFePO4 battery stores about 2.5 kWh, and its short-circuit current is hundreds of amps. Every circuit below has a fuse next to the battery. Inside the UPS there is 230 V mains, and the capacitors stay charged after switch-off. Changing the UPS memory (EEPROM) is at your own risk: a wrong command can leave the UPS unusable.
Why LiFePO4 and why 8S
Both UPS models have a 24 V battery system: two 12 V lead-acid batteries in series. 8S LiFePO4 is eight 3.2 V cells, 25.6 V nominal. Its working range almost matches 24 V lead-acid:
| State | Lead-acid 2×12 V | LiFePO4 8S | Per LiFePO4 cell |
|---|---|---|---|
| UPS float (charge hold) | ~27.4 V | ~27.4 V | 3.42 V — 90–95 % charged, good for cell life |
| fully charged, at rest | ~25.4 V | ~26.8 V | 3.35 V |
| most of the discharge | 24–25 V, falling steadily | 25.6–26.4 V, almost flat | 3.2–3.3 V |
| UPS cuts off | ~21 V | ~21 V | 2.6 V — nearly empty, but still above 2.5 V |
What LiFePO4 gives you: thousands of cycles instead of a few hundred, nearly all of its capacity even at high current, a third of the weight, and no hydrogen.
But the UPS “thinks” it has lead-acid. Because of that:
- the charge percentage on the UPS means nothing for LiFePO4. The voltage curve is flat: the UPS shows “full” for a long time and then suddenly “empty”;
- the runtime estimate is wrong until you set the pack count and calibrate (see “Setup”).
The battery: BMS, wires, connectors, fuse
BMS
Use the battery only with an 8S BMS (a protection and cell-balancing board). Without one, a weaker cell will sooner or later be over-discharged or overcharged.
| What | SUA1000I | SUA1500I |
|---|---|---|
| UPS power | 670 W | 980 W |
| battery current at full power (≈ P ÷ 21 V ÷ 0.85 efficiency) | up to ~38 A | up to ~55 A |
| BMS continuous current | 60 A or more | 100 A or more |
⚠ Inrush current. The UPS has big capacitors on its battery input. When the battery is connected they charge almost like a short circuit: there is a spark, and some BMS boards trip their short-circuit protection. Then the UPS simply will not turn on. The cure is precharging: connect through a 10–20 Ω (5 W) resistor for a few seconds, then directly. You can buy ready-made connectors with a built-in resistor, or use a separate switch.
⚠ If the UPS lives in an unheated room, choose a BMS with low-temperature charge protection (LiFePO4 must not be charged below 0 °C).
Wires
Copper, fine-stranded flexible wire with silicone insulation, kept short: up to 1–1.5 m each way.
| UPS | Minimum | Recommended | Fuse at the battery |
|---|---|---|---|
| SUA1000I | 6 mm² (AWG 10) | 10 mm² (AWG 8) | 60 A |
| SUA1500I | 10 mm² (AWG 8) | 16 mm² (AWG 6) | 80 A |
The fuse must be rated for DC and at least 32 V (ANL, MIDI, Class T or a DC breaker). It goes on the positive lead, as close to the battery as possible: it protects the wire, not the UPS. Flat automotive blade fuses are not suitable for these currents.
Why not thinner: 2 m of 16 mm² wire (there and back) drops ~0.2 V at 55 A. With 4 mm² the drop is already ~0.5 V and the wire gets noticeably warm. The UPS sees fewer volts and decides earlier that the battery is flat.
Anderson connectors
APC itself uses Anderson SB50 (grey) on its battery packs. So an SB50 on the lead from the LiFePO4 plugs straight into the UPS connector, no rework needed.
| Connector | Rated current | Wire | Use |
|---|---|---|---|
| SB50 | 50 A | 6–16 mm² (AWG 10–6) | SUA1000I — with margin; SUA1500I — up to ~70 % load |
| SB120 | 120 A | 16–35 mm² (AWG 6–2) | SUA1500I at full power, long discharges |
| SB175 | 175 A | 25–50 mm² | more than these UPS need |
How to choose:
- by current, not by wire size;
- colours are a mechanical key: connectors of different colours do not mate. Take grey, like APC;
- crimp the contacts, do not solder them: solder cracks under vibration and heat, and it creeps under the spring pressure;
- buy genuine: fakes have thinner brass and a weaker spring, and the contact heats up. Easy check: after an hour at full current the connector should be barely warm.
Charging: the UPS charges, but very slowly
The UPS charger is sized for the stock lead-acid batteries (2×12 V 12 Ah in the SUA1000I, 2×12 V 17 Ah in the SUA1500I). It will charge a big LiFePO4 too, but slowly: its charging current is sized for a battery several times smaller, so a 100 Ah battery takes a very long time to charge from empty.
That is why you want a separate charger for 8S LiFePO4, connected to the battery in parallel with the UPS:
- set its voltage no higher than the voltage the UPS charges to (for example 27.6 V, see calibration below). Then the two chargers do not fight each other, and the UPS never sees a battery voltage above its own;
- the key point is to set both voltages against the same voltmeter. Put a multimeter on the battery terminals: calibrate the UPS over the COM cable to the voltage you need (step 2 below), then set the power supply voltage using the same multimeter. The UPS then does not notice the supply running in parallel and works as usual;
- we used industrial 24 V power supplies: Eltek 1000, Eltek 1500 and Mean Well UHP-1500-24. Their output voltage can be trimmed to the value you need;
- a power supply is not a charger: into a discharged battery it delivers its maximum current. Pick one that limits the current in that case instead of shutting down or restarting in a loop;
- when the mains is gone, the switched-off supply must not drain the battery through its output. Check the battery current with the supply off;
- give the charger its own fuse too.
Setup over the COM port
Everything LiFePO4 needs is done with commands over the COM port: pack count, calibration, limits, tests. No APC software is needed for it.
The cable. An ordinary serial cable will not do: UPS pin 1 is also the “shut down” command. You need a 940-0024C or an equivalent. How to solder one is in our article APC Smart-UPS 1000 on car batteries.
Terminal: 2400 bit/s, 8 bits, no parity, 1 stop bit, no flow control.
| System | Tool |
|---|---|
| Linux | screen /dev/ttyUSB0 2400 or minicom -D /dev/ttyUSB0 -b 2400 |
| Windows | PuTTY: Serial, the COM port, 2400 |
- A command is one character, no Enter. The UPS replies at once.
- Always send
Yfirst: the UPS repliesSM(it enters “smart” mode). - While COM is in use, unplug the USB cable. We worked one at a time: COM for setup, USB for PowerChute.
- Pause between the characters of multi-character commands. If you type too fast, the UPS stops answering.
Changing a value: send the parameter letter (the UPS shows the current value), then + or - for the next or previous allowed value. Then send the letter again to check.
Step 1. Number of battery packs
The UPS estimates runtime from how much battery it has. The > parameter is the number of external battery packs:
> → 000 (no external packs)
+ → each "+" adds one pack
> → check
How many: your battery capacity ÷ the stock capacity, minus one (the stock battery is already counted). For example, a 100 Ah LiFePO4 in the SUA1500I: 100 ÷ 17 ≈ 6, so 5 external packs. In the SUA1000I: 100 ÷ 12 ≈ 8, so 7.
Our UPS units are set to FF. ⚠ With that value the UPS treats the battery as huge: the runtime estimate (j) is too high, and the “battery low” warning may not come in time. The UPS then shuts down at its low voltage limit without a warning. If computers must shut down on their own, set the monitoring software to shut them down by voltage or by time on battery, and test it on a real discharge.
Why change > at all: left at 000, the UPS thinks the battery is small, signals “battery low” early, and the monitoring software (PowerChute, NUT) shuts the computers down while there are still hours of battery left.
Step 2. Voltmeter calibration: “fooling” the UPS about the voltage
The UPS charges the battery to a voltage it measures itself. Hence the trick: change the calibration of its voltmeter, and it keeps showing the same ~27.4 V while the real battery voltage is different. That is how you choose the voltage the UPS charges LiFePO4 to. In other words, the real battery voltage and the voltage the UPS shows will differ — by design.
| Goal | Real charge voltage | Per cell |
|---|---|---|
| long life (recommended for permanent UPS use) | 27.4–27.6 V | 3.42–3.45 V |
| more capacity | up to 28.0 V | 3.5 V |
| ⛔ never above | 28.4 V | 3.55 V — the BMS starts balancing and cutting off |
This is done in the PROG service mode:
Y → SM
1 (wait 2–4 seconds)
1 → PROG (service mode)
B → EA (current battery voltmeter constant; yours will differ)
+ or - → changes the constant by one step
R → BYE (leave PROG mode)
The procedure:
- Write down the starting values of
B,0,4,5,6, so you can go back. - Multimeter on the battery terminals. The UPS is on mains and charging.
- Change
Bone step at a time and wait a few minutes for the charge voltage to settle. The step size in volts is unknown and differs between boards. - Direction: a higher constant means a lower real charge voltage (the UPS believes it has already reached its limit). A lower one does the opposite.
- Once you reach the target, send
Rto leave.
⚠ The same voltmeter measures the low cut-off, where the UPS drops the load. If it “reads high”, it will also cut off at a lower real voltage. Check that the low limit (~21 V as the UPS sees it) does not go below 2.5 V per cell (20 V) in real volts. Otherwise the BMS trips first and cuts the power.
There are more constants in service mode that are best left alone unless needed:
| Constant | What it is (per repairers’ notes; APC does not document it) | SUA1000I | SUA1500I |
|---|---|---|---|
0 | “battery constant” — for the runtime estimate; calibration changes it by itself | BC | A1 |
4 | unknown | 07 | 09 |
5 | charge estimate at the moment of transfer to battery | B5 | B9 |
6 | the point where the UPS considers the battery empty | 13 | 13 |
L | mains voltmeter calibration | — | — |
| Ctrl+B | model code | 0A | 0E |
These are the factory values from the table at kirbah.github.io/apc-ups. Our SUA1000I read exactly 07 B5 13 BC in 2016.
⛔ Never send Ctrl+Y (it erases the EEPROM, and the UPS may not come back without reflashing its memory), and avoid z (factory reset of settings) unless you need it.
Step 3. Runtime calibration
After steps 1–2, run a calibration: a discharge under load from which the UPS updates constant 0.
- The battery is at 100 % (as the UPS sees it). The slow UPS charger gets in the way here, so charge the battery fully with the separate charger first.
- The load must be at least 35 %: lamps, a heater, but not computers that must not be switched off.
Dstarts it. The UPS discharges the battery to ~25 % and returns to mains. A secondDaborts.- With a big battery this takes hours: 100 Ah at 35 % load on the SUA1000I is roughly 8–9 hours.
Starting from battery with no mains (cold start)
With no mains, the UPS starts from battery like this (per APC manual 990-1194C for SUA 750/1000/1500):
- The battery is connected, and the UPS plug is not in the socket (or there is no mains).
- Press and hold the I / Test button for about 3–4 seconds. The UPS beeps, the LEDs flash, then comes a second, long beep.
- Release the button during the long beep. If the beep ends while you are still holding, try again.
- The UPS runs a self-test and powers its output from battery.
If the UPS does not turn on at all: the battery is disconnected, fully drained, the BMS has tripped (see “Inrush current” above), or the UPS is faulty.
Cooling
Long battery operation means hours of the inverter at full power. The UPS was never designed for that: the stock battery runs out in minutes.
SUA1000I: a fan and a thermal switch
The SUA1000I has no fan. For long discharges we added a 12 V fan, an LM317 regulator and a thermal switch that turns the fan on only when the UPS gets hot.
| What | Which | Note |
|---|---|---|
| fan | 12 V DC, 80 mm | it cannot run straight from the battery bus (up to ~28 V), hence the LM317 |
| regulator | LM317, circuit in the SUA1500I section below | the regulator can slow the fan until you cannot hear it at all, while it still spins |
| thermal switch | ceramic body, normally open (NO), 40 °C | on the power transistor heatsink |
| supply | from the battery bus, through a 1 A fuse | so the fan works on both battery and mains |
How it works: while the UPS is cool, the switch is open and the fan is silent. After a long run on battery the heatsink heats up, the switch closes and the fan starts. Once the heatsink cools down, the switch opens again.
- Use a ceramic thermal switch. We first had one in a metal body, and it stuck. The ceramic one does not.
- The 40 °C rating is a guide. In practice it closes at a higher temperature: the switch follows the heatsink with a delay, and the switches themselves vary.
- The LM317 runs hotter than in the SUA1500I: it brings the battery voltage (up to ~28 V) down to 12 V, dropping up to 16 V across itself. For a 0.15 A fan that is (28 − 12) V × 0.15 A ≈ 2.4 W, so a heatsink is a must.
One more thing for the SUA1000I: remove the plastic network card (SmartSlot) cage from inside. It blocks the air path. You will no longer be able to fit a network card.
SUA1500I: a quieter fan (LM317)
The SUA1500I already has a fan, but it is loud. An LM317 regulator on the stock fan contacts lowers the fan voltage, and with it the speed and noise:
Vout = 1.25 × (1 + R2 / R1) R1 = 240 Ω, R2 — 2.2–5 kΩ trimmer
- 12–16 V on the fan instead of 24 V: noticeably quieter. The regulator can go even lower, until you cannot hear the fan at all while it still spins;
- the LM317 heats up: (24 − 14) V × 0.2 A ≈ 2 W. It needs a small heatsink;
- the LM317 needs at least 3 V more at its input than at its output.
⚠ Less speed means less cooling. After the mod, check the UPS temperature (C over COM) during a long discharge at your load. If it runs hot, turn the fan speed up with the LM317 as far as needed: you choose between quieter and cooler.
SUA1500I: an aluminium lid instead of steel
The transformer hums, and part of the hum comes from the steel top lid. The transformer’s magnetic field pulls on the steel, and the lid vibrates at 100 Hz. Aluminium is not magnetic and the field does not pull on it, so that part of the hum goes away.
In our SUA1500I the swap made it about 90 % quieter. The buzz that sounds like the transformer core humming went away. In fact it came from between the core and the top lid.
- aluminium at least 1.5 mm thick, so the lid does not rattle on its own;
- the lid must be earthed, just like the steel one was: an earth wire to the chassis;
- steel shielded the transformer field a little, aluminium does not. Keep equipment sensitive to magnetic fields away.
Capacitors
Electrolytic capacitors in a UPS dry out over the years: their internal resistance (ESR) and heating go up and their capacitance goes down. Most often it shows up right at the transfer to battery. The inverter starts abruptly, the control board supply sags, and the output drops for a moment — the computer switches off, even though the battery is fine.
| Sign | Suspect |
|---|---|
| the computer turns off at the transfer to battery | control board supply capacitors, battery bus capacitors |
| the UPS clicks its relays, restarts, “blinks” | control board power supply |
| bulging tops, leaks, brown residue | replace, no question |
| “battery fault” with a new battery | capacitors near the battery input, contacts |
What to replace them with:
- the same capacitance, the same or higher voltage;
- 105 °C, low-ESR: Panasonic FR / FM, Nichicon PW / HE, Rubycon ZLH / ZLJ;
- the same diameter and lead spacing, so it fits the stock footprint;
- film capacitors (grey or yellow rectangular ones) usually do not need replacing.
We replaced all the electrolytic capacitors except the largest one.
Extra transistors on the stock footprints
The boards of these UPS have empty footprints for inverter power transistors and their resistors. The same boards are used across several models in the series, and on the smaller models some positions are left unpopulated. Fit transistors and gate resistors into these places, and the inverter current is shared between more transistors.
What it gives:
- each transistor runs cooler, because the current is shared;
- more headroom for peaks (motor starts, power supplies with big input capacitors);
- so long discharges at high load are less stressful.
What it does not give by itself:
- the transformer is the same. It decides how much the UPS can deliver for a long time, and it is what heats up under overload;
- the firmware counts overload against the model rating. So the UPS still signals overload at 100 % of its rated power;
- battery current: the wires, connector, BMS and fuse are sized for the rating (see the tables above).
We fitted transistors and resistors identical to the ones already on the board.
⚠ The transistors must be the same type as the stock ones, from one batch, with a thermal pad to the heatsink, and with all their gate resistors. One transistor without its resistor, and the current balance is broken.
The full COM port command list
APC Smart protocol: one character, one command. The list is compiled from the protocol description in the NUT documentation and at kirbah.github.io/apc-ups. Some commands work only on some models; the UPS answers unsupported ones with NA.
Mode and link check
| Command | What it does | Reply |
|---|---|---|
Y | enter “smart” mode — always first | SM |
R | leave it (and PROG mode) | BYE |
| Ctrl+A | model | SMART-UPS 1000 |
b | firmware version | 652.12.I |
V | old firmware code | — |
a | protocol version, available commands | long string |
| Ctrl+Z | allowed values of every parameter | long string |
n | serial number | (do not publish) |
m | manufacture date | 09/09/05 |
y | copyright | (C) APCC |
Measurements (read-only)
| Command | What | Example |
|---|---|---|
B | battery voltage (as the UPS voltmeter sees it) | 27.40 |
g | nominal battery voltage | 024 |
f | battery charge, % | 100.0 |
j | estimated runtime, min | 0117: |
P | load, % | 012.3 |
C | temperature inside the UPS, °C | 030.1 |
L | mains input voltage | 216.0 |
M / N | highest / lowest mains voltage since the last query | 218.4 |
O | output voltage | 216.0 |
F | mains frequency | 50.00 |
9 | line quality | FF — fine, 00 — bad |
Q | status flags (table below) | 08 |
G | cause of the last transfer to battery | R, H, L, T, O, S |
X | self-test result | OK, BT, NG, NO |
~ ' 8 | status registers 1, 2, 3 (table below) | 00 |
> | number of external battery packs | 000 |
Settings (changed with + / -)
| Command | What | Values |
|---|---|---|
> | external battery packs | 0, 1, 2… |
x | last battery replacement date | date |
c | UPS name (up to 8 characters) | text |
E | self-test interval | 336 (14 days), 168 (7), ON (at power-on), OFF |
q | “battery low” warning — how many minutes before the end | the model’s set of values: + / - step through it |
k | alarm delay | 0 (5 s), T (30 s), L (low battery only), N (off) |
p | shutdown delay after a command | seconds, the model’s set of values |
r | turn-on delay after mains returns | seconds, the model’s set of values |
e | minimum charge before the UPS powers its output after mains returns | 00 (0 %), 01 (15 %), 02 (25 %), 03 (90 %) |
l / u | low / high mains limit for transfer to battery | volts, the model’s set of values (ours: 208 / 253) |
o | output voltage on battery | 220, 230, 240 |
s | mains sensitivity | H, M, L |
Actions
| Command | What it does | Note |
|---|---|---|
A | LED and beeper test | 2 s |
W | self-test (like the Test button) | result via X |
U | simulate a mains failure | the UPS goes to battery |
D | runtime calibration | only at 100 % charge; a second D aborts |
S | shut down after delay p (on battery only) | turns back on when mains returns |
@nnn | shut down and turn on after nnn tenths of an hour | pause between characters |
K K | shut down after the delay | twice, more than 1.5 s apart |
Z Z | shut down immediately | twice, more than 1.5 s apart |
| Ctrl+N Ctrl+N | turn on | twice, more than 1.5 s apart |
| Delete (0x7F) | cancel S, @, K | |
z | ⚠ reset settings to factory defaults |
Status flags Q (hexadecimal, bits)
| Bit | Meaning |
|---|---|
| 0 | calibration in progress |
| 1 | SmartTrim — lowering high mains voltage |
| 2 | SmartBoost — raising low mains voltage |
| 3 | on mains |
| 4 | on battery |
| 5 | overload |
| 6 | battery low |
| 7 | replace battery |
Common values: 08 — on mains, all fine; 10 — on battery; 50 — on battery and low.
Status registers
| Register | Bits used on Smart-UPS |
|---|---|
~ (1) | 6 — ready to power the load on command; 7 — on command or when mains returns |
' (2) | 4 — DC imbalance; 6 — SmartTrim / SmartBoost relay fault |
8 (3) | 0 — shut down on low battery; 1 — cannot go to battery due to overload; 2 — main relay fault; 3 — sleeping after @; 4 — shut down after S; 5 — charger fault; 7 — temperature above normal |
Messages the UPS sends on its own
| Character | What happened |
|---|---|
! | mains lost, the UPS is on battery (repeats every 30 s) |
$ | mains returned |
% | battery low |
+ | battery recharged to the set level |
? | abnormal condition (overload etc.) |
= | abnormal condition cleared |
* | about to cut the output |
# | replace battery (every 5 hours) |
| | a setting in memory was changed |
PROG service mode
| Command | What |
|---|---|
1 … pause 2–4 s … 1 | enter, reply PROG |
0 4 5 6 | constants (table in step 2) |
B | battery voltmeter calibration |
L | mains voltmeter calibration |
| Ctrl+B | model code — ⚠ do not change |
R | leave, reply BYE |
| Ctrl+Y | ⛔ erases the EEPROM — never |
Summary: the order of work
- An 8S LiFePO4 battery with a BMS, a fuse at the battery, wires and an Anderson connector from the tables above.
- First connection through a precharge resistor.
- A 940-0024C COM cable, terminal 2400 8N1,
Y→SM. - Write down all constants (
PROG:0,4,5,6,B). >— battery pack count to match the LiFePO4 capacity.Bin PROG — bring the real charge voltage to 27.4–27.6 V (multimeter on the battery). Check the low cut-off. Set the external supply voltage by the same multimeter.- Fully charge the battery with the separate charger, then
D— calibration at a load of 35 % or more. - SUA1000I: a 12 V fan through an LM317 with a ceramic thermal switch, remove the plastic SmartSlot cage. SUA1500I: optionally an LM317 on the fan and an aluminium lid.
- Test a long discharge at your own load: temperature
C, runtimej, battery voltage with a multimeter.
Article changelog
| Date | What changed |
|---|---|
| 2026-11-07 | First version (draft): 8S LiFePO4, wires and connectors, charging, the COM port and all commands, voltmeter calibration, cold start, cooling and mods from our own experience, capacitors, transistors. |