Einbindung Solax- WR Gen4

Auflistung von gewünschten Features, Ausschreibung zur Umsetzung
Sascho
Beiträge: 61
Registriert: Mo Aug 24, 2020 1:21 pm

Re: Einbindung Solax- WR Gen4

Beitrag von Sascho »

Finde ich leider nicht.
Mache ich vielleicht was mit der Umrechnung falsch?
Ich habe mir ne Excel Tabelle gemacht und lasse die Hex Werte einzeln in dez umwandeln.
Ich habe also alle Hex Werte mit dem dazugehörigen Dez Wert aufgelistet. Nur so finde ich keine Übereinstimmung
Batteriespannung und SOC sind ja relativ stabil, die Werte finde ich nicht...

SOC 15%
Bat Spannung: 257,7

0x01 0x04 0xCC 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x02 0x05 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x13 0x84 0x10 0x0D 0x00 0x06 0x00 0x00 0x12 0x45 0x10 0x31 0x00 0x06 0x00 0x00 0x00 0x00 0x10 0x08 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x27 0x00 0x00 0x03 0x94 0x00 0x11 0xDE 0x1A 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x36 0x01 0x29 0x01 0x2E 0x00 0x00 0x0A 0x10 0x1C 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x45 0x7A 0x01 0x04 0xCC 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x24 0x00 0x00 0x01 0xB6 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xDD 0x9D
tobias.faust
Beiträge: 55
Registriert: Fr Okt 21, 2022 8:49 am

Re: Einbindung Solax- WR Gen4

Beitrag von tobias.faust »

Denk dran das du bisher nur die ersten 66 Register liest. Eventuell liegen deine gesuchte Werte in Registern dahinter?
Ist alles im JSON einstellbar. Nimm mal den Solax x3, der liest 2x 77 Register
Sascho
Beiträge: 61
Registriert: Mo Aug 24, 2020 1:21 pm

Re: Einbindung Solax- WR Gen4

Beitrag von Sascho »

okay also ich merke so langsam das ich nicht wirklich weiß was ich hier mache,
Es wäre nicht schlecht wenn du mir ein wenig mehr unter die Arme greifst.
Vor allem was sehe ich in den Daten?
wie muss ich die Daten konvertieren? mache ich das richtig? was ist mit float Zahlen oder Vorzeichen z.B.
Werden Register Nummern mit übertragen?
Wie wird ausgewählt was gelesen wird?
Ist das Register lesen Gerät unabhängig oder bedarf es einer bestimmten Anfrage? Siehe Bild unten


In der Protokoll Beschreibung gibt es mehrere Register Gruppen:
1.Holding Reg Group1-2
Reg No. 0...249
Storage Reg 6 Groups
1000...1124
Use for TL-X and TL-HX
3000...3124
2. Input Reg Grou1-2
0...237
Gruppe Storage Power
1000...1249
13. Gruppe Storage Power
2000...2124
Use for TL-X and TL-HX
3000...3249

Hier die beiden Hinweise:
3) App user could only care the input register.
4) App user could not care the holding registers.

VBAT und SOC finde ich bei
Input Reg 9.Gruppe Storage Power 1013/1014 (wenn denn die gruppe Storage power zu den input register gehört, sieht aber so aus)
Gruppe Use for.... 3169/3171

Hier aus dem Protokoll wie man die input Register liest:
Bild im Anhang
Dateianhänge
Input Reg lesen.JPG
Sascho
Beiträge: 61
Registriert: Mo Aug 24, 2020 1:21 pm

Re: Einbindung Solax- WR Gen4

Beitrag von Sascho »

Auf Solax X3 habe ich gestellt aber auch da kein Treffer...
es scheint aber doch das ich die hex werte falsch konvertiere
kannst du mir das Beispiel erklären aus deinem Post?
0x13 0x83 (=50,95Hz = 5095)
bedeutet umrechnung 0x1383 -> sollten das nicht 49,95 sein?
Bedeutet ich muss immer 2 Hexzahlen zusammenfügen?
die ersten 3 Positionen sagtest du wären Header also fange ich bei
4 und 5 an? auch da habe ich dann keinen Treffer
tobias.faust
Beiträge: 55
Registriert: Fr Okt 21, 2022 8:49 am

