NEWS
[Adapter] cloudfreie Auslesung von Deye-Invertern
-
Hast Du schon mal bei denen reingeschaut:
https://forum.iobroker.net/topic/65198/deye-wechselrichter-modbus-register-beschreiben
Die gehen direkt über den MODBUS -
@henry-3 Ich habs jetzt nicht komplett gelesen. Kannst ja mal einen Versuch machen, eines der gewünschten Register mit dem Modbus-Adapter zu beschreiben.
Für den Adapter sehe ich die Schwierigkeit, dass ich ja zum einen die verschiedenen Register irgendwie erhalten/eingebbar machen muss, dann sollen die Register ja bestimmt auch von irgendjemandem beschrieben werden und ich muss dann noch eine Prüfung auf gültige Werte machen. Das scheint mir etwas viel zu werden. -
Hallo, ich habe den Deye Wechselrichter 2000W SUN-M200G4-EU-Q0. Mit dem Adapter 0.1.0 habe ich folgende Einträge im Log :
Response: (checkOnlineDate) {"register":0,"modbus":{"type":"Buffer","data":[1,3,2,5,10,59]}} deyeidc.0 2024-09-05 10:45:07.516 debug [computeData] ResultJson: [{"key":"DP1","value":"0.00","unit":"W","name":"DC Power PV1"},{"key":"DP2","value":"0.00","unit":"W","name":"DC Power PV2"},{"key":"DP3","value":"187.62","unit":"W","name":"DC Power PV3"},{"key":"DP4","value":"263.50","unit":"W","name":"DC Power PV4"}] deyeidc.0 2024-09-05 10:45:07.516 debug [computeData] {"values":"DV4*DC4","key":"DP4","name":"DC Power PV4","unit":"W","factor":0} deyeidc.0 2024-09-05 10:45:07.516 debug [computeData] {"values":"DV3*DC3","key":"DP3","name":"DC Power PV3","unit":"W","factor":0} deyeidc.0 2024-09-05 10:45:07.515 debug [computeData] {"values":"DV2*DC2","key":"DP2","name":"DC Power PV2","unit":"W","factor":0} deyeidc.0 2024-09-05 10:45:07.515 debug [computeData] {"values":"DV1*DC1","key":"DP1","name":"DC Power PV1","unit":"W","factor":0} deyeidc.0 2024-09-05 10:45:07.515 debug Data reception for 4 registersets completed deyeidc.0 2024-09-05 10:45:07.509 debug Response: (payload) {"register":4,"modbus":{"type":"Buffer","data":[1,3,8,0,0,7,208,3,232,19,136,216]}} deyeidc.0 2024-09-05 10:45:07.339 debug Response: (payload) {"register":3,"modbus":{"type":"Buffer","data":[1,3,16,0,0,0,0,0,0,0,0,1,62,0,59,1,54,0,85,62]}} deyeidc.0 2024-09-05 10:45:07.137 debug Response: (payload) {"register":2,"modbus":{"type":"Buffer","data":[1,3,64,0,4,0,3,0,0,0,0,3,90,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,9,36,1,154,0,0,0,18,1,173,0,0,19,136,0,0,0,0,0,0,0,0,0,0,0,0,16,236,0,0,0,0,0,0,15,140,228]}} deyeidc.0 2024-09-05 10:45:06.886 debug Response: (payload) {"register":1,"modbus":{"type":"Buffer","data":[1,3,82,0,4,1,0,3,2,50,52,48,53,49,48,48,52,66,50,0,1,0,0,18,12,7,0,1,3,3,32,19,35,3,32,78,32,0,0,4,1,0,80,0,0,0,65,24,9,5,10,43,44,1,176,0,12,11,59,7,48,20,30,18,142,9,226,4,11,0,1,19,156,0,40,19,116,19,156,0,100,7,208,0,100,189]}} deyeidc.0 2024-09-05 10:45:00.289 error TypeError: Cannot read properties of undefined (reading 'registerStart') | TypeError: Cannot read properties of undefined (reading 'registerStart') at idcCore.readCoils (/opt/iobroker/node_modules/iobroker.deyeidc/lib/idc-core.js:149:56) at Deyeidc.onData (/opt/iobroker/node_modules/iobroker.deyeidc/main.js:176:37) at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.deyeidc/main.js:154:10) at Socket.emit (node:events:519:28) at addChunk (node:internal/streams/readable:559:12) at readableAddChunkPushByteMode (node:internal/streams/readable:510:3) at Readable.push (node:internal/streams/readable:390:5) at TCP.onStreamRead (node:internal/stream_base_commons:191:23) deyeidc.0 2024-09-05 10:45:00.289 warn {"register":8,"modbus":{"type":"Buffer","data":[1,3,250,1,0,3,2,50,52,48,53,49,48,48,52,66,50,0,1,0,0,18,12,7,0,1,3,3,32,19,35,3,32,78,32,0,0,4,1,0,80,0,0,0,65,24,9,5,10,43,44,1,176,0,12,11,59,7,48,20,30,18,142,9,226,4,11,0,1,19,156,0,40,19,116,19,156,0,100,7,208,0,100,0,0,0,0,0,1,0,1,0,8,0,1,0,1,0,0,0,1,255,84,0,2,0,12,39,16,0,0,39,16,0,0,0,0,0,0,0,4,0,3,0,0,0,0,3,90,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,9,26,1,154,0,0,0,18,1,173,0,0,19,136,0,0,0,0,0,0,0,0,0,0,0,0,16,236,0,0,0,0,0,0,15,140,9,71,9,71,19,136,0,0,0,0,0,0,0,0,0,0,0,0,2,167,0,2,0,29,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,62,0,59,1,54,0,85,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,255]}} deyeidc.0 2024-09-05 10:45:00.288 debug Response: (payload) {"register":8,"modbus":{"type":"Buffer","data":[1,3,250,1,0,3,2,50,52,48,53,49,48,48,52,66,50,0,1,0,0,18,12,7,0,1,3,3,32,19,35,3,32,78,32,0,0,4,1,0,80,0,0,0,65,24,9,5,10,43,44,1,176,0,12,11,59,7,48,20,30,18,142,9,226,4,11,0,1,19,156,0,40,19,116,19,156,0,100,7,208,0,100,0,0,0,0,0,1,0,1,0,8,0,1,0,1,0,0,0,1,255,84,0,2,0,12,39,16,0,0,39,16,0,0,0,0,0,0,0,4,0,3,0,0,0,0,3,90,0,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,9,26,1,154,0,0,0,18,1,173,0,0,19,136,0,0,0,0,0,0,0,0,0,0,0,0,16,236,0,0,0,0,0,0,15,140,9,71,9,71,19,136,0,0,0,0,0,0,0,0,0,0,0,0,2,167,0,2,0,29,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,62,0,59,1,54,0,85,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,255]}}
MOD-EDIT: Code in code-tags gesetzt!
Wie werde ich die Errors los? Ich habe das YAML vom SUN2000 genommen.`
-
@romeleitis Das sind keine errors! Schalte den Adapter auf 'Info' und schon hast du Ruhe. Im Fehlerfall könnte ich anhand der 'Debug'-Ausgaben sehen, was im einzelnen passiert.
BTW. Das sieht ganz gut aus. -
@rene55
Das sind schon Fehler :deyeidc.0 2024-09-05 10:45:00.289 error TypeError: Cannot read properties of undefined (reading 'registerStart') | TypeError: Cannot read properties of undefined (reading 'registerStart') at idcCore.readCoils (/opt/iobroker/node_modules/iobroker.deyeidc/lib/idc-core.js:149:56) at Deyeidc.onData (/opt/iobroker/node_modules/iobroker.deyeidc/main.js:176:37) at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.deyeidc/main.js:154:10) at Socket.emit (node:events:519:28) at addChunk (node:internal/streams/readable:559:12) at readableAddChunkPushByteMode (node:internal/streams/readable:510:3) at Readable.push (node:internal/streams/readable:390:5) at TCP.onStreamRead (node:internal/stream_base_commons:191:23)
Steht auch als ERROR im Log :
-
@romeleitis Da muss ich dir recht geben. Die waren aber oben nicht zu sehen! Seit wann kommen die Fehler? Denn oben sah alles ganz hervorragend aus.
-
@rene55
Moin Rene!
Ich bräuchte noch ein wenig Nachhilfe bei IoBroker.
Wo finde ich das Log, welches Ihr immer im Code Fenster vorstellt?
Nichts für ungut, danke. -
@henry-3 Meinst du das von z.B. romeleitis? Dann kannst du im Expertenmodus in den Instanzen den Loglevel vom deyeidc auf 'debug' stellen. Dann spuckt der Adapter viele hilfreiche Dinge aus.
-
Ah ha
-
Die Fehler habe ich jetzt schon eine ganze Weile.
Ursprünglich hatte ich einen Deye Sun 800 und bin nun auf einen Deye Sun 2000 gewechselt.
Irgend eine Idee, was das sein könnte? -
@romeleitis Bei den spärlichen Angaben etwas schwierig. Keine Ahnung welche Register abgefragt werden und wie hoch das Intervall ist. Eventuell fragst du den Inverter zu oft ab und der verschluckt sich.
-
Hallo @Rene55
Hab seid längerem diesen Fehler:
Der WR ist Online, erreichbar und liefert alle Daten, wie es sein soll.
Hab noch zwei weitere Instancen von dem Adapter am laufen, kommt da auch hin und wieder so vor.
Hast du eine Idee wo das her kommt ?
Gruß Stephan
-
@stephanh Um die Uhrzeit sollte ja genug produziert werden damit der WR aktiv ist. Der Meldung nach kann der WR nicht erreicht werden. Daher würde ich tippen, dass das Netzwerk ein wenig spinnt. Natürlich ist die Verbindung zum Adapter empfindlicher als die Verbindung zur Cloud. Daher ist da scheinbar alles ok und hier gibt es den Fehler. Kannst du bitte mal prüfen, ob der WR wirklich dauerhaft erreichbar ist (ping 192.168.178.233 -t).
-
@rene55 Ja es ist der WR, schein wohl nee Macke zu haben. Hab nee 70Mbit verbindung über WLAN. Der Shelly, der den WR ebenfalls mist. Zeigt Produktion an.
Danke für deinen Hinweis.
-
@rene55 Ich frage alle 60 Sekunden ab. Als Register habe ich die im deyeidc.Sun2000.json vorgegebenen verwendet. Passt da ggf. etwas mit dem Sun2000 G4 nicht?
-
@romeleitis 60 Sekunden sollten für den Sun2000 kein Problem sein. Wo stehen wir derzeit? Ich hab da gerade die Übersicht bei dir verloren.
-
@Rene55 Ich hatte ursprünglich einen Deye Sun 600. Dann bin ich auf einen Deye Sun 2000 G4 gewechselt. Die installierte Instanz hatte ich so in IOBroker belassen und habe nur die Register und Spulen so angepasst, wie es das deyeidc.Sun2000.json vorgibt.
Ich habe seitdem permanent die Meldungen im Log :deyeidc.0 2024-09-05 10:45:00.289 error TypeError: Cannot read properties of undefined (reading 'registerStart') | TypeError: Cannot read properties of undefined (reading 'registerStart') at idcCore.readCoils (/opt/iobroker/node_modules/iobroker.deyeidc/lib/idc-core.js:149:56) at Deyeidc.onData (/opt/iobroker/node_modules/iobroker.deyeidc/main.js:176:37) at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.deyeidc/main.js:154:10) at Socket.emit (node:events:519:28) at addChunk (node:internal/streams/readable:559:12) at readableAddChunkPushByteMode (node:internal/streams/readable:510:3) at Readable.push (node:internal/streams/readable:390:5) at TCP.onStreamRead (node:internal/stream_base_commons:191:23)
Stimmt da ggf. etwas nicht mit den Register und Spuleneinstellungen? Sind die beim G4 ggf. anders als im Vorgänger?
-
@romeleitis Ich bin nicht sicher, ob es einen grundsätzlichen Unterschied zwischen G3 und G4 gibt. Hardwaremäßig bestimmt, aber Firmwareseitig? Wir können ja mal die spasseshalber Versionsstände vom WR vergleichen.
Ich kann diesen Fehler tatsächlich produzieren, wenn zwei Instanzen auf den WR einwirken. Kann das bei dir auch sein? Muss ja nicht der Adapter sein, kann auch ein anderes Gerät sein, was darein 'fuscht'. -
Nach ca. 5 Monaten Betrieb der zwei Deye Sun-12K-SG04LP3-EU habe ich jetzt einige Daten sammeln können. Meine aktuellen Register sehen so aus:
{ "ipaddress": "192.168.100.4", "port": 8899, "logger": 2791138173, "pollInterval": 60, "registers": [ { "registerStart": 99, "registerEnd": 130 }, { "registerStart": 500, "registerEnd": 541 }, { "registerStart": 586, "registerEnd": 680 } ], "coils": [ { "register": 99, "rules": 1, "key": "Battery Equalization V", "name": "Equalization V", "unit": "V", "factor": 2, "nullable": false }, { "register": 100, "rules": 1, "key": "Battery Absorption V", "name": "Absorption V", "unit": "V", "factor": 2, "nullable": false }, { "register": 101, "rules": 1, "key": "Battery Float V", "name": "Float V", "unit": "V", "factor": 2, "nullable": false }, { "register": 104, "rules": 1, "key": "Zero Export power", "name": "Zero Export power", "unit": "", "factor": 0, "nullable": false }, { "register": 108, "rules": 1, "key": "Max A Charge", "name": "Max A Charge", "unit": "A", "factor": 0, "nullable": false }, { "register": 109, "rules": 1, "key": "Max A discharge", "name": "Max A discharge", "unit": "A", "factor": 0, "nullable": false }, { "register": 114, "rules": 1, "key": "Battery charging efficiency", "name": "Battery charging efficiency", "unit": "%", "factor": 1, "nullable": false }, { "register": 115, "rules": 1, "key": "Battery capacity ShutDown", "name": "battery capacity ShutDown", "unit": "%", "factor": 0, "nullable": false }, { "register": 116, "rules": 1, "key": "Battery capacity Restart", "name": "battery capacity Restart", "unit": "%", "factor": 0, "nullable": false }, { "register": 117, "rules": 1, "key": "Battery capacityLowBatt", "name": "battery capacityLowBatt", "unit": "%", "factor": 0, "nullable": false }, { "register": 127, "rules": 1, "key": "grid charging capacity point", "name": "grid charging capacity point", "unit": "%", "factor": 0, "nullable": false }, { "register": 128, "rules": 1, "key": "Grid charge the battery current", "name": "Grid charge the battery current", "unit": "A", "factor": 0, "nullable": false }, { "register": 130, "rules": 1, "key": "Grid is charged to enable", "name": "Grid is charged to enable", "unit": "", "factor": 0, "nullable": false }, { "register": 500, "rules": 1, "key": "health_state", "name": "run state", "unit": "", "factor": 0, "nullable": false }, { "register": 516, "rules": 1, "key": "Total charge of the battery", "name": "Gesamtladung der Batterie", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 518, "rules": 1, "key": "Total discharge of the battery", "name": "Gesamtentladung der Batterie", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 520, "rules": 1, "key": "Day_GridBuy_Power_Wh", "name": "gekaufte Leistung", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 521, "rules": 1, "key": "Day_GridSell_Power_Wh", "name": "Einspeisung", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 522, "rules": 1, "key": "Total_GridBuy_Power", "name": "Total_GridBuy_Power", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 524, "rules": 1, "key": "Total_GridSell_Power", "name": "Total_GridSell_Power", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 526, "rules": 1, "key": "Day_Load_Power_Wh", "name": "Electricity consumption for the day", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 527, "rules": 1, "key": "Total_Load_Power", "name": "Total_Load_Power", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 529, "rules": 2, "key": "Day_PV_Power_Wh", "name": "Total PV generation on the day", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 534, "rules": 1, "key": "Total_PV_power_low", "name": "Erzeugte PV-Leistung", "unit": "kWh", "factor": 1, "nullable": false }, { "register": 540, "rules": 6, "key": "Temperature_DC_Transformer", "name": "Temperature DC Transformer", "unit": "°C", "factor": 1, "nullable": false }, { "register": 541, "rules": 6, "key": "Temperature_Heat_Sink", "name": "Temperature Heat Sink", "unit": "°C", "factor": 1, "nullable": false }, { "register": 586, "rules": 6, "key": "Temperature_Battery", "name": "Temperatur Battery", "unit": "°C", "factor": 1, "nullable": false }, { "register": 587, "rules": 1, "key": "Battery_Voltage", "name": "Battery Voltage", "unit": "V", "factor": 2, "nullable": false }, { "register": 588, "rules": 1, "key": "Battery_Level", "name": "Battery SOC", "unit": "%", "factor": 0, "nullable": false }, { "register": 590, "rules": 2, "key": "Battery_Output_Power", "name": "Battery Power", "unit": "W", "factor": 0, "nullable": false }, { "register": 591, "rules": 2, "key": "Battery_output_current", "name": "Battery Current", "unit": "A", "factor": 2, "nullable": false }, { "register": 598, "rules": 1, "key": "Grid phase voltage1", "name": "L1 Spannung", "unit": "U", "factor": 1, "nullable": false }, { "register": 599, "rules": 1, "key": "Grid phase voltage2", "name": "L2 Spannung", "unit": "U", "factor": 1, "nullable": false }, { "register": 600, "rules": 1, "key": "Grid phase voltage3", "name": "L3 Spannung", "unit": "U", "factor": 1, "nullable": false }, { "register": 607, "rules": 2, "key": "P_GRID_LD_TOTAL", "name": "Total active power from side to side of the grid", "unit": "W", "factor": 0, "nullable": false }, { "register": 610, "rules": 1, "key": "grid side inner current A", "name": "Strom L1", "unit": "A", "factor": 2, "nullable": false }, { "register": 611, "rules": 1, "key": "grid side inner current B", "name": "Strom L2", "unit": "A", "factor": 2, "nullable": false }, { "register": 612, "rules": 1, "key": "grid side inner current C", "name": "Strom L3", "unit": "A", "factor": 2, "nullable": false }, { "register": 613, "rules": 1, "key": "grid Out-of current A", "name": "Out-of-grid - current A", "unit": "A", "factor": 2, "nullable": false }, { "register": 619, "rules": 2, "key": "P_GRID_CT_TOTAL", "name": "Out-of-grid – total power", "unit": "W", "factor": 0, "nullable": false }, { "register": 630, "rules": 1, "key": "grid Inverter output phase", "name": "Inverter output phase", "unit": "A", "factor": 2, "nullable": false }, { "register": 643, "rules": 1, "key": "P_UPS_LOAD_TOTAL", "name": "UPS load-side total power", "unit": "W", "factor": 0, "nullable": false }, { "register": 653, "rules": 1, "key": "P_BACKUP_LOAD_TOTAL", "name": "Load total power", "unit": "W", "factor": 0, "nullable": false }, { "register": 672, "rules": 1, "key": "PV1_Leistung", "name": "PV1 - Leistung", "unit": "W", "factor": 0, "nullable": false }, { "register": 673, "rules": 1, "key": "PV2_Leistung", "name": "PV2 - Leistung", "unit": "W", "factor": 0, "nullable": false }, { "register": 676, "rules": 1, "key": "PV1_Spannung", "name": "PV1 - Spannung", "unit": "V", "factor": 1, "nullable": false }, { "register": 677, "rules": 1, "key": "PV1_Strom", "name": "PV1 - Strom", "unit": "A", "factor": 1, "nullable": false }, { "register": 678, "rules": 1, "key": "PV2_Spannung", "name": "PV2 - Spannung", "unit": "V", "factor": 1, "nullable": false }, { "register": 679, "rules": 1, "key": "PV2_Strom", "name": "PV2 - Strom", "unit": "A", "factor": 1, "nullable": false }, { "register": 535, "rules": 1, "key": "Total_PV_power_high", "name": "Erzeugte PV-Leistung", "unit": "kWh", "factor": 0, "nullable": false } ], "computes": [ { "values": "PV1_Leistung+PV2_Leistung", "key": "PV1_PV2_Leistung", "name": "PV1+PV2 - Leistung", "unit": "W", "factor": 0 }, { "values": "Day_PV_Power_Wh-Day_GridSell_Power_Wh", "key": "Day_Eigenverbrauch", "name": "Day Eigenverbrauch", "unit": "kWh", "factor": 0 } ] }
Grundsätzliche stellt der Master keine Summen zur Verfügung, d.h. jeder WR zeigt nur an, was er alleine ausgegeben hat.
Nicht alle Register machen sin, so geben die Register P_GRID_CT_TOTAL und P_GRID_LD_TOTAL sowie P_UPS_LOAD_TOTAL und P_BACKUP_LOAD_TOTAL die gleichen Werte aus.
Interessant schaut es bei den Total_xy_high und Total_xy_low aus. Diese zwei 16bit-Register sind eigentlich ein 32bit-Register nur das die Hälfte vertauscht ist, d.h. das low-Bit kommt vor dem high-Bit. -
@elektrofix-ol Das ist ja schön, dass mal Rückmeldungen kommen, die mir einfach nicht auffallen.
@elektrofix-ol sagte in [Adapter] cloudfreie Auslesung von Deye-Invertern:
Grundsätzliche stellt der Master keine Summen zur Verfügung
Ist das ist WR-spezifisch oder gibt es dafür keine Register?
@elektrofix-ol sagte in [Adapter] cloudfreie Auslesung von Deye-Invertern:
Diese zwei 16bit-Register sind eigentlich ein 32bit-Register
Welche Regel wendest du dafür an? Evtl muss ich Regeln anpassen oder hinzufügen.
Versuche hier mal auf Register 534 die Regel 3 oder 4 anzuwenden.