| .github | ||
| documents | ||
| examples | ||
| firmware | ||
| HomeAssistant_Dashboards | ||
| images | ||
| packages | ||
| pvbrain2 | ||
| LICENSE | ||
| README.md | ||
| secrets.yaml | ||
| yambms_config.yaml | ||
| yambms_custom.yaml | ||
| YamBMS_Local_Packages_example.yaml | ||
| YamBMS_LP_PVbrain2.yaml | ||
| YamBMS_Remote_Packages_example.yaml | ||
| YamBMS_Remote_Packages_example_dev_branch.yaml | ||
| YamBMS_RP_Balancer.yaml | ||
| YamBMS_RP_BMS_BASEN_RS485.yaml | ||
| YamBMS_RP_BMS_DEYE_CAN.yaml | ||
| YamBMS_RP_BMS_EG4_RS485.yaml | ||
| YamBMS_RP_BMS_JBD.yaml | ||
| YamBMS_RP_BMS_JK-B_RS485_Modbus.yaml | ||
| YamBMS_RP_BMS_JK-PB_RS485_Modbus.yaml | ||
| YamBMS_RP_BMS_JK_BLE.yaml | ||
| YamBMS_RP_BMS_JK_UART_4G-GPS.yaml | ||
| YamBMS_RP_BMS_PACE_RS485_Modbus.yaml | ||
| YamBMS_RP_BMS_SEPLOS_V1_V2_RS485_Modbus.yaml | ||
| YamBMS_RP_BMS_SEPLOS_V3_RS485_Modbus_sniffer.yaml | ||
| YamBMS_RP_DEMO.yaml | ||
| YamBMS_RP_Ethernet_board.yaml | ||
| YamBMS_RP_PVbrain2.yaml | ||
| YamBMS_RP_RPi_Pico_Shunts_modbus_server.yaml | ||
YamBMS ( Yet another multi-BMS Merging Solution )
Tip
This page contains many links to other README. If you don't find answers to your questions, you'll find all the README in this folder.
Tip
Not sure which YAML to choose ? ... YamBMS_Remote_Packages_example.yaml is a good basis for creating your custom YAML. Examples of
BMS,ShuntandBalancerpackages can be found in the examples folder. You don't have to import a shunt or balancer but you must import at leastone BMS. You can mix differentBMSmodels, the only condition is that thebms_idare numbered in order starting from1!
Important
The most important thing for proper functioning of YamBMS is that the voltage of your BMS is well calibrated. YamBMS logic is based on the
min_cell_voltageandmax_cell_voltagevoltages of yourBMS. If you useYamBMS, the internal charging logic of theJK-PB BMSwill not be used. Please read the documentation and the setup instructions.
Sends over CAN / RS485 bus to your inverter :
- Battery Voltage
- Battery Current (+charge, -discharge)
- State of Charge (SoC)
SoC 100% will be sent to your inverter only when the battery is fully charged - State of Health (SoH)
- Requested Charge Voltage
- Requested Charge Current
- Requested Discharge Voltage
- Requested Discharge Current
- Min Cell V. and Cell ID
- Max Cell V. and Cell ID
- Min temperature and sensor ID
- Max temperature and sensor ID
- Battery name
- Alarms & Warnings
Come and discuss it on the DIY Solar Forum dedicated topic.
Contents
- Supported devices
- Hardware and schematic instructions
- YamBMS behavior
- YamBMS functions
- YamBMS charging logic
- Installation procedure
- Troubleshooting
- Changelog
YamBMS ( Yet another multi-BMS Merging Solution )
Home Assistant
Hardware highlighted
This project works with various ESP32 variants and also with the Raspberry Pi Pico (RP2040).
Note that merging data from multiple BMS, balancers and shunts is resource-intensive, so I highly recommend a board based on the ESP32-S3 with PSRAM.
| LilyGo T-Connect | Waveshare RS485-CAN | M5Stack AtomS3R |
|---|---|---|
| - ESP32-S3 - 8MB PSRAM - 3x RS485 port - 1x CAN port - 15x GPIOs |
- ESP32-S3 - 8MB PSRAM - 1x RS485 port - 1x CAN port - 1x SH1.0 connector - 16x GPIOs |
- ESP32-S3 - 8MB PSRAM - 1x BASE port (for adding RS485/CAN base) - 1x UNIT HY2.0 port (for adding RS485/CAN unit) - 6x GPIOs |
![]() |
![]() |
![]() |
Single-node
You install YamBMS on a single ESP32 connected to your BMS and your inverter.
- Max 3x BMS BLE
- Max 3x BMS UART
- several RS485 BMS on the same bus
Multi-node
Each BMS/Shunt/Balancer turns into a modbus server with its own address.
Important
The max number of
UARTBMS/Shunt per ESP32 is2(unless you use a UART expander) because you need to keep the lastUARTfor theRS485network. The max number ofBLEBMS/Shunt/Balancer per ESP32 is2, ESP32-S3 / AtomS3 can supervise3BLE devices.
YamBMS installs on node1 as a modbus client to collect information from all your BMS.
The node1 is also connected to your inverter via the CAN bus.
The BMS/Shunt are connected to other ESP32 nodes connected on a dedicated RS485 bus for YamBMS. Each BMS/Shunt/Balancer becomes a modbus server.
The theoretical limit is 256 modbus server (BMS/Shunt) per RS485 bus but in reality this will depend on the capabilities of node1 (YamBMS) which will have to combine all the BMS/Shunt/Balancer together.
You can find more information about creating your YAML in this How To.
Tip
If you have a lot of
BMS/Shunt/Balancerto combine, using anESP32-S3orAtomS3fornode1is recommended.
@GHswitt multi-node example :
Note
Some boards with integrated
RS485 transceiverhave already a 120 Ohm resistor installed, for example theLilyGo T-CAN485,LilyGo T-ConnectandLilyGo T-Connect Pro. If these devices are used in the middle, this resistor must be removed! Otherwise transmission errors can occur.
Try YamBMS with the DEMO firmware
You can simply test the application with a generic ESP32 without compiling and connecting anything on your ESP32.
The DEMO firmware is composed of 3x BMS and 1x Shunt (fake) for a 48V LFP system.
Important
YamBMS_DEMO_ESP32.factory.binis intended for a generic ESP32, does not work with ESP32-S3. If you want to testYamBMS DEMOwith another board you need to compile the firmware with theYamBMS_RP_DEMO.yaml.
- Download YamBMS_DEMO_ESP32.factory.bin
- Follow the procedure explained in this document.
If you want to add a CAN transceiver on this DEMO board here are the GPIOs to connect it to :
tx_pin: 23 # to CAN board CTX
rx_pin: 22 # to CAN board CRX (with 4.7K resistor except for SN65HVD230)
Requirements
- ESPHome 2025.11.0 or higher
- ESP32 MCU (buying a board with ≥8MB flash is advised if you intend to monitor multiple BMS)
- CAN transceiver (only with TJA1050/TJA1051 => 4.7K resistor for 5V to 3V3 level shifing)
- BMS JK, JBD, Seplos (other BMS brands already integrated with ESPhome can be added easily)
- Inverters supporting CAN PYLON/GoodWe/SMA/Victron Low Voltage protocol
- Optional: 48V to 5V DC-DC converter to power the ESP32 from the JK-BMS VBAT pin (URB4805YMD-10WR3 or VRB4805S-6WR3)
- Optional: JK RS485 adaptor and RS485 to TTL 3V3 adaptor (see schematic section)
Data collection
Note
For your information, in January 2026 there were
160YamBMS users.
If the ESP32 has an internet connection, the following data is sent to this script for statistics collection. Only @Sleeper85 have access to this information for the production of statistics, the support and the update service.
- ESP32 MAC address
- YamBMS version
- Board chip
- Board name
- BMS model
- BMS count
- CAN bus name
- CAN bus protocol
- Uptime
- Current date and time
References
- Thanks to @syssi for help and developing many BMS components (JK, JBD, Seplos, Pace, etc.).
- Thanks to @txubelaxu for help and developing the
JK_RS485component. - Thanks to @shvm, @MrPabloUK and @GHswitt for their multiple contributions.
- Thanks to @Fahmula for developing the
PYLON RS485component. - Thanks to @uksa007 for the development of the first CANBUS code.
- Thanks to all the contributors.








