🔋 Custom BMS Battery Cells Card für Home Assistant - HACS

BMS Battery Cells Card

Visualisierung der Einzelzellenspannungen deines Batteriespeichersystems (BMS)

Meine neue Card ist fertig, danke auch an @Dr.Big fürs testen und den ein oder anderen Gedankenanstoß. :slight_smile: Ich hoffe euch gefällt die Card, es werden bestimmt einige Hausspeicher im Einsatz haben und da ist so eine Visualisierung schön.

Die :battery: BMS Battery Cells Card ist eine benutzerdefinierte Lovelace-Karte zur Visualisierung der einzelnen Zellspannungen deines Batteriespeichers (BMS). Sie bietet eine ĂĽbersichtliche Darstellung des Zustands aller Zellen, inklusive Min/Max-Werten und Balancing-Status.

Die Karte ist vollständig über die Benutzeroberfläche des Karteneditors konfigurierbar.
Du benötigst die entsprechenden Entitäten deines BMS (z.B. Victron, JK-BMS, Daly), die die Zellspannungen in Home Assistant bereitstellen. Es funktionieren natürlich auch normale Batterien (AGM und Co) soweit ihr dafür Entitäten in HA erhaltet.

Wenn euch die custom Card gefällt, würde ich mich sehr über eine Stern :star: auf github freuen. :hugs:

Features

  • :battery: Visualisierung einzelner Zellspannungen

  • :chart_decreasing: Min / Max / Drift / Durchschnitts-Anzeige

  • :artist_palette: Dynamische Farbgebung (Schwellenwerte)

  • :balance_scale: Balancing Indikatoren

  • :sparkles: Animierte Zellen (Power in/out)

  • :high_voltage: Batterie Voltage, Current, Temp & Power Status (in/out)

  • :triangular_ruler: Flexibles Layout (Grid/Liste)

  • :gear: UI-Konfiguration





bms-battery-cells-card-ani


Installation

HACS (Empfohlen)

  • Das github ĂĽber den Link in Home Assistant einfĂĽgen.

    Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

  • Die „BMS Battery Cells Card“ sollte nun in HACS verfĂĽgbar sein. Klicke auf „INSTALLIEREN“ („INSTALL“).

  • Die Ressource wird automatisch zu deiner Lovelace-Konfiguration hinzugefĂĽgt.

Manuelle Installation ĂĽber Hacs

Manuelle Installation ĂĽber Hacs

Ă–ffne HACS in Home Assistant.

  • Gehe zu „Frontend“ und klicke auf die drei Punkte in der oberen rechten Ecke.
  • Wähle „Benutzerdefinierte Repositories“ („Custom repositories“) aus.
  • FĂĽge die URL zu deinem GitHub-Repository hinzu und wähle „Lovelace“ als Kategorie.
  • Klicke auf „HINZUFĂśGEN“ („ADD“).
  • Die „BMS Battery Cells Card“ sollte nun in HACS verfĂĽgbar sein. Klicke auf „INSTALLIEREN“ („INSTALL“).
  • Die Ressource wird automatisch zu deiner Lovelace-Konfiguration hinzugefĂĽgt.
Manuelle Installation in HA

Manuelle Installation in HA

  1. Dateien herunterladen:

    • Lade die bms-battery-cells-card.js aus diesem Repository herunter.
  2. Dateien in Home Assistant hochladen:

    • Erstelle einen neuen Ordner namens bms-battery-cells-card im www/community-Verzeichnis deiner Home Assistant-Konfiguration. (Das www-Verzeichnis befindet sich im selben Ordner wie deine configuration.yaml).
    • Kopiere alle heruntergeladenen Dateien in diesen neuen Ordner. Deine Ordnerstruktur sollte wie folgt aussehen:
      /config/www/community/bms-battery-cells-card/bms-battery-cells-card.js
      
  3. Ressource zu Home Assistant hinzufĂĽgen:

    • Gehe in Home Assistant zu Einstellungen > Dashboards.
    • Klicke auf das MenĂĽ mit den drei Punkten oben rechts und wähle Ressourcen.
    • Klicke auf + Ressource hinzufĂĽgen.
    • Gebe als URL /local/community/bms-battery-cells-card/bms-battery-cells-card.js ein.
    • Wähle als Ressourcentyp JavaScript-Modul.
    • Klicke auf Erstellen.

