Einbindung Solax- WR Gen4
Re: Einbindung Solax- WR Gen4
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
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
-
- Beiträge: 55
- Registriert: Fr Okt 21, 2022 8:49 am
Re: Einbindung Solax- WR Gen4
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
Ist alles im JSON einstellbar. Nimm mal den Solax x3, der liest 2x 77 Register
Re: Einbindung Solax- WR Gen4
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
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
Re: Einbindung Solax- WR Gen4
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
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
-
- Beiträge: 55
- Registriert: Fr Okt 21, 2022 8:49 am
Re: Einbindung Solax- WR Gen4
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:
PS: grundsätzlich finde ich die Growatt Doku schwieriger zu verstehen als die Solax Doku. Da gebe ich dir Recht.
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"
},
-
- Beiträge: 55
- Registriert: Fr Okt 21, 2022 8:49 am
Re: Einbindung Solax- WR Gen4
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:
(JSON´s immer mit jsonlint.com überprüfen)
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:
Damit müssten diese Beiden Werte als neuer Inverter im JSON aufgenommen werden.{
"position": [77, 78],
"name": "GridFrequency",
"realname": "Grid Frequency",
"datatype": "float",
"factor": 0.01,
"unit": "Hz"
},
(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"
}
]
}
}
}
Re: Einbindung Solax- WR Gen4
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"
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"
-
- Beiträge: 55
- Registriert: Fr Okt 21, 2022 8:49 am
Re: Einbindung Solax- WR Gen4
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
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
Du kannst alles im gitpod neu kompilieren. Im Gitpod das json ersetzen und dann neu kompilieren mit
Code: Alles auswählen
platformio run
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"
},
Re: Einbindung Solax- WR Gen4
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
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
-
- Beiträge: 55
- Registriert: Fr Okt 21, 2022 8:49 am
Re: Einbindung Solax- WR Gen4
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.
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.