Ich habe eine Weile gewerkelt und geforscht und stelle hier eine Anleitung zur Verfügung, wie Ihr ein Anker Solix Balkonkraftwerk in OpenHAB einbinden könnt. Die hat keinen Anspruch auf Vollständigkeit und vielleicht gibt es auch andere Wege, bei mir tut sie jedenfalls.
Die Anbindung ist read-only. Es können also nur Items mit Daten gefüllt werden, eine Steuerung des Balkonkraftwerks ist so nicht möglich.
Meine Umgebung
Openhab 5.1.2
Raspberry PI 4 mit 2GB RAM
Ergänzung 25.2.2026: 1x Anker Solix 3 mit 2kW Peak Solarleistung und 2,6 kWh Speicher (keine Speichererweiterung installiert)
Shelly Smartmeter am Stromzähler (natürlich vom Elektriker eingebaut)
Aus Sicherheitsgründen habe ich die Elektroinstallation vom Elektriker an den aktuelle Stand der VDE Vorschriften anpassen und abnehmen lassen
Funktionsweise der Anbindung
Das Anker Solix ist eine Cloud Only Lösung. D.h. das Anker Solix schreibt in die Cloud und die Daten sind ausschließlich über die Anker Cloud API erreichbar. Die Integration des Shelly erfolgt über die Shelly Cloud. D.h. man muss beim Setup des Anker Solix dieses mit der Shelly Cloud verbinden.
Das beschreibe ich hier nicht.
Also, Anker Solix schreibt in die Cloud.
Tom Quist hat eine Integration geschrieben, welche auf dem Raspberry läuft und sich mit der Anker API verbindet. Diese heißt solix2mqtt
Diese wird benötigt: https://github.com/tomquist/solix2mqtt? ... me-ov-file
In Openhab wird ein MQTT Broker aufgesetzt (bei mir ist das Mosquitto).
Solix2mqtt ruft regelmäßig die Daten der API ab und sendet sie an den MQTT Broker. Diese Daten liegen als JSON Datensatz vor.
In OpenHAB wird ein MQTT Broker Thing angelegt (MQTT Broker Thing), das die Daten vom solix2mqtt entgegen nimmt.
In OpenHAB wird ein MQTT Broker Thing angelegt (Generic MQTT Broker), welches das eben genannte MQTT Broker Thing als Quelle hat und die Solix Daten von solix2mqtt herausliest.
Das eben genannte MQTT Broker Thing empfängt also den JSON Datenstrom vom solix2mqtt.
Jetzt wird in diesem MQTT Broker Thing Channel angelegt. Jeder Channel soll einen Wert des Anker Solix enthalten, z.B. Batterieladung, Solarleistung, etc. Da die Daten im JSON Format vorliegen wird in jedem Channel mit Hilfe eines JSONPATH Ausdrucks das gewünschte Datum aus dem JSON Datensatz herausgelesen.
Jeder Channel wird mit einem Item verlinkt in dem dann die Daten weiter verarbeitet werden können.
Es handelt sich also um eine Read Only Lösung. Die Anbindung kann das Anker Solix nicht steuern!
Ist schon knifflig
Ablauf des Setup
1. In der Anker Cloud solltet Ihr Euch einen eigenen Account für die OpenHAB Anbindung anlegen. Angeblich soll es seit 2026 auch mit dem Account gehen, den Ihr Euch für die Anker APP angelegt habt. Ich traue der Anker API noch nicht 100%ig, dass man einen Anker Account von zwei verschiedenen Geräten (Anker App und OpenHAB Anbindung) störungsfrei nutzen kann.
2. Mosquitto MQTT installieren und konfigurieren. Also MQTT Account, Passwort und Netzwerkport festlegen.
3. Solix2mqtt auf dem Raspberry installieren und die Anbindung an die Anker Cloud testen.
4. Anbindung von solix2mqtt an den Mosquitto MQTT aufsetzen und testen.
5. Solix2mqtt als Service einrichten, damit das Tool auch über systemctl automatisch gestartet, respektive manuell restartet werden kann
6. Test wie die Daten im Mosquitto ankommen.
7. Die beiden MQTT Broker Things anlegen
8. Channel aufsetzen und die richtigen Daten per JSONPATH herausfiltern.
Hilfreich sind für mich folgende Tools:
- MQTT-Explorer von Thomas Nordquist. Damit lese ich die Rohdaten aus (JSON), die der solix2mqtt an den Mosquitto Broker sendet.
- Notepad++ mit dem ich die Rohdaten vom MQTT-Explorer per Copy/Paste einfügen kann und über JSON "Pretty Print" besser lesen kann.
- https://jsonpathfinder.com/, damit kann ich die JSON Daten einfügen, das gewünschte Datum suchen und dann sehe ich im Statusfenster direkt den JSONPATH-Ausdruck, den ich später für den MQTT Channel brauche.
zu 2. Mosquitto installieren
Den Mosquitto MQTT habe ich über openhabian-config installiert.
openhabian-config => 20 Optional Components => 23 Mosquitto
Einfach der Installationsanleitung folgen.
Bei der Installation müsst Ihr einen mqtt-User und das mqtt-Passwort festlegen. Das ist die User/Passwort Kombination, die später bei der Konfiguration des solix2mqtt benötigt wird, damit soli2mqtt die Daten an den MQTT Broker übergeben kann.
Den vorgeschlagenen Netzwerkport belasst bei 1883, soweit keine anderen Dienste den Port bereits belegen.
Standardmäßig lässt der Mosquitto nur lokale Verbindungen zu. Da ich jedoch zur Analyse der Daten von meinem PC auf den Mosquitto zugreifen muss habe ich noch die Mosquitto Konfiguration angepasst:
Code: Alles auswählen
nano /etc/mosquitto/mosquitto.conf
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
per_listener_settings true
pid_file /run/mosquitto/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
allow_anonymous true
listener 1883
password_file /etc/mosquitto/passwdzu 3. Solix2mqtt auf dem Raspberry installieren
Schaut auf jeden Fall in die aktuelle Github Doku: https://github.com/tomquist/solix2mqtt? ... me-ov-file
Da steht in der Readme wie man die Installation durchführt. Diese Anleitung basiert auf dem Stand von Anfang Januar 2026.
Voraussetzung für solix2mqtt:
In der Readme stehen Requirements. Die müsst Ihr befolgen.
Es wird Node.js und npm auf dem Raspberry benötigt.
Die Installation von nodejs und npm habe ich so vorgenommen:
Code: Alles auswählen
sudo apt update
sudo apt install nodejs
node -vMit node -v oder npm -v kann ich prüfen welche Versionen installiert sind.
Bei mir läfut node = 22.22.0 und npm = 10.9.4
solix2mqtt installieren
Code: Alles auswählen
cd ~
git clone https://github.com/tomquist/solix2mqtt.gitIch habe mir ein Startskript gebaut, in dem die Konfiguration liegt.
Code: Alles auswählen
nano start_solix2mqtt.cmdCode: Alles auswählen
npm install && npm run build
S2M_USER={Anker-Account, den Ihr für openhab angelegt habt} \
S2M_PASSWORD={Passwort des Anker Accounts} \
S2M_COUNTRY=DE \
S2M_MQTT_URI=mqtt://{IP-Adresse des raspberry auf dem der Mosquitto läuf}:1883 \
S2M_VERBOSE=true \
S2M_MQTT_USERNAME={mqtt-user, den Ihr bei der Mosquitto-Installation angegeben habt} \
S2M_MQTT_PASSWORD={Passwort des mqtt-users} \
S2M_POLL_INTERVAL=60 \
npm run start >> /var/log/solix2mqtt.logDa in dem Skript Usernamen/Passwörter abgelegt sind empfehle ich über folgende Kommandos den Zugang nur für den root-User zuzulassen.
Code: Alles auswählen
chown root:root start_solix2mqtt.cmd
chmod 750 start_solix2mqtt.cmd-rwxr-x--- 1 root root 299 23. Feb 15:28 start_solix2mqtt.cmd*
Nun könnt Ihr start_solix2mqtt.cmd ausführen. Im Logfile /var/log/solix2mqtt.log könnt Ihr prüfen ob Daten aus der Anker Cloud abgeholt und an den mqtt-Broker übergeben werden.
Das Skript wird so im Vordergrund ausgeführt und kann durch ctrl-c abgebrochen werden.
Deshalb kommt jetzt Schritt 5, das Skript in einen Service packen.
zu 5. Solix2mqtt als Service einrichten
Dazu muss zunächst eine Service Konfigurationsdatei erstellt werden.
Dazu die Datei solix2mqtt.service anlegen
Code: Alles auswählen
cd /etc/systemd/system
nano solix2mqtt.service
Code: Alles auswählen
[Unit]
Description=Solix2MQTT Service
After=network.target
After=multi-user.target
[Service]
Type=simple
WorkingDirectory=/root/solix2mqtt
ExecStart=/bin/bash /root/solix2mqtt/start_solix2mqtt.cmd
Restart=always
User=root
[Install]
WantedBy=multi-user.targetSo könnt Ihr prüfen, ob die Konfigurationsdatei korrekt ist:
Code: Alles auswählen
systemd-analyze verify /etc/systemd/system/solix2mqtt.serviceCode: Alles auswählen
sudo systemctl daemon-reload # Systemd über neue Datei informieren
sudo systemctl enable solix2mqtt.service # Service beim Booten starten
sudo systemctl start solix2mqtt.service # Service jetzt startenzu 6. wie kommen die Daten im Mosquitto an?
solix2mqtt liest jetzt die Daten von der Anker Cloud und reicht sie an den Mosquitto MQTT Broker weiter. Die Daten kommen im JSON-Format an. Damit wir die JSON-Daten korrekt adressieren können empfehle ich diese vom Mosquitto abzuholen.
Dafür nutze ich den MQTT-Explorer von Thomas Nordquist. Der läuft auf meinem Windows Rechner ohne Installation direkt als ausführbares EXE-Programm.
Damit die Verbindung vom PC zum Mosquitto MQTT funktioniert müsst Ihr mosquitto.conf wie oben beschrieben angepasst haben. Ansonsten klappt die Verbindung nicht.
Dazu habe nach dem Start des MQTT-Explorers eine neue Connection aufgebaut. Hier trage ich den o.g. mqtt-user und das zugehörige Passwort ein. Jetzt noch über den Button "Advanced" das Topic solix/# eintragen.
Dieser Eintrag sorgt dafür, dass von dem MQTT-Broker nur die Daten des Anker Solix abgerufen werden.
Ist alles eingetragen könnt Ihr über den Connect Button die Verbindung zu MQTT-Broker aufnehmen.
Der MQTT Explorer stellt die Verbindung zum Mosquitto her und wartet auf das erste Datenpaket. Deshalb seht Ihr beim Start erst einmal nur die IP-Adresse des Mosquitto Servers.
Wenn nach ca 60 Sekunden das erste Datenpaket vom Anker Solix ankommt ändert sich das Bild und die Informationen aus dem empfangenen JSON Daten werden eingeblendet. Im Linken Fenster seht Ihr die Verwaltungsdaten. Ihr werdet auch den Namen Eures Anker Solix erkennen, wie es in der Anker App dargestellt wird.
Unter scenInfo liegen die eigentlichen Payload Daten, auf die wir zugreifen und die Inhalte an die OpenHAB Items übergeben wollen.
Im rechten Fenster seht Ihr den Zugriffs-pfad auf den JSON-Teil, der die Payload enthält.
Bei mir ist das solix/site/Jujama/scenInfo
Im rechten Fenster findet Ihr neben dem Feld "Value" einen Copy-Button mit dem Ihr Euch die Daten in einen Editor laden könnt.
Zur Analyse nutze ich https://jsonpathfinder.com/.
Hier habe ich im linken Fenster die Payload hineinkopiert. Sofort erscheinen im rechten Teil die verfügbaren Anker Parameter und die akutellen Werte. Ich habe in dem Beispiel im rechten Fenster den Parameter der aktuellen Batterieladung herausgesucht und markiert.
Der Parameter heißt total_battery_power und beträgt 0.22 oder 22%
Damit wir später die Channel korrekt definieren können ist jetzt der angezeigt Path wichtig, denn über diesen wird aus dem Datenstrom der gewünschte Parameter adressiert.
Die gesamte Batterieladung (also über alle Batterien) ist in diesem Beispiel über x.solarbank_info.total_battery_power adressierbar.
Jetzt steht also die Verbindung von der Anker API zum Mosquitto Broker und wir können im OpenHAB die Things anlegen.
zu 7. Die beiden MQTT Broker Things anlegen
Zunächst müsst Ihr das MQTT Binding installieren
Dann ein MQTT-Broker Thing als Bridge anlegen
Thing => New => MQTT-Binding => MQTT-Broker Bridge
Ich habe folgendermaßen konfiguriert, wobei Ihr natürlich den mqtt-user und Passwort wie beim JSON Explorer eintragen müsst.
Code: Alles auswählen
version: 1
things:
mqtt:broker:MqttBroker:
isBridge: true
label: MQTT Broker mit Kontakt zum Mosquitto Mqtt
location: OpenHAB
config:
host: 127.0.0.1
secure: false
hostnameValidated: true
protocol: TCP
mqttVersion: V3
qos: 0
reconnectTime: 60000
keepAlive: 60
lwtQos: 0
lwtRetain: true
birthRetain: true
shutdownRetain: true
username: {mqtt-user}
password: {passwort des mqtt-user}
certificatepin: true
publickeypin: true
enableDiscovery: true
clientid: ffd0f0ad-0e4f-4e9d-bf25-536cb3aaa632Thing => New => MQTT-Binding => Generic MQTT Thing
Ich habe das Label benannt "MQTT Broker für Solix2MQTT"
und als Bridge die vorher angelegte MQTT-Bridge eingetragen:
Code: Alles auswählen
version: 1
things:
mqtt:topic:MqttBroker:2aff1eb045:
bridge: mqtt:broker:MqttBroker
label: MQTT Broker für Solix2MQTT
Jetzt können wir die Channels definieren, um die Anker Solix Datenströme auf Items zu verteilen.
Ich zeige das anhand der Batterieladung des Anker Solix.
Channels => Add Channel
ID: Solix_Batterieladung_1
Label: Solix Batterieladung 1
Channel Type: Number Value (das ist wichtig, sonst werden später die Items nicht numerisch befüllt)
Jetzt auf "Done" klicken, damit der Channel angelegt wird.
Wählt den neuen Channel aus und klickt auf "Configure Channel"
Klickt auf "advanced"
MQTT State Topic: solix/site/Jujama/scenInfo (erinnert Euch an den MQTT-Explorer, was auf der linken Seite steht)
Bei der Batterieladung setzt "Unit Of Measurement" auf %
Bei Transform Values wird jetzt der Filter gesetzt, mit dem die Batterieladung aus dem Datenstrom gefilter wird.
Da ich den Einsatz mehrere Batterien plane lese ich den Wert der ersten Batterie aus.
Also, unter Incoming Value Transformations steht bei mir
JSONPATH:$.solarbank_info.solarbank_list[0].battery_power
Wenn Ihr, wie oben beschrieben, die Ladung über alle Batterien auslesen wollt, das müsste hier stehen:
JSONPATH:$.solarbank_info.total_battery_power
Zur Klärung: Über den JSON Path Finder habe ich für die gesamte Batterieladung den Pfad x.solarbank_info.total_battery_power zur Adressierung im JSON Datenstrom adressiert. Im Channel adressiere ich genau diesen JSON Path über JSONPATH:$.solarbank_info.total_battery_power
Wenn der Channel definiert ist können wir nun das passende Item anlegen.
Dazu wieder den Channel auswählen und über "Add Link to Item" ein passendes Item anlegen:
=> Create a new Item
Danach schlägt Openhab die korrekten Werte für Type, Diemension, Unit, Stete Description Pattern, Semantic Point und Semantic Property korrekt vor.
Ihr müsst nur den Namen und das Label definieren.
Ich habe mich entschlossen, dass alle Namen und Label mit Solix_ beginnen.
Hier ist die Definition meines MQTT-Thing und aller Channel, die ich definiert habe. Darin könnt Ihr auch die JSONPATH-Ausdrücke erkennen, die ich für die Filterung der Daten verwendet habe:
Code: Alles auswählen
version: 1
things:
mqtt:topic:MqttBroker:2aff1eb045:
bridge: mqtt:broker:MqttBroker
label: MQTT Broker für Solix2MQTT
channels:
Solix_Batterieladung_1:
type: number
label: Solix Batterieladung 1
description: ""
config:
stateTopic: solix/site/Jujama/scenInfo
transformationPattern:
- "JSONPATH:$.solarbank_info.solarbank_list[0].battery_power"
formatBeforePublish: '%.0f'
min: 0
max: 4000
unit: '%'
Solix_LadeleistungBatterie_1:
type: number
label: Solix Ladeleistung Batterie 1
description: ""
config:
stateTopic: solix/site/Jujama/scenInfo
transformationPattern:
- JSONPATH:$.solarbank_info.total_charging_power
formatBeforePublish: '%.0f'
min: 0
max: 4000
unit: W
Solix_Leistungsbezug_vom_Stromlieferanten:
type: number
label: Solix Leistungsbezug vom Stromlieferanten
description: "Leistung in Watt, die vom Stromerzeuger aktuell bezogen wird."
config:
stateTopic: solix/site/Jujama/scenInfo
transformationPattern:
- JSONPATH:$.other_loads_power
formatBeforePublish: '%.0f'
min: 0
max: 64000
unit: W
Solix_LeistungsbedarfStromverbraucherWohnung:
type: number
label: Solix Leistungsbedarf Stromverbraucher Wohnung
description: Aktuelle Leistung die von allen Stromverbrauchern benötigt wird
config:
stateTopic: solix/site/Jujama/scenInfo
transformationPattern:
- JSONPATH:$.home_load_power
formatBeforePublish: '%4f'
min: 0
max: 64000
unit: W
Solix_LeistungSolarpanele_1:
type: number
label: Solix Leistung Solarpanale 1
description: ""
config:
stateTopic: solix/site/Jujama/scenInfo
transformationPattern:
- "JSONPATH:$.solarbank_info.solarbank_list[0].photovoltaic_power"
formatBeforePublish: '%4f'
min: 0
max: 4000
unit: W
Solix_EntadeleistungBatterie_1:
type: number
label: Solix Entladeleistung Batterie 1
config:
stateTopic: solix/site/Jujama/scenInfo
transformationPattern:
- JSONPATH:$.solarbank_info.battery_discharge_power
formatBeforePublish: '%.0f'
min: 0
max: 4000
unit: WNoch der Hinweis, dass die Batterie Ladeleistung und Entladeleistung tatsächlich in zwei Parametern kommt. Wenn die Batterie geladen wird dies in JSONPATH:$.solarbank_info.total_charging_power übergeben, wenn die Batterien entladen werden steht das in JSONPATH:$.solarbank_info.battery_discharge_power.
Abschließend möchte ich bemerken, dass dies mein aktueller Wissensstand ist und ich keinen Anspruch auf Vollständigkeit, beste Lösung o.ä. erhebe.
Good luck !
Ergänzung 25.2.2026
Hier noch ein paar Pfadangaben für Parameter, die ich nutze:
Daten der ersten Solix Station
Ladung der Batterie: JSONPATH:$.solarbank_info.solarbank_list[0].battery_power
Ladeleistung für die Batterie: JSONPATH:$.solarbank_info.total_charging_power
Entladeleistung der Batterie: JSONPATH:$.solarbank_info.battery_discharge_power
Leistung aus den Solarpanelen: JSONPATH:$.solarbank_info.solarbank_list[0].photovoltaic_power
Leistung, die von allen Verbrauchern benötigt wird: JSONPATH:$.home_load_power