Der Marstek B2500D ist ein beliebter PV Speicher, der insbesondere aus Volkszählersicht den großen Vorteil hat, per MQTT recht einfach abfragbar und steuerbar zu sein. Die im Folgenden beschriebene Installation läuft bei mir seit einigen Wochen problemlos und erzielt eine verbleibende Einspeisung von 20-30Wh pro Tag (unter der Annahme, der Akku ist noch nicht voll). Es findet nur ein B2500D Verwendung - es können auch mehrere Geräte gekoppelt werden, dies wurde aber hier nicht berücksichtigt, sollte aber auch lösbar sein.
Bzgl Versionen ist das u.g. genannte hame-relay die entscheidende Komponente - daher gelten alle dort getroffenen Aussagen dazu. Diese Beschreibung hier gilt für Firmware v110.9 (laut hame-relay geht auch die derzeit aktuelle v116). Ebenso werden laut hame-relay auch Marstek Venus und Jupiter unterstützt - für diese würde also alles im Folgenden beschriebene auch gelten mit der Ausnahme, dass für diese nur mode 2 möglich ist.
Es wird Folgendes benötigt:
Normalerweise erfolgt die Steuerung der B2500D mittels einer App indirekt über eine „in der Cloud“ befindliche MQTT Instanz - das heisst, der Speicher agiert als MQTT subscriber (wartend auf Befehle) und publisher (Antworten, so auch komplette Statuswerte inkl aller interessanten Metriken). Diese Kommandos sendet die App und empfängt die Antworten zur Anzeige im GUI. Die Software hame-relay erlaubt es nun, einen lokalen MQTT Broker „dazwischen“ zu schalten, entweder im
Der große Vorteil: Die App funktioniert immer noch.
Das Ganze wird nun in VZ integriert, indem der vzlogger ein Meter periodisch ausführt, was per „exec“ ein Script mit mosquitto_sub und pub ausführt, damit ein Kommando „status“ absetzt und die dazu passende Antwort auswertet. Diese wiederum enthält alle verfügbaren Metriken, die dann wie üblich als VZ channel zur middleware gesendet werden. Damit bekommen wir schon mal eine schöne graphische Darstellung.
Dazu kommt ein weiteres Script, welches als OS Service läuft, sich ebenfalls beim lokalen MQTT Broker als subscriber anmeldet und ebenfalls die vom vzlogger erbetenen status Antworten empfängt. Nach Empfang werden diese analysiert und die VZ middleware abgefragt, um den aktuellen Gesamtenergiefluß zu erhalten. Der Gesamtenergiefluß entspricht dem aktuellen Bedarf (bzw bei negativen Werten Einspeisung), was zusammen mit der aktuellen Energieausgabeleistung des Speichers (oder des Wechselrichters) ein Delta ergibt, was wir dann nutzen, um die Ausgabeleistung des Speichers nach oben oder unten zu regeln (oder ggf ganz abzuschalten).
Als lokale MQTT Instanz kann mosquitto genutzt werden oder was auch immer sonst. Ein user/password wird benötigt, zumindestens in hame-relay mode 1 wird dies benötigt um den Speicher umzukonfigurieren.
Diese Komponente ist sehr gut dokumentiert hier. In meiner Umgebung läuft hame-relay innerhalb einer Docker-Instanz - überraschend leichtgewichtig, ein Raspi kommt damit locker zurecht. In einem Config-File müssen ein paar wenige Parameter eingetragen werden, dann die docker Instanz einfach starten und als OS service konfigurieren (muss in mode 2 immer laufen - in mode 1 eigentlich entbehrlich solange die App nicht genutzt werden soll).
Um mode 1 zu verwenden, muss der B2500D umkonfiguriert werden (um den lokalen MQTT Broker zu nutzen). Auf der o.g. hame-relay Seite ist ein Config-Tool verlinkt, welches diese Aufgabe erfüllt. Dies war in meinem Fall etwas hakelig, aber nur weil:
Mit einem aktuellen OS/Browser (Android + Chrome) lief das dann völlig problemlos.
Keine besonderen Herausforderungen. Meine Beispiel-Config:
{
"enabled": true,
"skip": false,
"interval": 30,
"protocol": "exec",
"command": "/opt/vzlogger/bin/b2500d_mqtt.pl",
"format": "$i : $v",
"channels":
[
{
"uuid": "...",
"api": "volkszaehler",
"middleware": "http://.../middleware.php",
"identifier": "w1"
},
...
Die Metrik w1 beispielsweise entspricht der am PV Eingang 1 anliegenden Leistung der Solarmodule. Das MQTT Protokoll des B2500D und die Metriken sind hier beschrieben. Das o.g. Script b2500d_mqtt.pl ist hier (zusammen mit dem u.g. Steuerscript).
Wie oben beschrieben sorgt nun ein weiteres Script b2500d_ctrl.pl für das Regeln der Ausgabeleistung des Speichers je nach Bedarf. Dieses Script ist ebenfalls hier zu finden. Die nötigen Config-Parameter befinden sich direkt im Script:
Dieses Script muss kontinuierlich laufen und arbeitet wie oben beschrieben. Es wird versucht, die Ausgangsleistung des PV Speichers so zu regeln, dass ein Gesamtenergiefluß im Haus von Null erreicht wird. Da der B2500D mit der derzeitigen Firmware nicht erlaubt, Output < 40W einzustellen, wird unter einem Grenzwert der Output ganz abgeschaltet (und bei Bedarf wieder ein).
All dies wird über genau ein Zeitinterval 00:00-23:59 geregelt, welches kontinuierlich verändert wird (bzw dessen Ausgangsleistung), genauso, wie man das in der App einstellen würde.
Versuche, den Auto-Modus zu verwenden, waren einigermaßen erfolgreich, aber recht instabil. Die derzeitige Lösung hat den Vorteil, die Leistungsberechnung selbst unter Kontrolle zu haben und funktioniert wie gesagt sehr gut und stabil.
Bei mir sieht das nun (Beispiel heute, 18.Sept, vormittags sehr bewölkt, ab mittags sonnig) so aus:
Am Vortag auch bewölkt, daher morgens Speicher leer (10%). Hellblau der Gesamtenergiefluss, gelb die Leistung des Wechselrichters, hellgelb die beiden PV Eingänge.
Ich habe eigentlich einen Hoymiles Wechselrichter - wenn man beim Speicher diesen korrekt konfiguriert, erlaubt der Speicher merkwürdigerweise nur eine Min-Ausgangleistung von 80W (sowohl im Auto-Modus als auch zeitgesteuert). Wenn man statt dessen einen Marstek WR mit gleicher Max-Leistung einstellt, ist eine Minimalleistung von 40W möglich. Da z.B. nachts (nur Kühlschrank periodisch) meist nur in etwa 10-15W benötigt werden, schaltet in diesem Fall das Steuerscript die Leistungsabgabe komplett ab.
Die App kann grundsätzlich parallel verwendet werden - sicherheitshalber ist aber ein Stoppen des b2500d_ctrl Scripts empfehlenswert, um die Speicher-Firmware nicht durch parallele ggf sogar widersprechende Kommandos zu verwirren