JK-BMS + ESPHome-JK-BMS Home Assistant Dashboard

Hallo,

habe gerade mühevoll das Projekt esphome-jk-bms auf einem ESP32 in meine Home Assistant eingebunden. Läuft erst mal, aber da das BMS noch offline ist, habe ich die Kommunikation noch nicht testen können, wird aber sicher auch noch gehen.
Jetzt wollte ich mir aber ein Dashboard zusammen zimmern, aber bin da noch nicht so firm, darum wollte ich mal fragen, hat da schon einer was gemacht und könnte das teilen? Dann könnte ich am Akku weiter bauen, denn ich möchte gerne die Daten beim Aufladen mitschreiben und aus der Ferne überwachen.

Hallo wie hast du den ESP32 korrekt mit ESP Home geflasht?
Ich bekomme das nicht hin.
Ich habe verschiedene .yaml Beispiel files probiert .
Da wird auch jedesmal das bin file erzeugt.
Nach dem ESP reset tut sich jedoch nichts??? :oops:


Hallo,
habe gerade mühevoll das Projekt esphome-jk-bms auf einem ESP32 in meine Home Assistant eingebunden. Läuft erst mal, aber da das BMS noch offline ist, habe ich die Kommunikation noch nicht testen können, wird aber sicher auch noch gehen.
Jetzt wollte ich mir aber ein Dashboard zusammen zimmern, aber bin da noch nicht so firm, darum wollte ich mal fragen, hat da schon einer was gemacht und könnte das teilen? Dann könnte ich am Akku weiter bauen, denn ich möchte gerne die Daten beim Aufladen mitschreiben und aus der Ferne überwachen.

ist hier jemand schon weiter gekommen?

Nutze es nur noch für meinen JK-Balancer, da gehen noch nicht alle parameter, aber ja, das BMS sollte gehen.

[quote data-userid="1883" data-postid="112190"]

ist hier jemand schon weiter gekommen?

[/quote]

Ist mit Sicherheit nur ein bootloop, stacküberauf.

Streiche die properties raus die du nicht brauchst und compilier das Zeug nochmal.

Das läuft bei mir seit Monaten ohne Probleme (per Bluetooth). Poste doch mal deine .yaml Datei aus ESPHome.
Das wichtigste ist natürlich auch die richtige MAC Adresse "mac_address: C8:47:...." in der .yaml Datei einzutragen.

