The Ancel BA101 lead-acid Battery Tester is an easy-to-use and versatile lead-acid battery tester for car, UPS or other similar batteries. The tester has a mini-USB serial output port, which can be used to log and report the measured test data. Unfortunately, the software it comes with is proprietary, closed source, runs only on Windows, and cannot be downloaded without making an account on the Ancel website. I've also found that the application is riddled with malware: https://www.virustotal.com/gui/file/cd8099a0cead0a39b92f72bd584ac6d99bc8f902dcbfa5987bf160bdecdd94d9
This repo builds on ancel-tester written by SilverGreen93, which proposes a platform agnostic python3 script which connects to a serial port, receives the data from the Ancel BA101 Battery Tester and displays it in the terminal so that it can be logged and/or printed as needed. It has been included for reference. He did the hard part, so give him some credit.
This app will detect active COM ports on the computer, simplifying COM port selection.
It can be run directly on Windows and Linux (not tested on Linux).
Read the Ancel BA101 manual here: Ancel_BA101_User_manual.pdf
Official Ancel product page: https://www.ancel.com/products/ancel-ba101
- Python 3 installed
- Python 3 serial library:
pip install pyserial
- Python 3 customtkinter library:
pip install customtkinter
- Connect Ancel BA101 via USB cable to PC.
- Execute the Python script
ancel_data_print_app.py
and select the COM port from the combobox. - Click Connect. The script will wait for data to be received.
- On the Ancel BA101 tester, go to Print Data and press Enter.
- The most recent battery test data will be transmitted via serial and displayed in the Window. Copy the output and paste it into a text file for printing. Close the program as you would any other, or click Connect to reconnect to the BA101.
Example:

- Print Function - Print directly from within the app.
- Data Selection - Select which data to collect (and display).
The data format specification was not provided by Ancel, but was manually reverse engineered. Some values might be not right.
Offset | Raw data example | Decoded data example | Meaning |
---|---|---|---|
0 | E6 7C | - | Initial marker (?) |
2 | 1A | - | ?? |
3 | 00 | GOOD | Battery status 00: GOOD 01: GOOD, RECHARGE 02: BAD, REPLACE 03: REPLACE 04: CHARGE & RETEST |
4 | 05 14 | 1300 | Battery voltage x 0.01V |
6 | 00 C3 | 195 | Measured amps |
8 | 06 1D | 1565 | Internal resistance x 0.01mΩ |
10 | 00 64 | 100 | Health percentage |
12 | 00 64 | 100 | Charge percentage |
14 | 00 87 | 135 | Rated amps (A) |
16 | 0A | CA | Selected measuring standard 01: CCA 02: DIN 03: JIS 04: EN 05: IEC 06: GB 07: SAE 08: MCA 09: BCI 0A: CA |
17 | 01 2C | 300 | Cranking time (ms) |
19 | 01 | NORMAL | Cranking status 01: NORMAL 02: LOW |
20 | 03 E8 | 1000 | Cranking voltage x 0.01V |
22 | 05 AA | 1450 | Unloaded voltage x 0.01V |
24 | 05 6E | 1390 | Loaded voltage x 0.01V |
26 | 00 0C | 12 | Ripple (mV) |
28 | 01 | LOW | Charging status 00: NO OUTPUT 01: LOW 02: NORMAL 03: HIGH |
29 | FE 7F | - | Final marker (?) |