Growatt Wechselrichter im Cerbo GX sichtbar machen

Das ESS von Victron Energy ist bekanntermaßen sehr offen und flexibel. Nativ werden Wechselrichter von Fronius und SMA unterstützt. Ich konnte leider keinen Fronius Wechselrichter bekommen, als ich im letzten Jahr eine PV-Anlage bauen wollte. Halb so wild. Strom wird trotzdem produziert. 🙂 Irgendwie ist aber auch immer der Durst nach Transparenz da. Die Daten des Growatt-Wechselrichters über die Hersteller-Cloud auslesen kam nicht in Frage.

Daher bin ich auf die Suche gegangen und bin auf ein Projekt gestoßen, welches den Wechselrichter per Modbus ausließt und die Daten per MQTT versendet. Perfekt!

Zum Einsatz kommt ein ESP, den man als Wemos D1 direkt über den USB-Port des Wechselrichters mit Energie versorgen kann. Zusätzlich benötigt man noch einen RS485 to TTL converter, der einfach mit dem ESP verbunden wird.

Das Projekt ist hier gut beschrieben: https://github.com/nygma2004/growatt2mqtt

Da ich die Daten nun in meinem Broker habe, kann ich sie zumindest schon mal Visualisieren. 🙂

Um im Victron System nun aber auch die Energieflüsse und Verbräuche korrekt zu ermitteln, muss der GX auch irgendwie die Daten bekommen. Als Smart-Meter für ein Netz-paralleles System kann man ganz gut den Shelly 3EM verwenden, der von Python-Script per REST-API ausgelesen wird.

Man könnte nun einfach einen weiteren Shelly 3EM am Wechselrichter platzieren und ihn als PV-Inverter deklarieren.

Ich dachte mir, ich habe die Daten aber schon – warum sollte ich sie nochmal erzeugen?

Idee:

Node-Red nimmt die relevanten Daten des Wechselrichters und packt sie in einen String, der wie die Antwort des Shelly 3EM auf der REST-API aussieht. Dann kann man das Python-Script in zweiter Instanz ausführen und alles ist gut.

Node-Red kann das relativ einfach machen:

  1. den JSON-String mit den aktuellen Werten generieren und in einer Flow-Variable speichern.
  2. den gespeicherten JSON-String bei jedem API-Call abfragen und versenden.

Hier einmal kurz die Funktion zum Erzeugen

function addZero(i) {
  if (i < 10) {
    i = "0" + i;
  }
  return i;
}
var d = new Date();
var h = addZero(d.getHours());
var m = addZero(d.getMinutes());
var myepoch = d.getTime();
var mytime = h + ":" + m ;
var power = Number(msg.payload);
var linepower =(power/3).toFixed(2);
var current = (linepower/230).toFixed(2);

msg.payload = "{\"wifi_sta\":{\"connected\":true,\"ssid\":\"WLAN\",\"ip\":\"IP-der-API\",\"rssi\":-51},\"cloud\":{\"enabled\":false,\"connected\":false},\"mqtt\":{\"connected\":true},\"time\":\""+mytime+"\",\"unixtime\":"+myepoch+",\"serial\":4711,\"has_update\":false,\"mac\":\"own-fake-mac\",\"cfg_changed_cnt\":0,\"actions_stats\":{\"skipped\":0},\"relays\":[{\"ison\":false,\"has_timer\":false,\"timer_started\":0,\"timer_duration\":0,\"timer_remaining\":0,\"overpower\":false,\"is_valid\":true,\"source\":\"input\"}],\"emeters\":[{\"power\":"+linepower+",\"pf\":1,\"current\":"+current+",\"voltage\":230.00,\"is_valid\":true,\"total\":4.6,\"total_returned\":4.5},{\"power\":"+linepower+",\"pf\":1,\"current\":"+current+",\"voltage\":230.00,\"is_valid\":true,\"total\":2.0,\"total_returned\":8.6},{\"power\":"+linepower+",\"pf\":1,\"current\":"+current+",\"voltage\":230.00,\"is_valid\":true,\"total\":0.1,\"total_returned\":2.2}],\"total_power\":"+power+",\"emeter_n\":{\"current\":0.00,\"ixsum\":1.49,\"mismatch\":false,\"is_valid\":false},\"fs_mounted\":true,\"v_data\":1,\"ct_calst\":0,\"update\":{\"status\":\"idle\",\"has_update\":false,\"new_version\":\"2022\",\"old_version\":\"2022\"},\"ram_total\":49928,\"ram_free\":22388,\"fs_size\":233681,\"fs_free\":154616,\"uptime\":3}";
flow.set('jsonstr',msg.payload);
return msg;

Der Knackpunkt war dann zunächst die zweite Instanz des Python-Scripts. Das Originalscript war nicht für mehrere Instanzen ausgelegt und auch die GEräteklasse PV-Inverter war nicht vorgesehen.

Hier habe ich dann aber ein Script gefunden, welches genau für diesen Zweck angepasst war: PV-Inverter per Shelly 3EM abfragen:

https://github.com/Halmand/dbus-shelly-3em-smartmeter

Kurz die Zugangsdaten zu meinem REST-API von Node-Red in die config.ini eingetragen, ./install.sh ausgeführt und zack, der Wechselrichter ist im GX von Victron Energy sichtbar.

Über den gleichen Weg lassen sich auch Balkonkraftwerke einbinden, entweder direkt mit den Daten und eigener REST-API oder Shelly Plug S.

Wer es am Growatt Wechselrichter noch komfortabler haben will, kann auch den Shine-X Stick flashen. Das ist auch ein ESP, der über USB die Modbusregister ausließt und diese versendet:

https://github.com/otti/Growatt_ShineWiFi-S

Dann muss man nicht mal den RS485 to TTL Converter und einen Wemos D1 dazu besorgen und hat weniger Kabelsalat am Wechselrichter.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.