Modul für Growatt/OpenInverterGateway

Hallo,
ich habe ein Modul geschrieben um die Erzeugung von einem Growatt WR mit einem OpenInverterGateway dongle als Zähler in openEMS zu bekommen.
Das Modul für Shelly Zähler war für mich da eine starke Orientierung, da beide die Daten per JSON bereitstellen.
Es wär schön, wenn jemand darüber schauen könnte, bevor ich ein Pull Request stelle.

Moin phamel,

ich habe den Code an sich noch nicht ganz angesehen, habe aber 2 Anmerkungen zu machen:

  1. So weit ich das verstehe, unterstützt der Wechselrichter auch Modbus TCP bzw. RTU?
  2. Was spricht gegen die Nutzung von Modbus TCP? So wäre es für uns möglich, den Wechselrichter/die Batterie dann auch zu steuern.

Eventuell wäre auch eine Umbenennung des Packages ganz gut, dass man erkennt, dass es für Growatt WR gedacht ist - klar, du weisst, dass OpenInverterGateway für diese Geräte genutzt wird, ein User, der nicht weiß, dass es das gibt (inkl. mir bis vor 5 Minuten) muss erst mal suchen :stuck_out_tongue:

Grüße

Hallo Sn0w3y,
Die software stellt zwar ein Modbus interface zur Verfügung, aber kein richtiges Modbus TCP Gateway, siehe Modbus - Aktivierung, Funktion ?!? · OpenInverterGateway/OpenInverterGateway · Discussion #432 · GitHub
Es ist theoretisch möglich eine http anfrage an den webserver zu senden, welcher einen Modbus Befehl weiterleitet und die Antwort zurückgibt, aber dies erschien mir um einiges komplexer und ich war mir nicht sicher wie gut ich das im Kontext von openEMS umsetzen kann.
Hier etwas code den ich zuvor testweise geschrieben hatte um Modbus nutzen zu können:

public static int getValue(String uri, String data) throws Exception{
        HttpClient client = HttpClient.newBuilder().build();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(uri))
                .POST(HttpRequest.BodyPublishers.ofString(data))
                .header("Content-Type", "application/x-www-form-urlencoded")
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        String[] parts = response.body().split(" ");
        return Integer.parseInt(parts[parts.length-1]);
    }
    public static int modbusRequest(String ip, int register, int value, char operation, char type){
        int val;
        try {
            val = getValue("http://" + ip + "/postCommunicationModbus_p", "reg=" + register + "&val=" + value + "&operation=" + operation + "&registerType=" + type + "&type=16b");
        }
        catch(Exception e){
            val = 0;
        }
        return val;
    }

bzgl. Namen dachte ich mir, das es besser wär OpenInverterGateway zu nutzen, damit nicht ein user denkt es würde die Daten aus der standard software für die Growatt Dongles bekommen.

Viele Grüße

1 Like

Hallo und willkommen in der Community.

Mit Growatt kenne ich mich bisher nicht aus. Sehe ich das richtig, dass der Wechselrichter dafür mit einer angepassten Firmware geflasht werden muss? Das klingt nicht so “massentauglich”…

Für Growatt Geräte findet man online auch eine Modbus-Protokolldefinition (ich denke die hat auch Sn0w3y gemeint:

Was spricht dagegen, diese zu verwenden? Welche Vor- und Nachteile ergeben sich? Am liebsten hätte ich natürlich immer eine Integration, die für den Nutzer so einfach wie möglich einzurichten ist.

Gruß,
Stefan

1 Like

Meine Gedanken korrekt ausgeführt, danke Stefan!

Hallo,
der Wechselrichter selbst wird hier nicht geflasht, nur der “ShineWifi-X” Dongle.
Die standard firmware auf diesem hat leider einige unschöne schwächen, beispielsweise kann sich diese nur mit 2.4GHz WLAN netzen verbinden, wenn man ein Netz hat welches sowohl 2.4GHz als auch 5GHz mit der selben SSID sendet weigert sich dieser sich zu verbinden, genauso kann sich nicht mit SSIDs verbunden werden, die Sonderzeichen enthalten (z.B. “FRITZ!Box…”).

Was das Modbus Protokoll angeht, der Dongle ist an sich nur ein ESP microcontroller, welcher mit dem WR über eine Modbus RTU Verbindung (USB-connector) kommuniziert. Inwiefern die original firmware des Dongles diese bereitstellen würde, kann ich leider nicht sagen.
Mit der alternativen firmware ist dies über ein HTTP request erreichbar, nur leider verwenden verschiedene WRs unterschiedliche Versionen des Modbus Protokolls, was dazu führt das Daten in komplett anderen Registern liegen.

Die Abfrage über JSON sah mir daher problemloser aus.

Einen Wechselrichter über HTTP Requests einzubinden halte ich aus 2 Gründen für nicht so ganz sinnvoll:

  1. Nicht steuerbar in deinem Fall (somit wäre es eine reine Monitoring Geschichte, welche wir aktuell ausschließlich bei nicht steuerbaren Systemen haben [siehe Samsung SDI])
  2. keiner der anderen Wechselrichter, die Modbus unterstützen sind mit HTTP eingebunden, um eine Streamline zu haben und um eben auch steuern zu können.

Das ist bei fast allen Marken so, dass die Modelle verschiedene Modbus Register haben :slight_smile: Deswegen wäre es ja auch sinnvoll, einen schon mal einzubinden :stuck_out_tongue:

Ein paar Anmerkungen noch:

Das müsste ja dann der Strom sein, der AC Seitig anliegt, PV-Voltage & Current hört sich aber eher nach DC an.

Hier setzt du nämlich die AC-Leistung und hier:

den DC-Strom und DC-Spannung, oder täuscht das?

Grüße !