Comments (21)
Hi Wilfried,
erstmal die gute Nachricht: Die Verkabelung stimmt, die Anfrage kommt beim Inverter an und der Inverter antwortet korrekt :)
Jetzt die schlechte Nachricht: Der Inverter versteht die Anfrage nicht und liefert einen korrekten Fehlercode mit (0x84). Soll heißen, das ModbusProtokoll ist abweichend.
Bitte versuche mal als erstes auf "Solax X3" umzustellen da "Solax MIC" offensichtlich nicht zu deinem Solax X3-Pro-G2 passt. Der Invertertyp muss am Anfang immer korrekt eingestellt sein ;)
from solaxmodbusgateway.
Hi Tobias,
sorry, ich habe mich da verschrieben, ich hatte bereits "Solax X3" eingestellt.
from solaxmodbusgateway.
Ok, die Antwort bleibt leider dieselbe. Dein Request aus dem ersten Post ist aber von MIC.
Poste mal einen aktuellen Request.
Du kannst versuchen die Invertertypen nacheinander durchzuprobieren ob irgendeiner annähernd passt. Besser wäre es die ModbusProtokoll Doku vom SolaxSupport sich schicken zu lassen. Die antworten auch relativ schnell. Dann kann man eine eigene Sektion für den PRO anlegen wenn diese total abweichend von einer der anderen ist.
from solaxmodbusgateway.
ok, den Support habe ich soeben angeschrieben.
Den aktuellem Request poste ich heute abend, da die Anlage nicht vor Ort ist.
Kann ich eigentlich im Reiter "Raw Data" vorab etwas testen?
Kannst du die Möglichkeiten dort noch etwas erklären?
from solaxmodbusgateway.
erst wenn korrekte Antworten kommen kann man auf der RAW Seite weiter arbeiten.
Wie? Ist im Wiki unter Punkt "6. Advanced stuff" erklärt ;) Hoffentlich verständlich
from solaxmodbusgateway.
Hi Tobias,
nun habe ich über meinen Händler die Doku von Solax bekommen.
Kannst du mir mir eine pn schreiben, dann kann ich die dir zukommen lassen.
from solaxmodbusgateway.
You can add the PDF to a post by dragging it until its under the dotted line. Like so.
Solax Power X1-BOOST Single phase inverter Modbus-RTU comms protocolV1.0 - Public version.pdf
from solaxmodbusgateway.
sorry, at the moment I'm not allowed to publish the document
from solaxmodbusgateway.
So instead compare the file you have with the Tobias posted pdf's and see which has the closest match.
https://github.com/tobiasfaust/SolaxModbusGateway/tree/development/docs
Then select that inverter and try a test.
from solaxmodbusgateway.
Hi Tobias,
ich habe bei dem Dokument nun den Schutz entfernen können.
Es sieht analog zur V1.9 aus, ich komme damit leider nicht klar.
Kannst Du helfen?
Solax X3-PRO Modbus-Protokoll V2.7.pdf
from solaxmodbusgateway.
Hi,
wenn es wirklich dieses Dokument ist, stell mal den SOLAX MIC ein. Die Live-Register starten ab 0x400
Wenn es nichts hilft, dann bitte folgende Schritte nacheinander. Nach jedem Schritt bitte prüfen ob es schon funktioniert.
- 9600 Baud einstellen
- Firmwareupdate Wechselrichter, du brauchst bestenfalls die ARM Version 1.22 mit ProtokollVersion V2.7
- in der register.h, section "Solax MIC" den RequestLiveData anpassen auf:
"RequestLiveData": [
["#ClientID", "0x04", "0x04", "0x00", "0x00", "0x16"]
],
3. wenn 2 hilft, dann schrittweise die 0x16 (in Hex!) erhöhen bis der Fehler wieder kommt.
from solaxmodbusgateway.
Hi Tobias,
ich habs heute nachmittag hinbekommen mit den Live-Registern ab 0x400 und ID-Registern ab 0x300 und es kommen tatsächlich Daten. Zumindest mal die Seriennummer, die anderen Werte kommen auch, passen mit der Doku von Solax jedoch nicht überein. Da muß ich morgen nochmals testen. Aktuell hat sich der WR abgeschaltet.
Ich melde mich wieder.
Vielen Dank soweit 👍
from solaxmodbusgateway.
Super, mach mal ein Firmwareupdate. Die Doku muss ja mit dem Stand der Firmware des WR zusammenpassen ;)
from solaxmodbusgateway.
gibt es etwas Neues?
from solaxmodbusgateway.
Ich habe die Daten soweit eingepflegt. Beim Tages- und Gesamtertrag habe ich jedoch noch Probleme die Werte richtig zu interpretieren/darzustellen. Da muß ich noch etwas testen.
Noch eine Frage: wie funktioniert das mit dem "set-Befehl" und kann man neben der "InverterSN" weitere ID-Datas auf der webgui page darstellen?
from solaxmodbusgateway.
Welche WR-Settings hatten denn am besten gepasst? Oder musstest du eine neue Sektion bauen? Wenn du fertig bist nehme ich die JSON Änderung gerne an um sie ins Repo einchecken zu können
Zur Frage mit dem set Befehl:
Ich habe hier die Vorbereitungen im Code eingebaut, aber ohne Tests da ich selbst keine set´s absetze.
Zu den ID-Data: Aktuell können ohne Codeänderung keine weiteren ID-Daten angezeigt werden. Da müsste ich erst noch ran.
from solaxmodbusgateway.
Hallo Tobias,
ich habe nun die richtige Darstellung für die noch offenen Werte gefunden. Anbei die Datei mit dem Teil der Register-Daten für den Solax-X3-PRO.
Solax-X3-PRO.txt
Grüße Wilfried
from solaxmodbusgateway.
Zur Frage mit dem set Befehl:
Ich habe hier die Vorbereitungen im Code eingebaut, aber ohne Tests da ich selbst keine set´s absetze.
Ich sollte beim meinem Solax die Ausgangsleistung setzen können, kannst Du mir das mit dem set Befehl etwas näher erläutern?
from solaxmodbusgateway.
Hi,
Als erstes musst du das korrekte Register kennen was du setzen willst.
Als absoluter erster Versuch ist auch hier das Example ein guter Start. Einfach die zu setzende registergruppe an einen schreibbefehl anpassen, genaueres findest du nur in deiner Modbus Doku.
Problem ist, das Solax nur ungern die Dokumente mit der Auflistung der schreibregister rausrückt.
from solaxmodbusgateway.
Hier der Code für den X3 Pro G2:
"Solax-X3-PRO": {
"config": {
"RequestLiveData": [
["#ClientID", "0x04", "0x04", "0x00", "0x00", "0x40"],
["#ClientID", "0x04", "0x07", "0x00", "0x00", "0x0A"]
],
"RequestIdData": ["#ClientID", "0x03", "0x03", "0x00", "0x00", "0x54"],
"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": "PvVoltage1",
"realname": "Pv Voltage 1",
"datatype": "float",
"factor": 0.1,
"unit": "V"
},
{
"position": [5, 6],
"name": "PvVoltage2",
"realname": "PV Voltage 2",
"datatype": "float",
"factor": 0.1,
"unit": "V"
},
{
"position": [85, 86],
"name": "PvVoltage3",
"realname": "PV Voltage 3",
"datatype": "float",
"factor": 0.1,
"unit": "V"
},
{
"position": [7, 8],
"name": "PvCurrent1",
"realname": "PV Current 1",
"datatype": "float",
"factor": 0.1,
"unit": "A"
},
{
"position": [9, 10],
"name": "PvCurrent2",
"realname": "PV Current 2",
"datatype": "float",
"factor": 0.1,
"unit": "A"
},
{
"position": [87, 88],
"name": "PvCurrent3",
"realname": "PV Current 3",
"datatype": "float",
"factor": 0.1,
"unit": "A"
},
{
"position": [31, 32],
"name": "PAC",
"realname": "P-AC",
"datatype": "integer",
"unit": "W"
},
{
"position": [33, 34],
"name": "RunMode",
"realname": "Inverter Status",
"datatype": "integer",
"mapping": [[0,"WaitMode"],[1,"CheckMode"],[2,"NormalMode"],[3,"FaultMode"],[4,"PermanentFaultMode"]]
},
{
"position": [41, 42],
"name": "Total Power DC",
"realname": "P-DC",
"datatype": "integer",
"unit": "W"
},
{
"position": [43, 44],
"name": "PDC1",
"realname": "P-DC1",
"datatype": "integer",
"unit": "W"
},
{
"position": [45, 46],
"name": "PDC2",
"realname": "P-DC2",
"datatype": "integer",
"unit": "W"
},
{
"position": [89, 90],
"name": "PDC3",
"realname": "P-DC3",
"datatype": "integer",
"unit": "W"
},
{
"position": [11, 12],
"name": "GridVoltage_R",
"realname": "Grid Voltage L1",
"datatype": "float",
"factor": 0.1,
"unit": "V"
},
{
"position": [13, 14],
"name": "GridVoltage_S",
"realname": "Grid Voltage L2",
"datatype": "float",
"factor": 0.1,
"unit": "V"
},
{
"position": [15, 16],
"name": "GridVoltage_T",
"realname": "Grid Voltage L3",
"datatype": "float",
"factor": 0.1,
"unit": "V"
},
{
"position": [17, 18],
"name": "GridFrequency_R",
"realname": "Grid Frequency L1",
"datatype": "float",
"factor": 0.01,
"unit": "Hz"
},
{
"position": [19, 20],
"name": "GridFrequency_S",
"realname": "Grid Frequency L2",
"datatype": "float",
"factor": 0.01,
"unit": "Hz"
},
{
"position": [21, 22],
"name": "GridFrequency_T",
"realname": "Grid Frequency L3",
"datatype": "float",
"factor": 0.01,
"unit": "Hz"
},
{
"position": [23, 24],
"name": "GridOutputCurrent_R",
"realname": "Grid Current L1",
"datatype": "float",
"factor": 0.1,
"unit": "A"
},
{
"position": [25, 26],
"name": "GridOutputCurrent_S",
"realname": "Grid Current L2",
"datatype": "float",
"factor": 0.1,
"unit": "A"
},
{
"position": [27, 28],
"name": "GridOutputCurrent_T",
"realname": "Grid Current L3",
"datatype": "float",
"factor": 0.1,
"unit": "A"
},
{
"position": [29, 30],
"name": "InverterTemperature",
"realname": "Inverter Temperature",
"datatype": "integer",
"unit": "°C"
},
{
"position": [91, 92],
"name": "MainboardTemperature",
"realname": "Mainboard Temperature",
"datatype": "integer",
"unit": "°C"
},
{
"position": [75,76,73,74],
"name": "YieldTotal",
"realname": "Gesamtertrag",
"datatype": "integer",
"factor": 0.1,
"unit": "kWh"
},
{
"position": [79,80,77,78],
"name": "YieldToday",
"realname": "Tagesertrag",
"datatype": "integer",
"factor": 0.1,
"unit": "kWh"
},
{
"position": [123,124,121,122],
"name": "GridPower",
"realname": "GridPower",
"datatype": "integer",
"unit": "W"
},
{
"position": [127,128,125,126],
"name": "FeedInEnergy",
"realname": "Feed In Energy",
"datatype": "integer",
"factor": 0.01,
"unit": "kWh"
},
{
"position": [131,132,129,130],
"name": "ConsumeEnergy",
"realname": "Consume Energy",
"datatype": "integer",
"factor": 0.01,
"unit": "kWh"
},
{
"position": [129,130,131,132],
"name": "ConsumeEnergy2",
"realname": "Consume Energy2",
"datatype": "integer",
"factor": 0.01,
"unit": "kWh"
},
{
"position": [133,134],
"name": "PowerRef",
"realname": "PowerRef",
"datatype": "integer",
"unit": "W"
},
{
"position": [137,138,135,136],
"name": "PowerToEV",
"realname": "PowerToEV",
"datatype": "integer",
"unit": "W"
},
{
"position": [139,140],
"name": "PVRef",
"realname": "PV Ref",
"datatype": "integer",
"unit": " "
},
{
"position": [143,144,141,142],
"name": "FeedInPowerR",
"realname": "FeedInPowerL1",
"datatype": "integer",
"unit": "W"
},
{
"position": [147,148,145,146],
"name": "FeedInPowerS",
"realname": "FeedInPowerL2",
"datatype": "integer",
"unit": "W"
},
{
"position": [151,152,149,150],
"name": "FeedInPowerT",
"realname": "FeedInPowerL3",
"datatype": "integer",
"unit": "W"
}
],
"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],
"name": "ModuleName",
"realname": "Module Name",
"datatype": "string"
},
{
"position": [43, 44, 45, 46, 47, 48],
"name": "FirmwareVersion",
"realname": "Firmware Version",
"datatype": "string"
},
{
"position": [159],
"name": "Safty",
"realname": "Safty",
"datatype": "integer"
},
{
"position": [160],
"name": "MachineType",
"realname": "Machine Type",
"datatype": "integer"
},
{
"position": [161],
"name": "Power Ratio",
"realname": "Percent of Powerlimits",
"datatype": "integer",
"factor": 0.01,
"unit": "%"
},
{
"position": [162],
"name": "MpptScanMode",
"realname": "MpptScanMode",
"datatype": "integer"
}
]
}
},
from solaxmodbusgateway.
@MagicSven81
Hast du zufällig schon mal probiert in die Single-Write-Register ab 0x600 etwas zuschreiben?
Ich versuche in das Register 0x60F (PowerLimitsPercent) zu schreiben, schreibe daher zuerst in 0x600 das Unlock-Passwort (2014 - dezimal), was positiv quittiert wird
0x02 0x06 0x06 0x00 0x00 0x00 0x89 0x71 - antwort: 0x02 0x06 0x06 0x00 0x00 0x00 0x89 0x71
Danach schreibe ich in den Wert 0x64 (100 - dezimal) ins Register 0x60F und bekomme jedoch eine negative Quittierung
0x02 0x06 0x06 0x0F 0x00 0x64 0xB8 0x99 - antwort: 0x02 0x86 0x06 0x32 0x62
Gruß Wilfried
from solaxmodbusgateway.
Related Issues (20)
- Version 3.1.1 keine RAW Daten HOT 3
- Übertragene Werte springen immer wieder auf unplausible values HOT 52
- v3.2.0 mit ESP32-S2 nicht verwendbar HOT 15
- Aktuelle v3.1.1 für ESP32-S2 zeigt keine "Item Config" Liste! HOT 1
- No Support vor Deye Inverters in V3.0 HOT 3
- include Pace BMS Modbus Protocoll HOT 7
- Growatt WR SPH auslesen HOT 15
- Serienummer Deye HOT 14
- Add Solax X3 Ultra Inverter to the list HOT 1
- send data to esp and change values on the inverter over mqtt HOT 4
- Wifi AP password not correct HOT 1
- ESP32-S3 littlefs fehlt | Bootloader Register 0x0 HOT 4
- Initiialisierung Laufvariable HOT 1
- Solax X3 Hybrid G4 issies with 3.2.0 HOT 3
- Store Item Config not working, saved file corrupt HOT 1
- Letztes Register (0x77) wird falsch ausgegeben HOT 10
- Anzeige der Raw Data ist kaputt (seit commits am 11.3.24) HOT 7
- 404 not found HOT 2
- Modbus Spec QVolt / Solax-Hybrid G4 v3.29 HOT 1
- Add support for board HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from solaxmodbusgateway.