Re: Einbindung Solax- WR Gen4

Beitrag von tobias.faust »

hey,
ich habe oben im Hex String deine Batteriespannung gefunden :)
ich versuchs mal zu erklären.

Du suchst den Wert 257,7. Die meisten Werte haben den Faktor 0.1 um eine Kommastalle abzubilden. Also suchst du den Wert 2577. In Hex ist das 0A11 (https://bin-dez-hex-umrechner.de/). Alle Werte im Hexstring sind jeweils ein Byte. In der Doku steht das pro Register immer ein Word zurückgegeben wird. Ein Word sind 2 Byte. Also suchst du im HexString den Wert 0x0A und 0x011.
Oben findest du 0x0A, 0x10 an Stelle 197 und 198. Die 0x10 zu 0x11 wird 0.1 Abweichung sein. Also schau mal in die Doku. Stelle 197 minus 3 Byte Header sind 194. Geteilt durch 2 (ein Register gibt immer 2 Bytes = 1 Word zurück) sind 97. In der Doku im Kapitel "Input Register" steht an Stelle 97 "uwBatVolt_DSP" ---> Voila :)

Also muss in das JSON in der Register.h folgendes:

Code: Alles auswählen

{
	"position": [197, 198],
	"name": "BatVoltage",
	"realname": "Battery Voltage",
	"datatype": "float",
	"factor": 0.1,
	"unit": "V"
},
PS: grundsätzlich finde ich die Growatt Doku schwieriger zu verstehen als die Solax Doku. Da gebe ich dir Recht.
tobias.faust
Beiträge: 55
Registriert: Fr Okt 21, 2022 8:49 am

Re: Einbindung Solax- WR Gen4

Beitrag von tobias.faust »

Beispiel 2: GridFrequency
IN der Doku stehts an Stelle 37.
37x2=74
74+3 = 77
Im HexString steht an Stelle:
77 -> 0x14
78 -> 0x84

Ist umgerechnet in Dezimal: 4996
Also 49,96 hz

Nun muss das JSON ergänzt werden um:
{
"position": [77, 78],
"name": "GridFrequency",
"realname": "Grid Frequency",
"datatype": "float",
"factor": 0.01,
"unit": "Hz"
},
Damit müssten diese Beiden Werte als neuer Inverter im JSON aufgenommen werden.
(JSON´s immer mit jsonlint.com überprüfen)

Code: Alles auswählen

