Growatt SPH 4000-10000 TL3 BH UP MQTT über ESP

Begonnen von Teamdrachen, 18 März 2023, 18:24:08

Vorheriges Thema - Nächstes Thema

Tobias

Das ist alles nur noch Glaskugel lesen.
Stell Debuglevel auf 3 und monitore den Seriellen Monitor. Ggf auf Debuglevel 4 oder 5 erhöhen. Nur damit kann dir geholfen werden.

Bei meinen Testanordnungen hänge ich in einer Bootschleife nur bei "Brownout detection", sprich, Stromversorgung (oder Kabel) zu schwach
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Teamdrachen

Brownout wäre zu einfach

WebServer started...

abort() was called at PC 0x4015b45f on core 1


Backtrace: 0x40083665:0x3ffb1a20 0x4008b9c9:0x3ffb1a40 0x40091331:0x3ffb1a60 0x4015b45f:0x3ffb1ae0 0

ELF file SHA256: 172f1d46cb9098f1


Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13192
load:0x40080400,len:3028
entry 0x400805e4
Start of Solar Inverter MQTT Gateway
Starting BaseConfig
reading config file
opened config file
{
  "mqttroot": "Growatt",
  "mqttserver": "test.mosquitto.org",
  "mqttport": "1883",
  "mqttbasepath": "home",
  "UseRandomClientID": "none",
  "debuglevel": 0,
  "count": 1
}Starting Wifi and MQTT
WiFi Start
WiFi connected with local IP: 192.168.1.168
Starting MQTT (test.mosquitto.org:1883)




Tobias

#17
kann ich leider nicht nachvollziehen.
Ich habe meinen ESP32 einmal komplett formatiert (-> Button Reset -> Werkszustand herstellen) und danach ist er mit der defaultkonfiguration sofort gestartet....
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13132
load:0x40080400,len:3036
entry 0x400805e4
Start of Solar Inverter MQTT Gateway
Starting BaseConfig
Starting Wifi and MQTT
WiFi Start
WiFi connected with local IP: 10.0.2.93
Starting MQTT (test.mosquitto.org:1883)


MQTT aktiviert
Starting WebServer
WebServer started...
Attempting MQTT connection as Solax-52426
connected...
MQTT Subscribed to: home/Solax/set/TargetBatSOC/#
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Teamdrachen

So langsam bin ich kurz vorm anzünden.

Wroom32 + Board HW-0519

Daten kommen sauber rein, aber nach 60 Minuten fällt er in den Bootloop, wo er nur wieder raus kommt wenn man das HW-0519 trennt.

Wroom32 + SP3485 (welches ich für defekt hielt)

Nach dem Booten dauert es etwas (ca. 10-30sek) bis Daten kommen.
Serial Monitor spuckt Fehler ohne Ende
Request queue data to inverter: 0x01 0x04 0x03 0xE8 0x00 0x77 0x30 0x5C
Read Data from Queue:
Dataframe invalid
Parse 503 Bytes of data
Failed to parse JSON Register Data: EmptyInput
Error: for Name 'undefined' no position array found
Request queue data to inverter: 0x01 0x04 0x00 0x00 0x00 0x77 0xB0 0x2C

                                  Publish home/Solax/rssi: -67
                                                              Query Live Data into Queue:
0x01 0x04 0x00 0x00 0x00 0x77
0x01 0x04 0x03 0xE8 0x00 0x77
Ajax Json Empfangen: {
  "action": "RefreshLiveData"
}
Ajax Json Antwort:
Request queue data to inverter: 0x01 0x04 0x00 0x00 0x00 0x77 0xB0 0x2C
Read Data from Queue:
0x00 0xFF 0x96 0x01 0x04 0xEE 0x00 0x05 0x00 0x00 0x54 0xC4 0x16 0xE0 0x00 0x25 0x00 0x00 0x50 0x11
Dataframe invalid
Request queue data to inverter: 0x01 0x04 0x03 0xE8 0x00 0x77 0x30 0x5C
Read Data from Queue:
0xFF 0x00 0x7F 0xC0 0x30 0x1F 0x05 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x04 0x00 0x00 0x00 0x00 0x00
Dataframe invalid

Im Webinterface kommen dennoch Daten rein, die alle 20-30 Sekunden wechseln.

Anhang 1
Erzeugungsleistung PV1
Grid frequency
stimmen
Entladene Energy Speicher entspricht der Einspeisung

Anhang2
Erzeugungsleistung PV1

Alles kommt aus dem selben Stream, zwischen 1 & 2 wurde nicht restartet und der serial Monitor zeigt immer den selben Code


Tobias

Also auf jeden Fall ist die empfangende Antwort falsch. Wenn dein Inverter die Modbus Adresse 0x01, also 1 hat, muss die Antwort auch immer mit 0x01 beginnen. In deinem Fall muss die Antwort also IMMER mit "0x01 0x04" beginnnen. Wenn nicht, ist was schief bei dir.

Am besten du testest erstmal nur mit dem example_esp32 testsketch
https://github.com/tobiasfaust/SolaxModbusGateway/tree/master/examples/test_RS485_Solax_ESP32

Anpassungen dann im Sketch machen, wie zb. den Anfragestring auf dein obiges Beispiel "0x01 0x04 0x00 0x00 0x00 0x77" setzen.

