JK-BMS Battery Monitor with Web-UI & BLE Proxy (M5Stack AtomS3)

Subject: [Project Share] JK-BMS Battery Monitor with Web-UI & BLE Proxy (M5Stack AtomS3)

Hi everyone,

I wanted to share a project I’ve been working on to solve a common pain point for many of us using JK-BMS (Jikong) systems with Home Assistant.

While the JK-BMS is great hardware, monitoring it often requires either a proprietary app or a complicated ESPHome setup where you have to hard-code MAC addresses and reflash every time you want to change a setting. My goal was to create a “bridge” that is easy to set up and fully integrated into the HA ecosystem.

I’ve developed an ESPHome-based monitor specifically optimized for the M5Stack AtomS3 that brings everything into a user-friendly Web-UI and seamless HA integration.


:rocket: Key Highlights & Home Assistant Integration:

  • Native Home Assistant Discovery: All 32 cell voltages, resistances, and BMS parameters (SOC, Current, Wattage) are automatically discovered as entities in HA via the ESPHome integration.
  • Integrated BLE Proxy: The device acts as a Bluetooth Proxy for Home Assistant. It not only monitors your battery but also extends your HA Bluetooth range to track other nearby sensors.
  • Dual HA Switch Control: You can map the physical button on the AtomS3 to toggle up to two independent Home Assistant switches (e.g., your inverter or a charger) directly from your battery pack.
  • Zero-Code Configuration: Set your BMS MAC address and your HA Entity-IDs directly via a web interface—no recompiling or YAML editing needed.
  • Dynamic LCD UI: Three beautiful pages on the device showing SOC/Voltage, Real-time Power Flow, and Cell Diagnostics.
  • Easy Setup: Features a boot-up QR code for instant WiFi connection and captive portal for headless setup.

:desktop_computer: Screenshots:


*


:hammer_and_wrench: Hardware Needed:

  • M5Stack AtomS3 (ESP32-S3)
  • Any JK-BMS supporting the JK02 protocol (most modern 4S-32S models).

:link: Get Started here:

You can find the full YAML, English/German documentation, and the automated build releases on my GitHub:

:point_right: GitHub - Janek0501/JK-BMS-Battery-Monitor-HA


I’d love to hear your feedback or see how you’re using it in your DIY powerwall projects!

1 Like

:rocket: Release v1.1.0 – Adaptive Power & Pulse Mode :battery::sparkles:

This update makes the monitor significantly smarter and protects the display with new automated functions. Diagnostic data compatibility has also been improved.

:star2: New Features

  • :zap: Intelligent kW Display:
    When power exceeds 1000W, the display automatically switches from Watts (W) to Kilowatts (kW) with one decimal place (e.g., 1.2 kW). This ensures optimal readability and prevents text overflow.
  • :heart: “Pulse” Mode (Auto-Wakeup):
    The display can now be set to light up automatically at a fixed interval (configurable). Ideal for checking the status while walking by without having to physically press a button.
  • :battery: Dual-SOC System:
    In addition to the BMS SOC, there is now a voltage-based SOC sensor. You can select which value takes priority on the display via the web interface. Both values remain available separately in Home Assistant.
  • :stopwatch: Extended Timeouts:
    Both the screensaver (Auto-Off) and the Pulse mode (Auto-Wakeup) are now easily configurable via the web interface or Home Assistant.

:hammer_and_wrench: Improvements & Bugfixes

  • :broom: Clean-Data Filter: Sensors for Hardware and Software versions are now filtered. Messy special characters (a common “box” character bug in some BMS firmwares) are automatically removed.
  • :shield: Entity Safety: All existing Entity IDs (SOC, cell voltages, etc.) have been preserved. Your long-term statistics in Home Assistant will remain fully intact.
  • :abcd: Font Upgrade: The font has been updated to include the character “k” to correctly display the new kW indicator.
  • :satellite: Wi-Fi Stability: Optimized mDNS handling for more stable network accessibility.

:bar_chart: New Entities (Sensors)

Entity Description
sensor.bms_soc_voltage Newly calculated SOC based on total voltage.
number.display_auto_on_interval Configuration for Pulse mode (in seconds).
number.display_auto_off_timeout Configuration for the screensaver (in seconds).
select.config_soc_source Toggle for display source (BMS vs. Voltage).

:warning: Installation Note

Due to the expanded configuration: If the OTA update (over-the-air) fails (e.g., due to RAM limits during compilation), please flash the device once via USB. Future updates will then work via Wi-Fi as usual.