Why Battery Cooling Isn't Just About Throwing a Fan at It
Most people think cooling a lithium-ion battery bank means pointing a computer fan at the pack and calling it a day. That approach works fine until the cells start showing uneven temperatures, which is usually when the BMS throws a fit and shuts the system down. Proper thermal management is more about airflow geometry than raw CFM. I put together this guide because I kept seeing people wire up fan controllers for their battery rooms and then wonder why they still got thermal throttling. The problem is almost always that they're treating the batteries like they need constant 100% fan duty. They don't. The useful part of Li-ion cooling is the differential, not the absolute airflow rate. Here's the setup I actually use, and what actually matters about it.
The Basics: What You Need to Understand First
Lithium iron phosphate (LFP) cells operate comfortably between 15°C and 35°C. NMC and other cobalt-based chemistries are less forgiving and can start degrading noticeably above 40°C. The issue isn't just peak temperature. It's temperature spread between cells. A 5°C spread across your pack can trigger the BMS to limit charge or discharge, which makes the whole system feel sluggish and unpredictable. A fan setup needs to address both the average temperature and the variance between cells. These are two different problems that require different airflow strategies.
Hardware You Actually Need
For a typical home battery installation or small-scale energy storage, you don't need industrial blowers. Here's what works in practice: The 24V DC choice isn't arbitrary. You can run these directly from the battery bus with a simple buck converter, or wire them through the BMS's auxiliary output if it has one. Avoid 12V computer case fans unless you plan to run them through a separate supply. They wear out fast when you push them at constant high RPM for months on end. I built my first proper battery cooling rig around 2022 for a 19.2kWh LFP wall in my garage. The enclosure was a repurposed industrial cabinet with sealed doors. I mounted two 140mm fans on opposite sides of the lower third of the rack, pushing air across the cell surfaces rather than blowing into the gaps between modules. That was the key insight most people miss.
Get the Full Details

I ran four DS18B20 probes, one on each corner of the pack, and wired them to an ESP32 that handled the PID control loop. The fans ramped from zero to full based on the average of those four readings, with a hard cutoff at 45°C regardless of what the algorithm wanted to do. The ESP32 also logged every reading to a microSD card so I could review the thermal curve after heavy charge or discharge cycles. The whole thing cost roughly $80 in parts and took about three hours to assemble. The control logic added another two hours spread across a weekend.
Common Mistake That Wastes Money
I watched someone on a solar forum spend $200 on a high-CFM centrifugal blower for his battery shed. The blower moved a lot of air but created a dead zone right where his warmest cells were sitting because of how the air recirculated inside the enclosure. He ended up swapping it for two quiet 120mm fans and a piece of cardboard divider, and the thermal spread went from 8°C down to 2.5°C. High airflow into a poorly designed path is worse than moderate airflow with good direction. If you're going to build a plenum or duct system, test it with smoke first. Aincense stick or a vape pen works fine. Watch where the air actually goes before you seal everything up.
When Fan Cooling Is Not the Answer
There are scenarios where pushing air around won't solve your problem, and it's worth knowing those before you buy anything. If your batteries are in an uninsulated space that hits 45°C ambient in summer, fans will just circulate hot air. In that case you need either passive ventilation with a stack effect (intake low, exhaust high) or actual refrigeration. I've seen people try to solve a 50°C shed problem with fans for three summers before they accepted that the math didn't work. Similarly, if your BMS already has liquid cooling channels and you add a fan setup on top of that, you're not gaining much. Liquid cooling handles thermal spread better because the coolant contacts the cell surface directly. Fans are a supplementary measure at that point, not a primary solution.

Monitoring and Troubleshooting
Set up a simple dashboard. Home Assistant, Grafana, or even a spreadsheet with serial data pulls from your ESP32. You want to see at minimum: ambient temperature, average cell temperature, max delta between probes, and fan RPM over time. Run a load test after you install the system. Charge the bank at your normal rate while watching the thermal logs. If the delta between your coldest and warmest probe climbs above 4°C during a standard charge, your airflow path needs adjustment. Move a duct. Redirect a fan. Add a baffle. This is iterative work and there is no single correct configuration. One thing I noticed after six months of running my system: the fans started pulling more current at the same RPM as the bearings dried out. I replaced them with sealed bearings and the draw dropped back to spec. Check your current readings monthly. A gradual increase in amperage at steady RPM is usually the first sign of bearing wear before the fan actually fails.
Download Link and Further Reading
I keep an updated version of this guide on my site with wiring diagrams, the ESP32 firmware, and a parts list with current pricing. You can grab it here: Rev Up Your Safety A Comprehensive Liion Battery Fan Setup And Usage Guide The firmware is open source if anyone wants to modify it for NMC cells or different enclosure geometries. I've had a few people reach out with requests for a version that interfaces with Victron or ESS systems directly instead of the standalone ESP32 approach. That's on my list.
What I'd Do Differently
If I were building this today, I'd skip the PID loop entirely and go with a simple threshold-based controller. The PID tuning I spent weeks on turned out to be unnecessary because the thermal mass of the batteries smooths out any oscillation anyway. A bang-bang controller with a 2°C hysteresis band does the same job and can't be misconfigured. I learned that after burning through three weekends on tuning curves that barely mattered in practice. Also, I'd add a humidity sensor. Moisture inside a sealed battery enclosure is a slow killer for contacts and Bus bars, and condensation can form on cold cell surfaces if the dew point shifts unexpectedly. I didn't have that on my first build and found corrosion on two terminal bolts after year two. A cheap DHT22 costs five dollars and gives you data you'll actually use once a year during a maintenance check.