substitutions:
name: jk-bms1
esphome:
name: jk-bms1
project:
name: "syssi.esphome-jk-bms"
version: 1.3.0
esp32:
board: esp32dev
framework:
type: esp-idf
version: latest
external_components:
- source: github://syssi/esphome-jk-bms@main
refresh: 0s
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable Home Assistant API
logger:
api:
encryption:
key: "xxx"
ota:
password: "xxxx"
esp32_ble_tracker:
ble_client:
- mac_address: C8:47:8C:E2:91:56
id: client0
jk_bms_ble:
- ble_client_id: client0
protocol_version: JK02
throttle: 5s
id: bms0
binary_sensor:
- platform: jk_bms_ble
balancing:
name: "${name} balancing"
charging:
name: "${name} charging"
discharging:
name: "${name} discharging"
button:
- platform: jk_bms_ble
retrieve_settings:
name: "${name} retrieve settings"
retrieve_device_info:
name: "${name} retrieve device info"
number:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
balance_trigger_voltage:
name: "${name} balance trigger voltage"
cell_voltage_overvoltage_protection:
name: "${name} cell voltage overvoltage protection"
cell_voltage_overvoltage_recovery:
name: "${name} cell voltage overvoltage recovery"
balance_starting_voltage:
name: "${name} balance starting voltage"
max_balance_current:
name: "${name} max balance current"
max_charge_current:
name: "${name} max charge current"
max_discharge_current:
name: "${name} max discharge current"
sensor:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
min_cell_voltage:
name: "${name} min cell voltage"
max_cell_voltage:
name: "${name} max cell voltage"
min_voltage_cell:
name: "${name} min voltage cell"
max_voltage_cell:
name: "${name} max voltage cell"
delta_cell_voltage:
name: "${name} delta cell voltage"
average_cell_voltage:
name: "${name} average cell voltage"
cell_voltage_1:
name: "${name} cell voltage 1"
cell_voltage_2:
name: "${name} cell voltage 2"
cell_voltage_3:
name: "${name} cell voltage 3"
cell_voltage_4:
name: "${name} cell voltage 4"
cell_voltage_5:
name: "${name} cell voltage 5"
cell_voltage_6:
name: "${name} cell voltage 6"
cell_voltage_7:
name: "${name} cell voltage 7"
cell_voltage_8:
name: "${name} cell voltage 8"
cell_voltage_9:
name: "${name} cell voltage 9"
cell_voltage_10:
name: "${name} cell voltage 10"
cell_voltage_11:
name: "${name} cell voltage 11"
cell_voltage_12:
name: "${name} cell voltage 12"
cell_voltage_13:
name: "${name} cell voltage 13"
cell_voltage_14:
name: "${name} cell voltage 14"
cell_voltage_15:
name: "${name} cell voltage 15"
cell_voltage_16:
name: "${name} cell voltage 16"
total_voltage:
name: "${name} total voltage"
current:
name: "${name} current"
power:
name: "${name} power"
charging_power:
name: "${name} charging power"
discharging_power:
name: "${name} discharging power"
temperature_sensor_1:
name: "${name} temperature sensor 1"
temperature_sensor_2:
name: "${name} temperature sensor 2"
power_tube_temperature:
name: "${name} power tube temperature"
state_of_charge:
name: "${name} state of charge"
capacity_remaining:
name: "${name} capacity remaining"
total_battery_capacity_setting:
name: "${name} total battery capacity setting"
charging_cycles:
name: "${name} charging cycles"
total_charging_cycle_capacity:
name: "${name} total charging cycle capacity"
total_runtime:
name: "${name} total runtime"
balancing_current:
name: "${name} balancing current"
errors_bitmask:
name: "${name} errors bitmask"
switch:
- platform: jk_bms_ble
charging:
name: "${name} charging"
discharging:
name: "${name} discharging"
balancer:
name: "${name} balancer"
- platform: ble_client
ble_client_id: client0
name: "${name} enable bluetooth connection"
- platform: restart
name: "Jk-Esp32-Switch"
text_sensor:
- platform: jk_bms_ble
errors:
name: "${name} errors"
total_runtime_formatted:
name: "${name} total runtime formatted"

Bitte diesen Abschnitt:

esp32:
board: esp32dev
framework:
type: esp-idf
version: latest

ändern auf

esp32:
board: esp32dev
framework:
type: esp-idf
version: recommended

Aktuell ist ESPHome nicht kompatibel mit dem neuesten ESP-IDF-Framework-Release. Danach sollte das YAML sauber bauen. Hast du darüberhinaus Probleme das Setup ans Laufen zu bekommen?

1 „Gefällt mir“

Alternativ könntest du dir die aktuelle Beispiel-Konfiguration aus dem Projekt schnappen und wieder auf deine Bedürfnisse reduzieren: esphome-jk-bms/esp32-ble-example.yaml at main · syssi/esphome-jk-bms · GitHub

Hinzugekommen ist hier ein neuer binärer Sensor, welche den Online-Status des BMS anzeigt:

binary_sensor:
- platform: jk_bms_ble
online_status:
name: "${name} online status"

Dieses Feature gibt es noch nicht in deiner YAML von Release 1.3.0.

danke dir teste ich!

so es funktioniert, vielen Dank. Habe jetzt Pro BMS einen ESP32, das sollte ja passen. Für die NEEY Balancer werde ich auch mal noch schauen obs was gibt.

Für das Dashboard hat jemand ein Lovelace UI zusammengebaut: Home Assistant Lovelace UI cards · syssi/esphome-jk-bms · Discussion #230 · GitHub. Nach der Anleitung ging das bei mir.