{
	"Growatt": {
		"config": {
			"RequestLiveData": [
				["#ClientID", "0x04", "0x00", "0x00", "0x00", "0x77"],
				["#ClientID", "0x04", "0x00", "0x78", "0x00", "0x77"]
			],
			"RequestIdData": ["#ClientID", "0x03", "0x00", "0x00", "0x00", "0x14"],
			"ClientIdPos": 0,
			"LiveDataFunctionCodePos": 1,
			"LiveDataFunctionCode": "0x04",
			"IdDataFunctionCodePos": 1,
			"IdDataFunctionCode": "0x03",
			"LiveDataStartsAtPos": 3,
			"IdDataStartsAtPos": 3,
			"LiveDataErrorPos": 1,
			"LiveDataErrorCode": "0x84",
			"IdDataErrorPos": 1,
			"IdDataErrorCode": "0x83",
			"LiveDataSuccessPos": 1,
			"LiveDataSuccessCode": "0x04",
			"IdDataSuccessPos": 1,
			"IdDataSuccessCode": "0x03"
		},
		"data": {
			"livedata": [{
					"position": [197, 198],
					"name": "BatVoltage",
					"realname": "Battery Voltage",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [77, 78],
					"name": "GridFrequency",
					"realname": "Grid Frequency",
					"datatype": "float",
					"factor": 0.01,
					"unit": "Hz"
				}
			],
			"id": [{
				"position": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
				"name": "InverterSN",
				"realname": "Inverter SerialNumber",
				"datatype": "string"
			}]
		}
	},
	"Solax-X1": {
		"config": {
			"RequestLiveData": [
				["#ClientID", "0x04", "0x00", "0x00", "0x00", "0x77"],
				["#ClientID", "0x04", "0x00", "0x78", "0x00", "0x77"]
			],
			"RequestIdData": ["#ClientID", "0x03", "0x00", "0x00", "0x00", "0x14"],
			"ClientIdPos": 0,
			"LiveDataFunctionCodePos": 1,
			"LiveDataFunctionCode": "0x04",
			"IdDataFunctionCodePos": 1,
			"IdDataFunctionCode": "0x03",
			"LiveDataStartsAtPos": 3,
			"IdDataStartsAtPos": 3,
			"LiveDataErrorPos": 1,
			"LiveDataErrorCode": "0x84",
			"IdDataErrorPos": 1,
			"IdDataErrorCode": "0x83",
			"LiveDataSuccessPos": 1,
			"LiveDataSuccessCode": "0x04",
			"IdDataSuccessPos": 1,
			"IdDataSuccessCode": "0x03"
		},
		"data": {
			"livedata": [{
					"position": [3, 4],
					"name": "GridVoltage",
					"realname": "Grid Voltage",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [5, 6],
					"name": "GridCurrent",
					"realname": "Grid Current",
					"datatype": "float",
					"factor": 0.1,
					"unit": "A"
				},
				{
					"position": [7, 8],
					"name": "GridPower",
					"realname": "Grid Power",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [9, 10],
					"name": "PvVoltage1",
					"realname": "Pv Voltage 1",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [11, 12],
					"name": "PvVoltage2",
					"realname": "Pv Voltage 2",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [13, 14],
					"name": "PvCurrent1",
					"realname": "Pv Current 1",
					"datatype": "float",
					"factor": 0.1,
					"unit": "A"
				},
				{
					"position": [15, 16],
					"name": "PvCurrent2",
					"realname": "Pv Current 2",
					"datatype": "float",
					"factor": 0.1,
					"unit": "A"
				},
				{
					"position": [17, 18],
					"name": "GridFrequency",
					"realname": "Grid Frequency",
					"datatype": "float",
					"factor": 0.01,
					"unit": "Hz"
				},
				{
					"position": [19, 20],
					"name": "Temperature",
					"realname": "Temperature",
					"datatype": "integer",
					"unit": "°C"
				},
				{
					"position": [23, 24],
					"name": "PowerDC1",
					"realname": "Power DC 1",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [25, 26],
					"name": "PowerDC2",
					"realname": "Power DC 2",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [43, 44],
					"name": "BatVoltage",
					"realname": "Battery Voltage",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [45, 45],
					"name": "BatCurrent",
					"realname": "Battery Current",
					"datatype": "float",
					"factor": 0.1,
					"unit": "A"
				},
				{
					"position": [47, 48],
					"name": "BatPower",
					"realname": "Battery Power",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [51, 52],
					"name": "BatTemp",
					"realname": "Battery Temperature",
					"datatype": "integer",
					"unit": "°C"
				},
				{
					"position": [56, 57],
					"name": "BatCapacity",
					"realname": "Battery Capacity",
					"datatype": "integer",
					"unit": "%"
				},
				{
					"position": [58, 59, 60, 61],
					"name": "OutputEnergyCharge",
					"realname": "Output Energy Charge",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [64, 65],
					"name": "OutputEnergyChargeToday",
					"realname": "Output Energy Charge Today",
					"datatype": "float",
					"factor": 0.1,
					"unit": "W"
				},
				{
					"position": [66, 67, 68, 69],
					"name": "InputEnergyCharge",
					"realname": "Input Energy Charge",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [70, 71],
					"name": "InputEnergyChargeToday",
					"realname": "Input Energy Charge Today",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [141, 142, 143, 144],
					"name": "feedinPower",
					"realname": "FeedIn Energy Power to Grid",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [145, 146, 147, 148],
					"name": "feedinEnergyTotal",
					"realname": "FeedIn Energy Total",
					"datatype": "float",
					"factor": 0.01,
					"unit": "kWh"
				},
				{
					"position": [149, 150, 151, 152],
					"name": "consumedEnergyTotal",
					"realname": "Consumed Energy Total",
					"datatype": "float",
					"factor": 0.01,
					"unit": "kWh"
				},
				{
					"position": [163, 164],
					"name": "EtodayToGrid",
					"realname": "Today Energy to Grid",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [165, 166, 167, 168],
					"name": "EtotalToGrid",
					"realname": "Total Energy to Grid",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [276, 277, 278, 279],
					"name": "OnGridRunTime",
					"realname": "OnGrid RunTime",
					"datatype": "float",
					"factor": 0.1,
					"unit": "h"
				},
				{
					"position": [280, 281, 282, 283],
					"name": "OffGridRunTime",
					"realname": "OffGrid RunTime",
					"datatype": "float",
					"factor": 0.1,
					"unit": "h"
				}
			],
			"id": [{
					"position": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
					"name": "InverterSN",
					"realname": "Inverter SerialNumber",
					"datatype": "string"
				},
				{
					"position": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
					"name": "FactoryName",
					"realname": "Factory Name",
					"datatype": "string"
				},
				{
					"position": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44],
					"name": "ModuleName",
					"realname": "Module Name",
					"datatype": "string"
				}
			]
		}
	},
	"Solax-X3": {
		"config": {
			"RequestLiveData": [
				["#ClientID", "0x04", "0x00", "0x00", "0x00", "0x77"],
				["#ClientID", "0x04", "0x00", "0x78", "0x00", "0x77"]
			],
			"RequestIdData": ["#ClientID", "0x03", "0x00", "0x00", "0x00", "0x14"],
			"ClientIdPos": 0,
			"LiveDataFunctionCodePos": 1,
			"LiveDataFunctionCode": "0x04",
			"IDDataFunctionCodePos": 1,
			"IdDataFunctionCode": "0x03",
			"LiveDataStartsAtPos": 3,
			"IdDataStartsAtPos": 3,
			"LiveDataErrorPos": 1,
			"LiveDataErrorCode": "0x84",
			"IdDataErrorPos": 1,
			"IdDataErrorCode": "0x83",
			"LiveDataSuccessPos": 1,
			"LiveDataSuccessCode": "0x04",
			"IdDataSuccessPos": 1,
			"IdDataSuccessCode": "0x03"
		},
		"data": {
			"livedata": [{
					"position": [3, 4],
					"name": "GridVoltage",
					"realname": "Grid Voltage",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [5, 6],
					"name": "GridCurrent",
					"realname": "Grid Current",
					"datatype": "float",
					"factor": 0.1,
					"unit": "A"
				},
				{
					"position": [7, 8],
					"name": "GridPower",
					"realname": "Grid Power",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [9, 10],
					"name": "PvVoltage1",
					"realname": "Pv Voltage 1",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [11, 12],
					"name": "PvVoltage2",
					"realname": "Pv Voltage 2",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [13, 14],
					"name": "PvCurrent1",
					"realname": "Pv Current 1",
					"datatype": "float",
					"factor": 0.1,
					"unit": "A"
				},
				{
					"position": [15, 16],
					"name": "PvCurrent2",
					"realname": "Pv Current 2",
					"datatype": "float",
					"factor": 0.1,
					"unit": "A"
				},
				{
					"position": [17, 18],
					"name": "GridFrequency",
					"realname": "Grid Frequency",
					"datatype": "float",
					"factor": 0.01,
					"unit": "Hz"
				},
				{
					"position": [19, 20],
					"name": "Temperature",
					"realname": "Temperature",
					"datatype": "integer",
					"unit": "°C"
				},
				{
					"position": [23, 24],
					"name": "PowerDC1",
					"realname": "Power DC 1",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [25, 26],
					"name": "PowerDC2",
					"realname": "Power DC 2",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [43, 44],
					"name": "BatVoltage",
					"realname": "Battery Voltage",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
				{
					"position": [45, 45],
					"name": "BatCurrent",
					"realname": "Battery Current",
					"datatype": "float",
					"factor": 0.1,
					"unit": "A"
				},
				{
					"position": [47, 48],
					"name": "BatPower",
					"realname": "Battery Power",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [51, 52],
					"name": "BatTemp",
					"realname": "Battery Temperature",
					"datatype": "integer",
					"unit": "°C"
				},
				{
					"position": [56, 57],
					"name": "BatCapacity",
					"realname": "Battery Capacity",
					"datatype": "integer",
					"unit": "%"
				},
				{
					"position": [58, 59, 60, 61],
					"name": "OutputEnergyCharge",
					"realname": "Output Energy Charge",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [64, 65],
					"name": "OutputEnergyChargeToday",
					"realname": "Output Energy Charge Today",
					"datatype": "float",
					"factor": 0.1,
					"unit": "W"
				},
				{
					"position": [66, 67, 68, 69],
					"name": "InputEnergyCharge",
					"realname": "Input Energy Charge",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [70, 71],
					"name": "InputEnergyChargeToday",
					"realname": "Input Energy Charge Today",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [141, 142, 143, 144],
					"name": "feedinPower",
					"realname": "FeedIn Energy Power to Grid",
					"datatype": "integer",
					"unit": "W"
				},
				{
					"position": [145, 146, 147, 148],
					"name": "feedinEnergyTotal",
					"realname": "FeedIn Energy Total",
					"datatype": "float",
					"factor": 0.01,
					"unit": "kWh"
				},
				{
					"position": [149, 150, 151, 152],
					"name": "consumedEnergyTotal",
					"realname": "Consumed Energy Total",
					"datatype": "float",
					"factor": 0.01,
					"unit": "kWh"
				},
				{
					"position": [166, 167],
					"name": "EtodayToGrid",
					"realname": "Today Energy to Grid",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [165, 166, 167, 168],
					"name": "EtotalToGrid",
					"realname": "Total Energy to Grid",
					"datatype": "float",
					"factor": 0.1,
					"unit": "kWh"
				},
				{
					"position": [273, 274, 275, 276],
					"name": "OnGridRunTime",
					"realname": "OnGrid RunTime",
					"datatype": "float",
					"factor": 0.1,
					"unit": "h"
				},
				{
					"position": [277, 278, 279, 280],
					"name": "OffGridRunTime",
					"realname": "OffGrid RunTime",
					"datatype": "float",
					"factor": 0.1,
					"unit": "h"
				}
			],
			"id": [{
					"position": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
					"name": "InverterSN",
					"realname": "Inverter SerialNumber",
					"datatype": "string"
				},
				{
					"position": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
					"name": "FactoryName",
					"realname": "Factory Name",
					"datatype": "string"
				},
				{
					"position": [31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44],
					"name": "ModuleName",
					"realname": "Module Name",
					"datatype": "string"
				}
			]
		}
	}
}
Sascho
Beiträge: 61
Registriert: Mo Aug 24, 2020 1:21 pm