Wichtig, du hast den ModbusAdapter an einem Hardwareserialport?
Solch nicht erklärbaren Fehler hatte ich nur wenn ich Softwareserial benutzt hatte
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Teamdrachen

Mein Problem: Ich versteh Deinen Code nicht wirklich.  :'(
Ich kann das nachvollziehen, Du hast den Code im Kopf da ist vieles selbsterklärend, aber von außen muss man sich erst mal reinfitzen.
Deswegen auch die Frage wie unterscheide ich z.b. zwischen Register 4.1 und 4.2 ?
Vermutlich meint Growatt damit Register 3 und 4, aber auch dann kann ich bis auf die 119 mit
["#ClientID", "0x04", "0x00", "0x00", "0x00", "0x77"],
["#ClientID", "0x04", "0x03", "0xE8", "0x00", "0x77"]
nicht viel anfangen.

Ich bin kein Programmierer, aber ich verstehe zumindest gewisse Logiken und wenn ich mit dem selben Code, dem selben ESP aber 2 unterschiedlichen 485 Modulen unterschiedliche Ergebnisse bekomme, dann passt irgendwas in der Ansteuerung nicht.
Ein 485 Modul interpretiert die Daten richtig, schmiert aber nach einer Stunde ab.
Ein 485 Modul läuft stabil, produziert aber Datenkauderwelsch.

Da passt irgendwas im Code nicht, was den Datenaustausch mit Growatt SPH angeht, aber ich kann an der Stelle nicht weiterhelfen... siehe 1. Satz.
Und Dir fehlt der Growatt SPH was es auch nicht gerade einfacher macht.

Wie gesagt, ich verstehe zumindest gewisse Logiken und hatte gestern Abend noch ESPHOME gefunden.
Damit konnte ich mir in einer Stunde einen Code zusammenklöppeln der den Growatt schon mal ausliest und in einem Webinterface darstellt.

Im Gegensatz zum Solax-ESP ist auf dem 485 Board auch richtig was los, bei jeder Abfrage blinken beide LED abwechselnd schnell, während mit dem Solax Code nur ein eher müdes vereinzeltes kurzes aufleuchten zu verzeichnen ist.
Ich nutze die selbe Hardware, die selbe Verkabelung, die selben Pins.

MQTT fehlt noch, aber das sollte schaffbar sein jedem Wert noch ein Topic zu spendieren.

Zumindest kann ich so aber die interessanten Register wie Eigenverbrauch, Netzbezug, momentane Einspeiseleistung und noch einiges mehr beisteuern.


Tobias

Wie die Register zu interpretieren sind und wie man die Input und Holding Register anspricht und ausließt steht alles sehr detailliert in der Modbus Doku drin.

Wenn du das beispielprogramm welches ich dir empfohlen hatte zum Testen von oben nicht benutzt, kann ich dir auch nicht weiterhelfen. Das ist minimalistisch mit dem man die grundsätzliche Kommunikation testen kann.

Bei anderen hat's mit Growatt ja auch funktioniert.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Teamdrachen

Growatt, oder Growatt SPH UP ?

Es ging doch auch nicht allein um die Holdings, das System war instabil und reagierte unterschiedlich auf verschiedene 485 Module.
Wie auch immer, der Gedankenanstoß "es ist möglich" reichte.

Mein ESP sendet jetzt brav alle benötigten Daten über MQTT und FHEM kann wieder Verbraucher steuern und den EV der WP berechnen.

Tobias

Super,
Kannst du uns allen dann noch verraten woran es gelegen hat? Für die Nachfolger mit ähnlichen Problemen... und ich kann meine FAQ's füllen ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Teamdrachen

Zitat von: Tobias am 25 März 2023, 09:48:20Super,
Kannst du uns allen dann noch verraten woran es gelegen hat? Für die Nachfolger mit ähnlichen Problemen... und ich kann meine FAQ's füllen ;)

Leider nicht, ich habe das ganze über ESPHome realisiert.
yaml versteh ich irgendwie einfacher als c und ESPHome hat eine Modbus und sogar eine Growatt api, damit zieht es sich die benötigten Daten selbst, baut den Arduio Code, kompiliert und flasht.

Hatte es auch mit dem Growatt Template gestestet, allerdings müsste man da für jede Änderung die generierte growatt_solar.cpp und growatt_solar.h anpassen und über IDE/Visual Studio kompilieren.
Mit der Modbus api kann man das ganze in der yaml anpassen. Da wird nur der Registertyp 0x04 festgelegt.
Client ID, Register-ID, valuetype, Intervall etc. in der yaml bestimmen und den Rest macht ESPHome.

Das unterscheidet sich von Deiner Herangehensweise, da Du die kompletten Register abfragst und dann den Output zuordnest, während so nur bestimmte Register abgefragt werden.




Tobias

#25
Noch ein Nachtrag,
Ja ich frage alle Register auf einmal ab anstatt jedes einzeln. Das hat auch seinen Grund da jede Abfrage immer 1sek benötigt. Das ist vom Inverter so festgelegt.
Damit könnte man also jede Sekunde frische Werte ins MQTT pushen. Frage ich alle Register einzeln ab so könnte ich bei 20 werten nur maximal alle 20sek frische Werte pushen ;)

Bei mir ist die Konfiguration über ein JSON file , also auch nicht schwer ;)

Aber Hauptsache es funktioniert nun irgendwie ;)
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter