Skip to content

Sleeper85/esphome-yambms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

YamBMS ( Yet another multi-BMS Merging Solution )

Badge License: GPLv3 Badge Version GitHub stars GitHub forks GitHub watchers "Buy Me A Coffee"

Warning

I'm currently working on releasing YamBMS 1.6.0, which will be compatible with ESPHome >= 2025.11. ESPHome 2025.11.0 introduces many changes and still contains many bugs. For the time being, I advise you to stay with ESPHome 2025.10.5.

Tip

Not sure which YAML to choose ? ... YamBMS_Remote_Packages_example.yaml is a good basis for creating your custom YAML. Examples of BMS and Shunt packages can be found in the examples folder. You don't have to import a shunt but you must import at least one BMS. You can mix different BMS models, the only condition is that the bms_id are numbered in order starting from 1 !

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_voltage and max_cell_voltage voltages of your BMS. If you use YamBMS, the internal charging logic of the JK-PB BMS will not be used. Please read the documentation and the setup instructions.

ESPHome application to monitor BMS and communicate with inverters
supporting CAN bus protocol compatible with Pylontech, GoodWe, SMA,
Victron or Luxpower (EG4).
Buy Me A Coffee
Note: Pylontech uses 15S/48V and many others uses 16S/51.2V !

Other battery profiles that utilise the PYLON protocol with different cell counts
may also work, e.g. Alpha Ess Smile, BYD Battery-Box LV Flex Lite.
Select the correct battery profile in the inverter to match your battery pack !
The ESP32 communicates with the BMS using the BLE / UART / RS485
protocol and then sends the CAN bus frames to the inverter via the
CAN bus transceiver.
Buy Me A Coffee

Sends over CAN bus to 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)
  • Max cell V. and ID
  • Min cell V. and ID
  • BMS temperature
  • Charging voltage
  • Charging max amps
  • Discharge min voltage
  • Discharge max amps
  • Battery name
  • Alarms: Cell over/under voltage, Charge/discharge over current, High/low Temp, BMS fault

Note: this code support multi-BMS and multi-shunt connection per inverter with a single ESP32 and should work with inverters that support the CAN bus protocol PYLON, SMA, Victron or LuxPower (EG4). I'm only testing it with my Deye SUN-6K-SG03-LP1-EU inverter.

This project is still in development and testing...

Dedicated topic on DIY Solar Forum

Contents

  1. Supported devices
  2. YamBMS behavior
  3. YamBMS functions
  4. Charging logic
  5. CAN bus protocol
  6. Hardware and schematic instructions
  7. Installation procedure
  8. Troubleshooting

YamBMS ( Yet another multi-BMS Merging Solution )

Image

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 ESP32-S3-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 turns into a modbus server with its own address.

Important

The max number of UART BMS/Shunt per ESP32 is 2 (unless you use a UART expander) because you need to keep the last UART for the RS485 network. The max number of BLE BMS/Shunt per ESP32 is 2, ESP32-S3 / AtomS3 can supervise 3 BLE 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 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 together.

You can find more information about creating your YAML in this How To.

Tip

If you have a lot of BMS/Shunt to combine, using an ESP32-S3 or AtomS3 for node1 is recommended.

Image

Home Assistant

Image

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.bin is intended for a generic ESP32, does not work with ESP32-S3. If you want to test YamBMS DEMO with another board you need to compile the firmware with the YamBMS_RP_DEMO.yaml.

  1. Download YamBMS_DEMO_ESP32.factory.bin
  2. 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.6.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 June 2025 there were 100 YamBMS 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 making many BMS components (JK, JBD, Seplos, Pace, etc.)
  • Thanks to @txubelaxu for help and making the JK-PB RS485 component.
  • Thanks to @uksa007 for making the original CANBUS code.

About

Yet another multi-BMS Merging Solution

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Contributors 11