Re: Einbindung Solax- WR Gen4

Beitrag von Sascho »

Oh das hört sich gut, dann will ich mal versuchen das ganze zu verstehen und die Werte raustüfteln.
vielen Dank schon mal.

Bezüglich der register.h
Bedeute ich muss dann das ganze selber compilieren oder kann ich trotzdem Gitpod benutzen?
wie wäre der beste weg?

was ist mit den ganzen anderen Daten vorab?
Ich denke "Growatt ist dann automatisch im Auswahlfeld auf der Modbus config Seite und die eingetragenen Werte unter live data dann unter Item config?

Der MQTT Server ist in dem Fall dann die OpenWB?
Sind die Namen der erwarteten Werte für die OpenWB schon angepasst? anbei bilder der config seiten openwb

"Growatt": {
"config": {
"RequestLiveData": [
["#ClientID", "0x04", "0x00", "0x00", "0x00", "0x77"],
["#ClientID", "0x04", "0x00", "0x78", "0x00", "0x77"]
],
"RequestIdData": ["#ClientID", "0x03", "0x00", "0x00", "0x00", "0x14"],
"ClientIdPos": 0,
"LiveDataFunctionCodePos": 1,
"LiveDataFunctionCode": "0x04",
"IdDataFunctionCodePos": 1,
"IdDataFunctionCode": "0x03",
"LiveDataStartsAtPos": 3,
"IdDataStartsAtPos": 3,
"LiveDataErrorPos": 1,
"LiveDataErrorCode": "0x84",
"IdDataErrorPos": 1,
"IdDataErrorCode": "0x83",
"LiveDataSuccessPos": 1,
"LiveDataSuccessCode": "0x04",
"IdDataSuccessPos": 1,
"IdDataSuccessCode": "0x03"

pvconfig.JPG
modulconfig.JPG
tobias.faust
Beiträge: 55
Registriert: Fr Okt 21, 2022 8:49 am

Re: Einbindung Solax- WR Gen4

Beitrag von tobias.faust »

das JSON das ich oben gepostet hatte kannst du so übernehmen wie es ist und das originale JSON ersetzen.

Du kannst alles im gitpod neu kompilieren. Im Gitpod das json ersetzen und dann neu kompilieren mit

Code: Alles auswählen

platformio run
Firmware neu flashen und in der "Modbus Config" den "neuen" Growatt auswählen.

Immer wenn du neue Werte hast alles wieder von vorne.
Schlussendlich brauche ich deine register.h damit ich die Werte in mein Repo übernehmen kann.

Bzgl der erwarteten openwb mqtt topics muss ich noch einen fix erstellen. Ist aber kein Problem
Edit: Fix ist drin. Die passenden (optionalen) (openWB) Topics können nun selbständig in der register.h eingestellt werden

Code: Alles auswählen

{
					"position": [3, 4],
					"name": "GridVoltage",
					"realname": "Grid Voltage",
					"mqtttopic": "openWB/set/grid/W",
					"datatype": "float",
					"factor": 0.1,
					"unit": "V"
				},
Sascho
Beiträge: 61
Registriert: Mo Aug 24, 2020 1:21 pm

Re: Einbindung Solax- WR Gen4

Beitrag von Sascho »

So ich habe soweit alles gecheckt bezüglich der Register Bytes etc.
Meine Excel Tabelle hatte in der Formel zum zusammenketten der bytes nen copy paste Fehler, das hätte was gedauert wenn du mich nicht drauf gebracht hättest.
Ich habe jetzt alles soweit sortiert und über die Excel Tabelle kann ich schnell mal nen String reinkopieren und die Werte gegenprüfen mit den WR Daten am Display oder wo auch immer.

Ich konnte auch noch ein paar andere Werte wie Temp und Work Mode identifizieren.
Es ist tatsächlich so das wenn man von den bekannten Werten zurück rechnet, dass die RAW Live Werte direkt bei dem Input Register 0 anfängt, plus der ersten 3 Byte Header.

Bedeutet aber auch das noch Register fehlen, ich habs mal versucht nachzurechnen.
Zur Zeit steht das ganze auf Solax X3
Gelesene byte bis Register 0...241 = 483 Bytes ohne header

Input Register 0...249
Speicher Reg 1000….1249
Speicher Reg 2000…2124
Reg für WR Typ TL-X/XH 3000…3249
Summe Register insgesamt 875
Summe Byte insgesamt 1750

Kannst Du das erweitern, dass das komplett eingelesen wird?
Laut doku die von 2020 ist laufen damit dann 32 WR Modelle von Growatt.

Wenn die Register alle rein kommen prüfe ich dann die Werte und bearbeite die register.h
Für die PV Werte muss ich allerdings zu meinem Bruder fahren wo das ganze komplett läuft.

Was mir noch aufgefallen ist, die OpenWB erwartet für das Speicher Modul bei der Speicher Leistung ein Vorzeichen, + Ladung - Entladung
Der Growatt gibt das in 4 Reg so aus:
1009. Pdischarge1 H Discharge power(high) 0.1W
1010. Pdischarge1 L Discharge power (low) 0.1W
1011. Pcharge1 H Charge power(high) 0.1W
1012. Pcharge1 L Charge power (low) 0.1W
tobias.faust
Beiträge: 55
Registriert: Fr Okt 21, 2022 8:49 am

Re: Einbindung Solax- WR Gen4

Beitrag von tobias.faust »

Das kannst du sogar selbst machen, im JSON unter RequestLiveData.
Bedenke aber das du für jeden einzelnen Request 1sek einplanen musst.
D.h. Bei 2 requests ist das Minimum interval der Abfragen dann 2sek.
Besser ist es dann Growatt Hauptgruppen im JSON zu bilden um die Anzahl der Requests niedrig zu halten.
Antworten