Konfiguration

Nach der Installation kannst du die Karte zu deinem Dashboard hinzufĂĽgen:

  1. Bearbeitungsmodus aktivieren:

    • Ă–ffne das Dashboard, zu dem die Karte hinzufĂĽgt werden soll, und klicke auf Bearbeiten.
  2. Karte hinzufĂĽgen:

    • Klicke auf + Karte hinzufĂĽgen und suche nach der „BMS Battery Cells Card“.
  3. Optionen konfigurieren:

    • Ein Konfigurationsfenster wird angezeigt, in dem alle Einstellungen bequem angepasst werden können.
    • BMS Entity: Die Hauptentitäten oder Liste der Sensoren.
    • Voltage Range: Definiere Min und Max Spannung fĂĽr die grafische Darstellung.
    • Details: Blende Zusatzwerte wie Battery Power, Temp, Drif oder Durschnittsspannung an.

YAML-Modus (Alternative)

Obwohl die UI-Konfiguration empfohlen wird, kann die Karte auch manuell ĂĽber den YAML-Editor konfiguriert werden:

Optionen

Optionen

name typ erforderlich Beschreibung Standard
type string Ja Kartentyp. Muss custom:bms-battery-cells-card sein.
title string Nein Titel, der oben in der Karte angezeigt wird. "Batterie Zellen"
cells list Ja Liste der Zellen (jeweils mit Entität und optionalem Namen). 4 Beispiel-Zellen
cells[].entity string Ja Sensor-Entität der Zellspannung.
cells[].name string Nein Anzeigename der Zelle. Zell-Index
show_legend boolean Nein Zeigt die Spannungs-Skala (Y-Achse) auf der linken Seite an. true
container_padding number Nein Innenabstand des Karten-Containers in Pixeln. 16
card_height number Nein Feste Höhe der Karte in Pixeln. 380
cell_gap number Nein Abstand zwischen einzelnen Zellen in Pixeln. 4
show_values boolean Nein Zeigt die exakten Zellspannungen als Text an. true
show_values_on_top boolean Nein Zeigt Statistikwerte oberhalb der Icons an. false
enable_animations boolean Nein Aktiviert Lade- und Entlade-Animationen. true
min_voltage number Nein Minimale Zellspannung fĂĽr die Skalierung. 2.60
max_voltage number Nein Maximale Zellspannung fĂĽr die Skalierung. 3.65
show_min_max boolean Nein Markiert die Zellen mit minimaler und maximaler Spannung. true
show_average boolean Nein Zeigt die durchschnittliche Zellspannung in den Statistiken an. false
soc_entity string Nein Sensor-Entität für den Ladezustand (SoC).
watt_entity string Nein Leistungs-Sensor (positiv = Laden, negativ = Entladen).
cell_diff_sensor string Nein Sensor fĂĽr die Zellspannungs-Abweichung (mV).
temp_entity string Nein Sensor-Entität für die Batterietemperatur.

Beispielkonfiguration

Einfaches Beispiel:

type: custom:bms-battery-cells-card
title: Batterie Zellen
cells:
  - entity: sensor.cell_1
    name: "1"
  - entity: sensor.cell_2
    name: "2"
  - entity: sensor.cell_3
    name: "3"
  - entity: sensor.cell_4
    name: "4"

Erweitertes Beispiel:

type: custom:bms-battery-cells-card
cells:
  - name: "1"
    entity: sensor.vrm_maximum_cell_voltage_batt_1
  - name: "2"
    entity: sensor.vrm_minimum_cell_voltage_batt_1
  - name: "3"
    entity: sensor.vrm_maximum_cell_voltage_batt_2
  - name: "4"
    entity: sensor.vrm_minimum_cell_voltage_batt_2
