Ich habe bei mir gerade zwei Jackery SolarVaults laufen, den Pro im Garten und den Pro Max in der Garage, und natürlich wollte ich beide in Home Assistant sehen. Spoiler: Es gibt genau zwei Wege, das zu lösen. Der erste ist wahnsinnig schnell, der zweite gibt dir die volle Kontrolle. Ich musste beide gehen, weil die HACS-Integration nur ein Gerät verwaltet. Genau das erkläre ich dir hier Schritt für Schritt, inklusive der Falle, die mich selbst ein paar Stunden gekostet hat.
Was du brauchst, bevor es losgeht
Beide Wege haben dieselbe Grundlage: ein laufendes Home Assistant (2024.x oder neuer) und einen MQTT-Broker. Am einfachsten ist das Mosquitto-Add-on, das du direkt in HA unter Einstellungen → Add-ons findest. Installieren, starten, fertig.
Außerdem brauchst du die MQTT-Integration in HA (Einstellungen → Geräte & Dienste → MQTT), und deinen SolarVault natürlich im selben Netzwerk, per WLAN oder LAN. Für Weg 1 brauchst du zusätzlich noch HACS.
Drei Werte wirst du durch die ganze Anleitung immer wieder brauchen. Ersetze überall die Platzhalter:
DEINE_SN— die Seriennummer deines SolarVault (steht in der Jackery-App auf der MQTT-Seite)DEIN_TOKEN— der Token von derselben Seite (pro Gerät unterschiedlich!)DEINE_BROKER_IP— die IP deines MQTT-Brokers, in den meisten Fällen die IP deiner Home-Assistant-Instanz
Schritt 0: Den SolarVault mit dem MQTT-Broker verbinden
Das ist der allererste Schritt, ganz egal welchen Weg du danach gehst. Ohne diese Verbindung bleiben alle Sensoren leer.
Zuerst musst du im Mosquitto-Add-on einen Login anlegen. Geh in die Add-on-Konfiguration, trag unter logins: einen Benutzernamen und ein Passwort ein, und starte das Add-on neu.
Dann öffnest du die Jackery-App, gehst auf dein Gerät, dann auf Einstellungen und dort auf MQTT. Dort trägst du folgendes ein:
- Host:
DEINE_BROKER_IP - Port:
1883 - Username / Password: der Login, den du gerade in Mosquitto angelegt hast
- Token: den vorgegebenen Token aus der App notieren, das ist dein
DEIN_TOKEN - Seriennummer: ebenfalls hier notieren, das ist deine
DEINE_SN
Dann setzt du den Haken bei „Aktivieren" und drückst Senden. Im Mosquitto-Log sollte jetzt eine neue Client-Verbindung vom Gerät auftauchen.
Wenn das nicht klappt, sind das die häufigsten Ursachen: Port falsch getippt (1833 statt 1883 passiert erstaunlich oft), Gerät im falschen WLAN, oder der Login stimmt nicht überein.
Wichtig bei zwei Geräten: Jeder SolarVault hat seinen eigenen Token und seine eigene Seriennummer. Du musst Schritt 0 für jedes Gerät einzeln machen.
Weg 1: Die HACS-Integration (schnell, für ein Gerät)
Die Community-Integration ht-it-lab/jackery legt alle Sensoren automatisch an, komplett lokal über MQTT, kein Cloud-Konto nötig. Das ist die Lösung, wenn du einen SolarVault hast und in fünf Minuten fertig sein willst.
Schritt 1.1: Integration über HACS installieren
HACS öffnen, oben rechts Menü, dann Custom repositories. Dort fügst du folgendes ein:
- URL:
https://github.com/ht-it-lab/jackery - Typ: Integration
HACS schließen und neu öffnen, nach „Jackery" suchen, herunterladen. Danach Home Assistant neu starten.
Schritt 1.2: Integration einrichten
Einstellungen → Geräte & Dienste → Integration hinzufügen, nach „Jackery" suchen. Im Dialog trägst du ein:
- device_sn:
DEINE_SN - token:
DEIN_TOKEN
Bestätigen, und die Integration verbindet sich über den MQTT-Broker mit deinem Gerät. Entities wie sensor.jackery_battery_soc, sensor.jackery_solar_power und sensor.jackery_battery_charge_power entstehen automatisch und lassen sich direkt aufs Dashboard oder ins Energie-Dashboard legen.
Grenze der Integration: Sie ist single-instance, verwaltet also nur ein Gerät. Für einen zweiten SolarVault nimmst du Weg 2.
Eine Alternative für mehrere Geräte in einer einzigen Integration wäre Bigdaddy1990/jackery_solarvault. Die meldet sich am Jackery-Konto an und findet alle Systeme automatisch. Der Nachteil: sie braucht ein Cloud-Konto und war im Juni 2026 noch stark im Umbau (v0.1.x). Wer rein lokal bleiben möchte, bleibt bei ht-it-lab/jackery und nutzt für das zweite Gerät Weg 2.
Und noch kurz als Info: Jackery hat mir bestätigt, dass eine offizielle Home-Assistant-Integration in Arbeit ist. Einen Termin gibt es noch nicht. Bis dahin sind HACS und MQTT die Wahl.
Weg 2: Das MQTT-Package (für ein zweites Gerät oder volle Kontrolle)
Wer ein zweites Gerät hat, oder einfach keine Custom-Integration möchte, baut die Sensoren selbst per MQTT. Das ist mehr Arbeit, aber komplett transparent und beliebig erweiterbar. Bei mir läuft der Pro Max in der Garage auf diese Weise.
So funktioniert das Protokoll
Der SolarVault sendet nicht von selbst. Er antwortet nur, wenn er angefragt wird:
- HA schickt einen
type: 25-Frame anhb/device/DEINE_SN/action - Das Gerät antwortet mit einem Status-Frame auf
hb/device/DEINE_SN/status - Aus diesem JSON lesen die Sensoren ihre Werte
Welche Felder aus dem JSON du wirklich brauchst, ist nicht ganz offensichtlich. Ich habe alles live gegen die Jackery-App validiert:
| Feld | Bedeutung |
|---|---|
batSoc | Gesamt-SoC des Geräts (= App-Anzeige „insgesamt") |
soc | Pack-SoC eines einzelnen Akkus, NICHT der Gesamtwert |
stackInPw / stackOutPw | Lade-/Entladeleistung des ganzen Akku-Turms (Master + Erweiterungen) |
batInPw / batOutPw | Nur die Master-Einheit (Zusatzakkus fehlen!) |
inOngridPw / outOngridPw | AC-Bezug / AC-Abgabe des Geräts |
pvPw, pv1..4.pvPw | Solar gesamt bzw. pro MPPT-String |
cellTemp | Zellentemperatur in Zehntelgrad (194 = 19,4 °C) |
Die wichtigste Falle, die mich selbst Stunden gekostet hat: Für die Akku-Leistung immer stackInPw und stackOutPw nehmen, niemals batInPw und batOutPw. Die Master-Felder zählen nur die Haupteinheit, die Erweiterungsakkus fehlen komplett. In der Praxis zeigt HA dann vielleicht 350 W, obwohl das Gerät 600 W liefert.
Schritt 2.1: Package-Ordner aktivieren
Falls du noch keine Packages-Struktur nutzt, trägst du in der configuration.yaml folgendes ein:
homeassistant:
packages: !include_dir_named packagesDann legst du im Ordner /config/packages/ eine neue Datei an, zum Beispiel jackery_promax.yaml.
Schritt 2.2: Die MQTT-Sensoren
Das {%- if … is defined -%}-Muster sorgt dafür, dass der Sensor seinen letzten Wert behält, wenn ein Frame das Feld nicht enthält. Das ist wichtig für die Stabilität.
1mqtt:
2 sensor:
3 # Gesamt-SoC (App-Wert)
4 - name: "Jackery ProMax SoC"
5 unique_id: jackery_promax_soc
6 state_topic: "hb/device/DEINE_SN/status"
7 unit_of_measurement: "%"
8 device_class: battery
9 state_class: measurement
10 expire_after: 120
11 value_template: >-
12 {%- if value_json.type == 2 and value_json.body.batSoc is defined -%}
13 {{ value_json.body.batSoc }}
14 {%- endif -%}
15
16 # Akku-Ladeleistung, ganzer Turm (stackInPw, NICHT batInPw!)
17 - name: "Jackery ProMax Batterie Ladeleistung"
18 unique_id: jackery_promax_batterie_ladeleistung
19 state_topic: "hb/device/DEINE_SN/status"
20 unit_of_measurement: "W"
21 device_class: power
22 state_class: measurement
23 expire_after: 120
24 value_template: >-
25 {%- if value_json.type == 2 and value_json.body.stackInPw is defined -%}
26 {{ value_json.body.stackInPw }}
27 {%- endif -%}
28
29 # Akku-Entladeleistung, ganzer Turm (stackOutPw)
30 - name: "Jackery ProMax Batterie Entladeleistung"
31 unique_id: jackery_promax_batterie_entladeleistung
32 state_topic: "hb/device/DEINE_SN/status"
33 unit_of_measurement: "W"
34 device_class: power
35 state_class: measurement
36 expire_after: 120
37 value_template: >-
38 {%- if value_json.type == 2 and value_json.body.stackOutPw is defined -%}
39 {{ value_json.body.stackOutPw }}
40 {%- endif -%}
41
42 # Solar gesamt
43 - name: "Jackery ProMax Solar Leistung"
44 unique_id: jackery_promax_solar_leistung
45 state_topic: "hb/device/DEINE_SN/status"
46 unit_of_measurement: "W"
47 device_class: power
48 state_class: measurement
49 expire_after: 120
50 value_template: >-
51 {%- if value_json.type == 2 and value_json.body.pvPw is defined -%}
52 {{ value_json.body.pvPw }}
53 {%- endif -%}
54
55 # AC-Abgabe ins Haus (outOngridPw)
56 - name: "Jackery ProMax AC Abgabe"
57 unique_id: jackery_promax_ac_abgabe
58 state_topic: "hb/device/DEINE_SN/status"
59 unit_of_measurement: "W"
60 device_class: power
61 state_class: measurement
62 expire_after: 120
63 value_template: >-
64 {%- if value_json.type == 2 and value_json.body.outOngridPw is defined -%}
65 {{ value_json.body.outOngridPw }}
66 {%- endif -%}
67
68 # Zellentemperatur (Zehntelgrad -> °C)
69 - name: "Jackery ProMax Zellentemperatur"
70 unique_id: jackery_promax_zellentemperatur
71 state_topic: "hb/device/DEINE_SN/status"
72 unit_of_measurement: "°C"
73 device_class: temperature
74 state_class: measurement
75 expire_after: 120
76 value_template: >-
77 {%- if value_json.type == 2 and value_json.body.cellTemp is defined -%}
78 {{ (value_json.body.cellTemp | float / 10) | round(1) }}
79 {%- endif -%}Weitere Sensoren nach demselben Muster: pv1.pvPw bis pv4.pvPw für die einzelnen MPPT-Strings, inOngridPw für den AC-Bezug, wsig für das WLAN-Signal, batNum für die Anzahl der Zusatzakkus, und socChgLimit bzw. socDischgLimit für die Lade- und Entladelimits.
Schritt 2.3: Netto-Batterieleistung als Template-Sensor
Ein einzelner Wert, positiv heißt laden, negativ heißt entladen. Der availability-Guard ist Pflicht. Ohne ihn macht float(0) aus einem unavailable eine echte Null, und HA verbucht das als Zählerreset. Das erzeugt Phantom-kWh, die du danach mühsam wieder loswerden musst.
1template:
2 - sensor:
3 - name: "Jackery ProMax Batterie Leistung"
4 unique_id: jackery_promax_batterie_leistung
5 availability: "{{ has_value('sensor.jackery_promax_batterie_ladeleistung') and has_value('sensor.jackery_promax_batterie_entladeleistung') }}"
6 unit_of_measurement: "W"
7 device_class: power
8 state_class: measurement
9 state: >-
10 {{
11 (states('sensor.jackery_promax_batterie_ladeleistung') | float(0)) -
12 (states('sensor.jackery_promax_batterie_entladeleistung') | float(0))
13 }}Schritt 2.4: Aus Leistung wird Energie
Das Energie-Dashboard braucht kWh, keine Watt. Die integration-Plattform summiert die Leistung über die Zeit auf:
1sensor:
2 - platform: integration
3 source: sensor.jackery_promax_solar_leistung
4 name: Jackery ProMax Solar Energie
5 unique_id: jackery_promax_solar_energie
6 unit_prefix: k
7 unit_time: h
8 round: 3
9 method: trapezoidal
10
11 - platform: integration
12 source: sensor.jackery_promax_batterie_ladeleistung
13 name: Jackery ProMax Batterie geladen
14 unique_id: jackery_promax_batterie_geladen
15 unit_prefix: k
16 unit_time: h
17 round: 3
18 method: trapezoidal
19
20 - platform: integration
21 source: sensor.jackery_promax_batterie_entladeleistung
22 name: Jackery ProMax Batterie entladen
23 unique_id: jackery_promax_batterie_entladen
24 unit_prefix: k
25 unit_time: h
26 round: 3
27 method: trapezoidalSchritt 2.5: Tages-, Monats- und Jahreszähler
1utility_meter:
2 jackery_promax_solar_tag:
3 name: Jackery ProMax Solar Heute
4 unique_id: jackery_promax_solar_tag
5 source: sensor.jackery_promax_solar_energie
6 cycle: daily
7
8 jackery_promax_solar_monat:
9 name: Jackery ProMax Solar Monat
10 unique_id: jackery_promax_solar_monat
11 source: sensor.jackery_promax_solar_energie
12 cycle: monthly
13
14 jackery_promax_solar_jahr:
15 name: Jackery ProMax Solar Jahr
16 unique_id: jackery_promax_solar_jahr
17 source: sensor.jackery_promax_solar_energie
18 cycle: yearlySchritt 2.6: Die Poll-Automation
Das ist das Herzstück des ganzen Setups. Ohne diese Automation bleibt alles leer, weil das Gerät von sich aus nichts sendet. Alle 10 Sekunden wird ein type: 25-Frame rausgeschickt:
1automation:
2 - id: jackery_promax_mqtt_poll
3 alias: "Jackery ProMax: MQTT Status-Poll"
4 description: "Fragt alle 10s den Status des SolarVault ab (type 25)."
5 mode: single
6 triggers:
7 - trigger: time_pattern
8 seconds: "/10"
9 actions:
10 - action: mqtt.publish
11 data:
12 topic: "hb/device/DEINE_SN/action"
13 payload: >-
14 {{ {
15 "type": 25,
16 "eventId": 0,
17 "messageId": range(1000, 9999) | random,
18 "ts": now().timestamp() | int,
19 "token": "DEIN_TOKEN",
20 "body": none
21 } | tojson }}Schritt 2.7: Prüfen und neu starten
Unter Einstellungen → System → Reparaturen kannst du die Konfiguration prüfen lassen. Danach Home Assistant neu starten. In den Entwicklerwerkzeugen unter Zustände nach jackery_promax filtern. Die Werte sollten sich innerhalb von etwa 10 Sekunden füllen.
Tun sie das nicht, ist meistens eines dieser drei Dinge das Problem: die Poll-Automation ist nicht aktiv, SN oder Token sind falsch, oder das Gerät hat sich gar nicht erst am Broker angemeldet (zurück zu Schritt 0).
Beide Wege parallel? Wenn du Weg 1 und Weg 2 gleichzeitig nutzt, also die HACS-Integration für Gerät 1 und ein Package für Gerät 2, musst du sicherstellen, dass die Geräte sauber getrennt bleiben. Die Integration filtert standardmäßig nicht nach Seriennummer und kann Frames des zweiten Geräts fälschlich den eigenen Entities zuordnen. In meinem Setup ist die Integration deshalb mit einem SN-Filter gepatcht. Für die meisten, die nur ein Gerät haben, ist das kein Thema.
Das Energie-Dashboard einrichten
Das gilt für beide Wege gleichermaßen. Einstellungen → Dashboards → Energie, dort pro Gerät:
- Solarpanele: die Solar-Energie-Entity (
…_solar_energiebeim MQTT-Package, oder die entsprechende Entity aus der HACS-Integration) - Batterie: je eine Entity für Energie in den Akku und aus dem Akku
Auch hier gilt: unbedingt die Entities nehmen, die auf stackIn/stackOut basieren, nicht die Master-only-Felder. Sonst zeigt das Dashboard zu wenig Akku-Durchsatz.
Feintuning und was ich sonst noch beachte
expire_after: 120 setzt einen Sensor auf unavailable, wenn 2 Minuten kein Frame angekommen ist. Das ist wahnsinnig praktisch, weil du sofort siehst, wenn ein Gerät offline ist, statt einem eingefrorenen Wert zu vertrauen.
Das Poll-Intervall von 10 Sekunden ist ein guter Kompromiss. Schneller bringt kaum mehr, belastet aber Broker und Gerät unnötig.
Für ein zweites Gerät legst du einfach ein zweites Package an, mit eigener SN, eigenem Token und eigenen unique_ids. Alles andere bleibt gleich.
Und noch ein kurzer Ausblick: Das Gerät lässt sich auch steuern. number.jackery_max_output_power_ongrid (intern maxOutPw) kann aus HA gesetzt werden, das ist der Hebel für eine dynamische Nulleinspeisung. Das ist aber Stoff für ein eigenes Thema.
Jackery hat mir übrigens bestätigt, dass der Netzwerk-Parallelbetrieb voraussichtlich im Juli kommt. Dann können zwei SolarVaults miteinander kommunizieren und teilen sich ein Smart Meter, aktuell braucht jedes seinen eigenen. Bis dahin ist das hier der Weg.
Weiterführende Inhalte
- Solarzaun bauen & Garagendach erweitern – Teil 1 der Serie: die PV-Erweiterung, in die dieser SolarVault einzieht
- Solarzaun + 27 kWh Speicher: Ergebnis nach 5 Tagen – Teil 3 der Serie: was das Setup mit echten Messdaten bringt
- Jackery SolarVault 3 Pro: 3 Szenarien im Test – Amortisation und für wen sich der Speicher lohnt
- Jackery SolarVault 3 Pro in Home Assistant integrieren – Der erste Integrationsweg mit ausführlichem Dashboard
- Utility Meter: Verbrauch messen und analysieren – Tages-, Monats- und Jahreszähler für die SolarVault-Energie
- Stromzähler mit EcoTracker auslesen – Smart Meter für Nulleinspeisung und echten Hausverbrauch
- Balkonkraftwerk Yuma Flat 2000: Installation und Home Assistant Integration – Weitere lokale PV-Quelle ohne Cloud
Nutzt du den SolarVault schon in Home Assistant, oder bist du gerade beim Einrichten? Schreib mir gerne, welchen Weg du nimmst und wie es läuft.
