Battery BMS
Read battery packs over Bluetooth or a cable, and combine them into banks.
RS232 serial
Read inverters that talk over a serial cable in their own protocol.
Home Assistant
Use any Home Assistant entity as a metric.
Every lithium battery pack has a battery management system (BMS) that knows exactly what's going on inside: the state of charge, each cell's voltage, the temperatures and the current. The Battery management (BMS) source reads that directly, over Bluetooth or a cable, and can combine several packs into one battery bank.
Bluetooth BMS
Bluetooth support is built in and uses the computer's Bluetooth adapter. On Docker, see Install with Docker for what the host needs.
Epilykos understands packs through the aiobmsble library, which covers JK, JBD, Daly, Seplos, ANT, Renogy, EG4, PACE and many more.
In Settings → Sources, press + Add Bluetooth BMS and give it a name.
Close the battery's phone app first, then press 🔍 Scan and pick your pack. Packs Epilykos recognises are labelled with their type.
Press Test Connection, then 📥 Load BMS Metrics, choose the readings you want to keep, and Save changes.
Readings are saved as bms_<name>_<key>, for example bms_pack1_voltage, bms_pack1_current,
bms_pack1_battery_level, bms_pack1_cell_voltage_1 and bms_pack1_temp_1.
If the scan finds a rebranded pack but doesn't recognise it, set its type (JBD, JK, Daly, Seplos, ANT, PACE / PACEEX) next to the MAC address. Otherwise leave it on auto-detect.
Good to know:
- Most packs accept only one Bluetooth connection at a time, so keep the phone app closed while Epilykos is connected.
- All Bluetooth devices share one adapter and are read one after another; allow about 10 seconds per device in their read intervals.
- Bluetooth reaches about 10 metres. On a Raspberry Pi 3, a USB Bluetooth adapter is more reliable than the built-in one.
- On JBD and JK packs, you can also switch charging and discharging on and off from the Controls page.
Wired BMS
Wired BMS connects to the pack's RS-485 or RS-232 port through a USB adapter. Press + Add wired BMS, then pick the serial port and a profile; the serial settings are filled in from the profile.
| Profile | Packs | Wiring | Serial settings |
|---|---|---|---|
| JBD / Jiabaida Smart BMS | JBD, Jiabaida, Xiaoxiang, Overkill Solar and rebrands | The UART port (TX, RX, GND) through a USB-TTL adapter, or the RS485 port (A, B) on boards that have one | 9600 8N1, no unit ID |
| JK-BMS | JK-B and JK-BD boards | The JK RS485 adapter in the GPS port, with A/B to a USB-RS485 adapter; or the GPS port's TX/RX/GND to a USB-TTL adapter | 115200 8N1, no unit ID |
| PACE BMS (protocol 25) | Jakiper, Easun, Tewaycell, Greenrich, FSP, Eenovance and many rebrands | The pack's RS232 port (usually RJ11 or RJ12) or its RS485 port | 9600 8N1 (a few packs use 19200); set the pack address to its DIP-switch address, usually 1 |
| Cworth CE-H6K / CE-LBW-48100C | Cworth PACE packs | COMM port pin 7 to RS485-A and pin 8 to RS485-B, and nothing else | Modbus-RTU, 9600 8N1 |
Never connect the BMS's power pin
- JBD: leave the UART port's power pin (often +12 V or VBAT) unconnected.
- JK: leave the GPS port's VBAT pin unconnected.
- Cworth: pin 3 carries +5 V. Connect only pins 7 and 8, and don't use a straight-through 8-pin cable.
A few more notes:
- JBD: the Bluetooth module and the wired port usually share the same connection inside the BMS. Unplug the Bluetooth module to use the cable, or just use Bluetooth instead.
- PACE: if the pack doesn't answer, try its other port, because on many packs the RS485 / CAN port is set up to talk to an inverter. Older protocol 20 packs (such as the EG4 LifePower4) aren't supported.
- JK: the newer JK-PB inverter BMS uses a different protocol and isn't supported.
- Cworth: you can read only one pack per RS485 adapter, because the packs all start at address 0 and there's no documented way to change that over the cable. Also, its current is negative while charging, the opposite of the other profiles, where positive means charging.
Wired JBD and JK packs use the same metric names as over Bluetooth (voltage, current,
battery_level, cell_voltage_N, temp_N), so your dashboards and banks work with either.
Battery banks
If your battery is made up of several packs, a battery bank combines them into one and works out the totals for you. Press + Add battery bank, give it a name, and tick the packs that belong to it. Capacity (Ah) is optional; leave it blank to use the capacity each BMS reports.
Add the usual battery metrics sets up the common readings in one go:
| Reading | How it's worked out |
|---|---|
soc | Charge, weighted by each pack's capacity |
voltage | Average |
current | Added up |
power | Added up |
temperature | Highest |
cell_voltage_min | Lowest |
cell_voltage_max | Highest |
+ Add metric lets you add your own, using Add up, Average, Lowest, Highest,
Charge, weighted by capacity, Add up, weighted by capacity or Newest reading. Weighted
calculations use each pack's capacity: the Ah you entered, or else what the pack reports. Bank
readings are saved with bank_ in front of their names, and a bank with just one pack simply passes
its readings through.
Press Test bank to check the result before you save.
Last updated on