soc_entity: sensor.victron_system_battery_soc
watt_entity: sensor.vrm_battery_power_batt_1024
cell_diff_sensor: sensor.vrm_minimum_cell_voltage_batt_1
temp_entity: sensor.vrm_battery_temperature_batt_1
show_values_on_top: false
enable_animations: true
title: Batterie Zellen
thicker_borders: true
min_voltage: 2.6
max_voltage: 3.65
show_average: false

CSS Elemente

CSS Elements

Selector Description
.header Kopfbereich der Karte.
.card-header Header mit Titel und Statistiken.
.title Karten-Titel.
.stats Container fĂĽr Statistikwerte.
.stat-item Einzelner Statistikblock.
.stat-label Beschriftung der Statistik.
.stat-value-row Zeile mit Icon und Wert.
.vertical-layout Vertikale Anordnung von Icon/Wert.
.main-container Hauptcontainer der Zellen.
.cells-container Container fĂĽr alle Zell-Elemente.
.legend-col Spannungs-Skala (Y-Achse).
.cell-wrapper Wrapper einer einzelnen Zelle.
.cell-item Einzelne Batteriezelle.
.min-cell Markierung der Zelle mit Minimalspannung.
.max-cell Markierung der Zelle mit Maximalspannung.
.custom-tooltip Tooltip bei Klick / Hover.
.cell-track-bg Hintergrund mit Farbverlauf.
.cell-bar Spannungs-Balken.
.is-charging Lade-Animation aktiv.
.is-discharging Entlade-Animation aktiv.
.charging-overlay Animiertes Overlay.
.cell-info-layer Overlay fĂĽr Labels.
.cell-name-wrap Container fĂĽr Zellnamen.
.cell-name-badge Badge mit Zellnamen.
.cell-val-wrap Container fĂĽr Spannungswert.
.cell-val-badge Spannungs-Anzeige.
.cell-voltage Kennzeichnung Spannungswert.
ha-card Home Assistant Kartencontainer.
ha-icon Icons in Statistikbereich.

Header & Titel anpassen

type: custom:bms-battery-cells-card
title: Batterie Zellen
cells:
  - entity: sensor.cell_1
    name: "1"
  - entity: sensor.cell_2
    name: "2"
card_mod:
  style: |
    .title {
      font-size: 1.6rem;
      font-weight: 600;
      color: #00e676;
    }
    .header.card-header {
      border-bottom: 1px solid rgba(0,224,118,0.3);
    }

Min-/Max-Zellen hervorheben

type: custom:bms-battery-cells-card
title: Batterie Zellen
cells:
  - entity: sensor.cell_1
    name: "1"
  - entity: sensor.cell_2
    name: "2"
card_mod:
  style: |
    .cell-wrapper.min-cell {
      border: 2px solid #2196f3;
      box-shadow: 0 0 12px rgba(33,150,243,0.8) inset;
    }

    .cell-wrapper.max-cell {
      border: 2px solid #f44336;
      box-shadow: 0 0 12px rgba(244,67,54,0.8) inset;
    }

Zellnamen dezenter darstellen

type: custom:bms-battery-cells-card
title: Batterie Zellen
cells:
  - entity: sensor.cell_1
    name: "1"
  - entity: sensor.cell_2
    name: "2"
card_mod:
  style: |
    .cell-name-badge {
      background: rgba(255,255,255,0.08);
      color: #e0e0e0;
      font-weight: 500;
      letter-spacing: 0.4px;
    }

Tooltip Design anpassen (Touch, Hover)

type: custom:bms-battery-cells-card
title: Batterie Zellen
cells:
  - entity: sensor.cell_1
    name: "1"
  - entity: sensor.cell_2
    name: "2"
card_mod:
  style: |
    .cell-name-badge {
      background: rgba(255,255,255,0.08);
      color: #e0e0e0;
      font-weight: 500;
      letter-spacing: 0.4px;
    }

| HACS validation | hacs_badge | GitHub release | File size | Downloads

ko-fi


6 „Gefällt mir“

Sehr cool wie immer wenn du was machst. Werde sie so wie es aussieht aber leider nicht nutzen können. Glaube mein BKW von Anker stellt die Entitäten nicht bereit.

Edit: Auch hier ist das Problem mit den Theme. :wink:

