Homeassistant E3DC Integration
Monitor and control various Battery management systems (BMS) over Bluetooth and send the results to Home Assistant.
https://github.com/fl4p/batmon-ha
Category: Energy Storage
Sub Category: Battery
Keywords
ant-bms battery-management-system battery-monitor ble bluetooth bluetooth-low-energy daly-bms dalybms home-assistant jbd-bms jikong-bms jk-bms jkbms mqtt seplos-bms smart-bms smartshunt sok-bms victron xiaoxiang
Last synced: about 14 hours ago
JSON representation
Repository metadata
Add-on for Home Assistant to connect JK, JBD, Daly, ANT, SOK, Supervolt and other BMS via Bluetooth
- Host: GitHub
- URL: https://github.com/fl4p/batmon-ha
- Owner: fl4p
- License: mit
- Created: 2022-01-06T19:36:55.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2025-12-13T16:48:37.000Z (about 1 month ago)
- Last Synced: 2026-01-11T13:40:24.378Z (3 days ago)
- Topics: ant-bms, battery-management-system, battery-monitor, ble, bluetooth, bluetooth-low-energy, daly-bms, dalybms, home-assistant, jbd-bms, jikong-bms, jk-bms, jkbms, mqtt, seplos-bms, smart-bms, smartshunt, sok-bms, victron, xiaoxiang
- Language: Python
- Homepage:
- Size: 658 KB
- Stars: 443
- Watchers: 19
- Forks: 91
- Open Issues: 81
- Releases: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
README.md
Home Assistant Add-on: BatMON
Monitor and control various Battery management systems (BMS) over Bluetooth. This add-on reads the BMS and sends sensor
data through MQTT to Home Assistant. Using bluetooth on the Home Assistant host system, it does not need any additional
hardware (no USB, Serial, RS485 or ESP32). It can also run without HA on Linux, macOS and Windows.
I created this to compare BMS readings for a detailed evaluation of BMS reliability and accuracy.
Features
- Uses Bluetooth Low-Energy (BLE) for wireless communication
- Captures SoC, Current, Power, individual cell voltages and temperatures
- Monitor multiple devices at the same time
- Energy consumption meters (using trapezoidal power integrators)
- Integrates with Home Assistant Energy dashboard and Utility Meter sensor helper
- Control BMS charging and discharging switches
- Home Assistant MQTT Discovery
- Can run as stand-alone app without Home-Assistant an directly write to InfluxDB
- Battery Groups for parallel batteries, see doc/Groups.md
- Charge Algorithms, see doc/Algorithms.md
- Short delays for responsive automation (fast load shedding)
- Experimental serial communication (e.g. using USB-UART adapter)
- Current sensor gain calibration
Supported Devices (bluetooth low energy)
Batmon comes with connectors for some popular BMS. It also wraps aiobmsble, which includes many other BMS for
read-only access.
batmon device connectors:
- JK BMS / jikong with JK02 protocol (
jk) - Daly BMS (
daly,daly2,daly_ble) - JBD / Jiabaida/ Xiaoxiang / Overkill Solar BMS (
jbd) - ANT BMS (
ant) - CBT Power / Creabest BMS (
cbtpwr) - Seplos BMS (
seplos,seplos_v2) - Supervolt BMS (
supervolt) - SOK BMS (
sok) - Tian-Power BMS (
tianpwr) - LiTime BMS (
litime) @KOSSOII - Victron SmartShunt (make sure to update to the latest firmware
and enable GATT
in the VictronConnect app) (victron) - ATORCH CW20 DC (
cw20)
aioblebms device connectors:
tdtejabcdpwrcoreecoworthyectivefelicityogtredodoroypowbraunpwrneeyprorenogy,renogy_pro- all devices aiobmsble supports
You can switch from the batmon to the aiobmsble connectors, just append a _ble to the type field, e.g. instead
of type: daly (batmon), write type: daly_ble (aiobmsble). This can help if you experience connection issues, because
some of the aiobmsble connectors are more up to date.
I tested the add-on on a Raspberry Pi 4 and 5 using Home Assistant Operating System.
Installation
- Go to your Home Assistant Add-on store and add this
repository:https://github.com/fl4p/home-assistant-addons
- Install Batmon add-on
- Install, configure and start Mosquito MQTT broker (don't forget to configure the MQTT integration)
Configuration
The add-on can read multiple BMS at the same time.
Add an entry for each device, such as:
- address: CC:44:8C:F7:AD:BB
type: jk
alias: battery1 # MQTT topic prefix (regex [\w_.-/])
pin: "12345" # pairing PSK, victron only (optional)
adapter: "hci0" # switch the bluetooth hw adapter (optional)
debug: true # verbose log for this device only (optional)
current_calibration: 1.0 # current [I] correction factor (optional)
address is the MAC address of the Bluetooth device. If you don't know the MAC address start the add-on, and you'll
find a list of visible Bluetooth devices in the add-on log. Alternatively you can enter the device name here as
displayed in the discovery list.
type can be jk, jk_24s, jk_32s, jbd, ant, daly, daly2, cbtpwr, seplos, seplos_v2, supervolt,
sok, tianpwr, victron or any tag listed under Supported Devices.
For a mock BMS use dummy.
With the alias field you can set the MQTT topic prefix and the name as displayed in Home Assistant.
Otherwise, the name as found in Bluetooth discovery is used.
If the device requires a PIN when pairing (currently Victron SmartShunt only) add pin: "123456" (and replace 123456
with device's PIN).
Add adapter: "hci1" to select a bluetooth adapter other than the default one.
With current_calibration you can calibrate the current sensor. The current reading is multiplied by this factor. Set
it to -1 to flip the sign if you experience wrong charge/discharge meters.
For verbose logs of particular BMS add debug: true.
- Set MQTT user and password. MQTT broker is usually
core-mosquitto. concurrent_samplingtries to read all BMSs at the same time (instead of a serial read one after another). This can
increase sampling rate for more timely-accurate data. Might cause Bluetooth connection issues ifkeep_aliveis
disabled.keep_alivewill never close the bluetooth connection. Use for higher sampling rate. You will not be able to connect
to the BMS from your phone anymore while the add-on is running.sample_periodis the time in seconds to wait between BMS reads. Small periods generate more data points per time.- Set
publish_periodto a higher value thansample_periodto throttle MQTT data, while sampling BMS for accurate
energy meters. On publish, samples since previous publish are averaged. Periods shorter than 2s can slow down history
plots in HA. invert_currentchanges the sign of the current. Normally it is positive during discharge, inverted its negative.expire_values_aftertime span in seconds when sensor values become "Unavailable"watchdogstops the program on too many errors (make sure to enable the Home Assistant watchdog to restart the add-on
after it exists)- For JK bms: set
typetojk_24sfor the older 24s version (firmware<11.x),jk_32sfor the newer 32s version (fw>
=11.x), orjkif you don't know (might cause invalid battery data when detection fails) - type
daly2is for a newer Daly BMS version which is untested
Energy Meters
Batmon implements energy metering by computing the integral of power values from the BMS with the trapezoidal rule. You
can add theses meters to your Home Assistant Energy Dashboard or use them with the HA Helper Utility Meter,
see doc/HA Energy Dashboard.md.
Total Energy DischargeMeter: total Energy out of the battery (increasing only, use this for the Energy Dashboard)Total Energy Charge: total Energy into the battery (increasing only, use this for the Energy Dashboard)Total Energy: The total energy flow into and out of the battery (decreasing and increasing).
This equals to(Total Energy Charge) - (Total Energy Discharge). It will increase over time because batteries are
not ideal. You can create a derivative helper to compute energy flow within e.g. 24h.Total Cycles: Total full cycles of the battery. One complete discharge and charge is a full cycle: SoC 100%-0%-100%.
This is not a value provided by the BMS, Batmon computes this by differentiating the SoC (
e.g.integrate(abs(diff(SoC% / 100 / 2)))).
The accuracy depends on the accuracy of the voltage and current readings from the BMS.
Consider these having an error of 2~5%. Some BMS do not detect small currents (<200mA) and can miss high frequency
peaks, leading to even greater error.
Troubleshooting
- Power cycle (turn off and on) the BMS Bluetooth hardware/dongle (or BMS)
- Enable
bt_power_cycle. If it doesn't work, manually power cycle Bluetooth on the host you are running batmon
on #91. - When experiencing unstable connection enable
keep_alive TimeoutError: timeout waiting: put BT devices closer, disable inverters and other EMI sources- Enable
verbose_logand check the logs. If that is too noisy setdebug: truein the BMS configuration as described
above - Try to find the BMS with a BLE
scan (Chrome Browser, linux) - After a long-lasting bluetooth connection is lost both Daly and JBD dongles occasionally refuse to accept new
connections and disappear from bluetooth discovery. Remove wires from the dongle and reconnect for a restart. - Some users reported unstable Bluetooth connection with Raspberry Pi 4 onboard bluetooth hardware and WiFi enabled. It
appears that disabling WiFi helps. (#42) - Cheap inverters might cause heavy EMI (electromagnetic interference). Turn them off or keep them away from the
bluetooth
hardware - Either bleak or bluetooth support in HA docker seems unstable. see related
issues 106 109 - Try another bluetooth hardware. Note you can choose the adapter with
adapterparameter for each BMS individually - doc/Downgrade.md to ab earlier version
- to see more log entries, run this in the Terminal add-on:
ha host logs --identifier addon_<slug>_batmon. You'll find
the slug in the URL of the add-on page. - to see logs during installation: Settings / System / Logs / Supervisor (choose from the menu at the top-right
corner), link
TODO
- Implement daly2 #33
- Port to MicroPython for MCU (ESP32 etc.)
- make this a custom
integration? home-assistant-bms-tools-integration - use the new Bluetooth integration since HA 2022.8 ?
- Implement BMS data push (JK)
- Read device bt info see
- Implement RS485 #22
- Implement old JK04?
- web interface (export, import bms meter data)
Stand-alone
You can run the add-on outside of Home Assistant (e.g. on a remote RPI sending MQTT data of WiFI).
All you need is an operating system supported by bleak.
See doc/Standalone.md
Contribute / Donate
References
Owner metadata
- Name: Fabian
- Login: fl4p
- Email: gh@fabi.me
- Kind: user
- Description:
- Website:
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/2705942?u=f8788047690a17c48315e5cc8c870529e5efe329&v=4
- Repositories: 104
- Last ynced at: 2025-10-31T01:25:54.879Z
- Profile URL: https://github.com/fl4p
GitHub Events
Total
- Issues event: 78
- Watch event: 112
- Delete event: 2
- Issue comment event: 235
- Push event: 43
- Pull request review event: 2
- Pull request event: 4
- Fork event: 23
- Discussion event: 1
- Create event: 2
Last Year
- Issues event: 67
- Watch event: 76
- Delete event: 2
- Issue comment event: 213
- Push event: 38
- Pull request review event: 2
- Pull request event: 2
- Fork event: 17
- Discussion event: 1
- Create event: 2
Committers metadata
Last synced: 9 days ago
Total Commits: 594
Total Committers: 12
Avg Commits per committer: 49.5
Development Distribution Score (DDS): 0.049
Commits in past year: 114
Committers in past year: 4
Avg Commits per committer in past year: 28.5
Development Distribution Score (DDS) in past year: 0.044
| Name | Commits | |
|---|---|---|
| Fabian Schlieper | f****n@s****l | 565 |
| Matt Shirley | m****5@g****m | 8 |
| Matt Shirley | m****t@s****l | 7 |
| KOSSQII | K****I@G****m | 3 |
| patman15 | 1****5 | 3 |
| p-zander | p****1@g****m | 2 |
| irokezzz | i****0@g****m | 1 |
| Vladimir Pchelko | 3****o | 1 |
| Timor Morrien | t****n@t****e | 1 |
| Menno van Gangelen | m****o@v****l | 1 |
| Brian Webb | w****n@g****m | 1 |
| Peter Armstrong | p****e@p****n | 1 |
Committer domains:
- pop-os.localdomain: 1
- vangangelen.nl: 1
- tum.de: 1
- schlieper.email: 1
Issue and Pull Request metadata
Last synced: 6 days ago
Total issues: 137
Total pull requests: 20
Average time to close issues: 6 months
Average time to close pull requests: 7 days
Total issue authors: 122
Total pull request authors: 11
Average comments per issue: 2.99
Average comments per pull request: 0.85
Merged pull request: 8
Bot issues: 0
Bot pull requests: 0
Past year issues: 54
Past year pull requests: 5
Past year average time to close issues: about 1 month
Past year average time to close pull requests: about 1 month
Past year issue authors: 46
Past year pull request authors: 4
Past year average comments per issue: 2.61
Past year average comments per pull request: 1.4
Past year merged pull request: 2
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- typxxi (3)
- erlendoyen (3)
- ISanteiI (3)
- timoburggraf (2)
- geozar (2)
- fl4p (2)
- 7wells (2)
- Macrisu (2)
- snipah (2)
- jeybee74 (2)
- arzaman (2)
- Delphinus44 (2)
- rintintin17 (1)
- domescape (1)
- alexeyklots (1)
Top Pull Request Authors
- coconup (5)
- joosthb (3)
- patman15 (2)
- irokezzz (2)
- Confushion (2)
- webbbn (1)
- bentolor (1)
- peteretep (1)
- hape1985 (1)
- KOSSOII (1)
- wmgm183 (1)
Top Issue Labels
- new-bms (7)
Top Pull Request Labels
Package metadata
- Total packages: 1
- Total downloads: unknown
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 2
proxy.golang.org: github.com/fl4p/batmon-ha
- Homepage:
- Documentation: https://pkg.go.dev/github.com/fl4p/batmon-ha#section-documentation
- Licenses: mit
- Latest release: v0.0.54 (published almost 3 years ago)
- Last Synced: 2026-01-12T08:40:13.668Z (3 days ago)
- Versions: 2
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 5.395%
- Average: 5.576%
- Dependent repos count: 5.758%
Dependencies
- paho-mqtt *
- $BUILD_FROM latest build
Score: -Infinity