@domii666 Das ist die Beispiel-Konfiguration, welche du für den NEEY Balancer nehmen solltest:

danke funktioniert! hab zwar jetzt 4 esp32 rumfahren, aber dafür läuft es. {green}:cool:

@domii666 Es sollten aber mehrere BMS pro ESP gehen. Bei mir laufen 2 JK stabil an einem ESP per BT. Nur, falls das noch nicht bekannt war.... :slight_smile:

hättest du mir bitte deine YAML? dass ich spicken kann, bin hier noch ein wenig unerfahren :smiley:

Das tut es bei mir. Da wo XXX sind anpassen an die eigenen Gegebenheiten. Ob noch mehr gehen würden weiß ich nicht. Aber zwei laufen wie gesagt stabil.

substitutions:
name: jk-bms
bms0: "${name} bms0"
bms1: "${name} bms1"
device_description: "Monitor and control a JK-BMS via bluetooth"
external_components_source: github://syssi/esphome-jk-bms@main
bms0_mac_address: C8:47:XX:XX:XX:XX
bms1_mac_address: C8:47:XX:XX:XX:XX
# Defaults to "JK02". Please use "JK04" if you have some old JK-BMS version (f.e. JK-B2A16S hw 3.0, sw. 3.3.0)
bms0_protocol_version: JK02
bms1_protocol_version: JK02
esphome:
name: akkumonitor
comment: ${device_description}
project:
name: "syssi.esphome-jk-bms"
version: 1.3.0
esp32:
board: esp32dev
framework:
#  The arduino platform crashs
#    type: arduino
#    version: latest
type: esp-idf
version: latest
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "XXXXXXXXXXXXXXXXX"
ota:
password: "XXXXXXXXXXXXXXXX"
external_components:
- source: ${external_components_source}
refresh: 0s
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Akkumonitor Fallback Hotspot"
password: "XXXXXXXXXX"
esp32_ble_tracker:
on_ble_advertise:
then:
- lambda: |-
if (x.get_name().rfind("JK-", 0) == 0) {
ESP_LOGI("ble_adv", "New JK-BMS found");
ESP_LOGI("ble_adv", "  Name: %s", x.get_name().c_str());
ESP_LOGI("ble_adv", "  MAC address: %s", x.address_str().c_str());
ESP_LOGD("ble_adv", "  Advertised service UUIDs:");
for (auto uuid : x.get_service_uuids()) {
ESP_LOGD("ble_adv", "    - %s", uuid.to_string().c_str());
}
}
ble_client:
- mac_address: ${bms0_mac_address}
id: client0
- mac_address: ${bms1_mac_address}
id: client1
jk_bms_ble:
- ble_client_id: client0
protocol_version: ${bms0_protocol_version}
throttle: 5s
id: bms0
- ble_client_id: client1
protocol_version: ${bms1_protocol_version}
throttle: 5s
id: bms1
binary_sensor:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
balancing:
name: "${bms0} balancing"
charging:
name: "${bms0} charging"
discharging:
name: "${bms0} discharging"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
balancing:
name: "${bms1} balancing"
charging:
name: "${bms1} charging"
discharging:
name: "${bms1} discharging"
button:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
retrieve_settings:
name: "${bms0} retrieve settings"
retrieve_device_info:
name: "${bms0} retrieve device info"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
retrieve_settings:
name: "${bms1} retrieve settings"
retrieve_device_info:
name: "${bms1} retrieve device info"
number:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
balance_trigger_voltage:
name: "${bms0} balance trigger voltage"
cell_count:
name: "${bms0} cell count"
total_battery_capacity:
name: "${bms0} total battery capacity"
cell_voltage_overvoltage_protection:
name: "${bms0} cell voltage overvoltage protection"
cell_voltage_overvoltage_recovery:
name: "${bms0} cell voltage overvoltage recovery"
cell_voltage_undervoltage_protection:
name: "${bms0} cell voltage undervoltage protection"
cell_voltage_undervoltage_recovery:
name: "${bms0} cell voltage undervoltage recovery"
balance_starting_voltage:
name: "${bms0} balance starting voltage"
voltage_calibration:
name: "${bms0} voltage calibration"
current_calibration:
name: "${bms0} current calibration"
power_off_voltage:
name: "${bms0} power off voltage"
max_balance_current:
name: "${bms0} max balance current"
max_charge_current:
name: "${bms0} max charge current"
max_discharge_current:
name: "${bms0} max discharge current"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
balance_trigger_voltage:
name: "${bms1} balance trigger voltage"
cell_count:
name: "${bms1} cell count"
total_battery_capacity:
name: "${bms1} total battery capacity"
cell_voltage_overvoltage_protection:
name: "${bms1} cell voltage overvoltage protection"
cell_voltage_overvoltage_recovery:
name: "${bms1} cell voltage overvoltage recovery"
cell_voltage_undervoltage_protection:
name: "${bms1} cell voltage undervoltage protection"
cell_voltage_undervoltage_recovery:
name: "${bms1} cell voltage undervoltage recovery"
balance_starting_voltage:
name: "${bms1} balance starting voltage"
voltage_calibration:
name: "${bms1} voltage calibration"
current_calibration:
name: "${bms1} current calibration"
power_off_voltage:
name: "${bms1} power off voltage"
max_balance_current:
name: "${bms1} max balance current"
max_charge_current:
name: "${bms1} max charge current"
max_discharge_current:
name: "${bms1} max discharge current"
sensor:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
min_cell_voltage:
name: "${bms0} min cell voltage"
max_cell_voltage:
name: "${bms0} max cell voltage"
min_voltage_cell:
name: "${bms0} min voltage cell"
max_voltage_cell:
name: "${bms0} max voltage cell"
delta_cell_voltage:
name: "${bms0} delta cell voltage"
average_cell_voltage:
name: "${bms0} average cell voltage"
cell_voltage_1:
name: "${bms0} cell voltage 1"
cell_voltage_2:
name: "${bms0} cell voltage 2"
cell_voltage_3:
name: "${bms0} cell voltage 3"
cell_voltage_4:
name: "${bms0} cell voltage 4"
cell_voltage_5:
name: "${bms0} cell voltage 5"
cell_voltage_6:
name: "${bms0} cell voltage 6"
cell_voltage_7:
name: "${bms0} cell voltage 7"
cell_voltage_8:
name: "${bms0} cell voltage 8"
cell_voltage_9:
name: "${bms0} cell voltage 9"
cell_voltage_10:
name: "${bms0} cell voltage 10"
cell_voltage_11:
name: "${bms0} cell voltage 11"
cell_voltage_12:
name: "${bms0} cell voltage 12"
cell_voltage_13:
name: "${bms0} cell voltage 13"
cell_voltage_14:
name: "${bms0} cell voltage 14"
cell_voltage_15:
name: "${bms0} cell voltage 15"
cell_voltage_16:
name: "${bms0} cell voltage 16"
total_voltage:
name: "${bms0} total voltage"
current:
name: "${bms0} current"
power:
name: "${bms0} power"
charging_power:
name: "${bms0} charging power"
discharging_power:
name: "${bms0} discharging power"
temperature_sensor_1:
name: "${bms0} temperature sensor 1"
temperature_sensor_2:
name: "${bms0} temperature sensor 2"
power_tube_temperature:
name: "${bms0} power tube temperature"
state_of_charge:
name: "${bms0} state of charge"
capacity_remaining:
name: "${bms0} capacity remaining"
total_battery_capacity_setting:
name: "${bms0} total battery capacity setting"
charging_cycles:
name: "${bms0} charging cycles"
total_charging_cycle_capacity:
name: "${bms0} total charging cycle capacity"
total_runtime:
name: "${bms0} total runtime"
balancing_current:
name: "${bms0} balancing current"
errors_bitmask:
name: "${bms0} errors bitmask"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
min_cell_voltage:
name: "${bms1} min cell voltage"
max_cell_voltage:
name: "${bms1} max cell voltage"
min_voltage_cell:
name: "${bms1} min voltage cell"
max_voltage_cell:
name: "${bms1} max voltage cell"
delta_cell_voltage:
name: "${bms1} delta cell voltage"
average_cell_voltage:
name: "${bms1} average cell voltage"
cell_voltage_1:
name: "${bms1} cell voltage 1"
cell_voltage_2:
name: "${bms1} cell voltage 2"
cell_voltage_3:
name: "${bms1} cell voltage 3"
cell_voltage_4:
name: "${bms1} cell voltage 4"
cell_voltage_5:
name: "${bms1} cell voltage 5"
cell_voltage_6:
name: "${bms1} cell voltage 6"
cell_voltage_7:
name: "${bms1} cell voltage 7"
cell_voltage_8:
name: "${bms1} cell voltage 8"
cell_voltage_9:
name: "${bms1} cell voltage 9"
cell_voltage_10:
name: "${bms1} cell voltage 10"
cell_voltage_11:
name: "${bms1} cell voltage 11"
cell_voltage_12:
name: "${bms1} cell voltage 12"
cell_voltage_13:
name: "${bms1} cell voltage 13"
cell_voltage_14:
name: "${bms1} cell voltage 14"
cell_voltage_15:
name: "${bms1} cell voltage 15"
cell_voltage_16:
name: "${bms1} cell voltage 16"
total_voltage:
name: "${bms1} total voltage"
current:
name: "${bms1} current"
power:
name: "${bms1} power"
charging_power:
name: "${bms1} charging power"
discharging_power:
name: "${bms1} discharging power"
temperature_sensor_1:
name: "${bms1} temperature sensor 1"
temperature_sensor_2:
name: "${bms1} temperature sensor 2"
power_tube_temperature:
name: "${bms1} power tube temperature"
state_of_charge:
name: "${bms1} state of charge"
capacity_remaining:
name: "${bms1} capacity remaining"
total_battery_capacity_setting:
name: "${bms1} total battery capacity setting"
charging_cycles:
name: "${bms1} charging cycles"
total_charging_cycle_capacity:
name: "${bms1} total charging cycle capacity"
total_runtime:
name: "${bms1} total runtime"
balancing_current:
name: "${bms1} balancing current"
errors_bitmask:
name: "${bms1} errors bitmask"
switch:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
charging:
name: "${bms0} charging"
discharging:
name: "${bms0} discharging"
balancer:
name: "${bms0} balancer"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
charging:
name: "${bms1} charging"
discharging:
name: "${bms1} discharging"
balancer:
name: "${bms1} balancer"
- platform: ble_client
ble_client_id: client0
name: "${bms0} enable bluetooth connection"
- platform: ble_client
ble_client_id: client1
name: "${bms1} enable bluetooth connection"
text_sensor:
- platform: jk_bms_ble
jk_bms_ble_id: bms0
errors:
name: "${bms0} errors"
total_runtime_formatted:
name: "${bms0} total runtime formatted"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
errors:
name: "${bms1} errors"
total_runtime_formatted:
name: "${bms1} total runtime formatted"

Der ESP32 (und auch die ESPHome-Komponente) unterstützt drei gleichzeitige Verbindungen. Es ist jedoch gut möglich, dass man in Engpässe läuft, wenn man den Mikrocontroller so sehr beansprucht.

danke euch! ich teste es mal.

sieht aktuell sehr wild aus.

Ich habe wegen der Begrenzungen schon einige Sensoren in der Config weggelassen. Es werden nur 16 Spannungen abgerufen, und auch die ganzen Meldungen zu den Widerständen werden weggelassen. Wenn man möchte, kann man das noch weiter reduzieren. Manche Werte sind halt auch nicht sooo Interessant.