Danke schön, ja musst du schauen was da für Sensoren bereitgestellt werden. Bei mir kann ich aktuell auch nur die höchste und niedrigste Zelle auslesen, also nicht alle 16 direkt. Da muss ich erst noch etwas für basteln. Du könntest die kompakte Card Ansicht aber nutzen.

EDIT: ja das stimmt leider, ich weiß noch nicht woran das liegt. Einfacher workaround ist, einfach die HA Card Auswahl zu öffnen, dann wird im Hintergrund der Cardeditor der Card aktualisiert. Der Weg über Theme kurz ändern geht auch. Zum Glück ist das ja nur einmalig, bei Installtion oder Update.

Ausserhalb von vrm geht das nicht oder ? ich nutze ein Seplos bms mit bluetooh. Habe zwar auch ein Bluetooth stick aber das BMS bekomme ich leider nicht in HA.

Hi, nein das klappt dann leider nicht. Die Sensoren mĂĽssen in HA zur VerfĂĽgung stehen. Ist ja nur ein Card zur Visualisierung, nicht zum Einlesen der Daten von irgendwoher. Wenn du Daten ĂĽber Bluetooth irgendwie in HA bekommst, dann kannst du die Card nutzen.

Schon „schick“ was Jan da mal wieder zusammengebaut hat! :folded_hands:

2 „Gefällt mir“

wie hast du die Temp dahin bekommen ?

Gefunden

sollte aktuell “default” so sein!

alles gut passt

danke schön

Cool - super Sache, danke dafĂĽr.
Dann werd ich meinen BYD Speicher mal ins Netzwerk hängen und die Daten abholen.

Die Chefin wird dann zwar fragen für was man das braucht, und wenn ich dann sage “eigentlich für nix, aber…” wird sie´s dann verstehen (oder auch nicht :slight_smile:)

1 „Gefällt mir“

Die Zellspannungen und Akkuspannungen zu sehen ist wichtiger als der SOC! :wink:

2 „Gefällt mir“

Das habe ich auch von mafe gelernt. :slight_smile: Der SoC kann schon manchmal ganz schön abweichen und dann sind die Zellspannungen viel Aussagekräftiger.

1 „Gefällt mir“

Hallo

habe jetzt auch alle 16 Zellen drinne . Hätte noch die Möglichkeit welche Zellen gerade balancieren.

VerfĂĽgbarer Energie Gehalt wird mir auch angezeigt.

Kann das deine Integration ? So das zb die Zahlen rot werden der jeweiligen Zelle. Ist nur ne nachfrage.

GruĂź Timo

Hi, nein das kann sie noch nicht! Muss ich schauen, so lange ich das nicht live bei mir testen kann. Was hast du fĂĽr einen Sensor, der die Info dafĂĽr bereitstellt? Irgendwie muss man ja wissen, welche Zellen gerade balancieren.

ich habe ein Seplos BMS was mit Bluetooth ausgelesen wird ĂĽber diese Integration

Schaue mir mal in Ruhe an. :slight_smile:

Jo so wie ich das sehe gibt der akku nur 16 x ne 0 oder ne 1 raus. Kann ich dir später sagen wenn er balanciert

1 „Gefällt mir“

wĂĽsste ich beim JK-BMS auch nicht woher nehmen !

bei mir steht das bei

binary_sensor.sp00b_balancer

dann unten Attribute

da steht bei mir 16 x 0 denke mal das dann welche auf 1 gehen

Also so geht es wohl

- sensor:
    - name: "Balancer Zelle 1"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[0] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 2"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[1] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 3"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[2] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 4"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[3] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 5"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[4] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 6"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[5] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 7"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[6] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 8"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[7] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 9"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[8] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 10"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[9] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 11"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[10] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 12"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[11] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 13"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[12] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 14"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[13] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 15"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[14] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}
    - name: "Balancer Zelle 16"
      state: >-
        {% if state_attr('binary_sensor.sp00b_balancer', 'channels')[15] == 1 %}
          An
        {% else %}
          Aus
        {% endif %}

Ist das dein Seplos BMS, welche Version hast du davon?