NEWS
[Adapter] cloudfreie Auslesung von Deye-Invertern
-
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. -
@rene55 jeder WR (Master oder Slave) gibt nur die Werte raus, die bei ihm auch gemessen wurden.
Du hast sogar unterschiedliche Werte, so hat der Slave den Akku mehr geladen als der Master also ist die Total_charge_of_the_battery beim Slave höher als bei MasterDie Regel 3 und 4 passen nicht, das hatte ich schon im Mai ausprobiert. Die Regeln nehmen [16-High].[16Low] und der Daye gibt [16Low].[16High] raus. Der Daye müsst die Register 535 und 534 tauschen, dann würde es mit der Regel 3 oder 4 gehen.
Ich habe es jetzt mit einer Berechnung gelöst:
{ "values": "Total_PV_power_high*10000", "key": "Total_PV_power", "name": "PV Gesamtertrag WR", "unit": "kWh", "factor": 0 }, { "values": "Total_PV_power+Total_PV_power_low", "key": "Total_PV280", "name": "PV Gesamtertrag", "unit": "kWh", "factor": 0 }
Das High-Register*10000 ==> ZwischenSpeicher + low-Register ==> Total_PV280
Eleganter wäre, wenn Du das als Regel einbinden könntest, aber so geht's auch.Edit: Noch einmal ausprobiert mit der Regel 3+4: Es wir ein Wert von 7830,1 kWh ausgegeben es hätte aber 11276,5 kWh sein müssen.
-
@elektrofix-ol Bei den 'Summen' hatten wir uns wohl missverstanden. Klar kommt nur das raus, was drin ist. Ich dachte da mehr an die Aufsummierten Leistungen.
Zum Thema 16-bit-low/16-bit-high. Kannst du den Adapter bitte mal direkt von Github runterladen und dann für das Register 534 die Regel 13 versuchen. Vllt. kommt dann was sinnvolles raus.
-
@Rene55 Ich verstehe es nicht mehr. Ich hatte nun den Deye Adapter inkl. Instanzen gelöscht. Dann IOBroker neu gestartet. Adapter wieder installiert und nur IP und Seriennummer eingetragen. Abfrageintervall auf default (330 Sekunden).
Trotzdem tauchen weiterhin alle 30 Sekunden Fehler im Log auf (30 Sekunden hatte ich vor dem Löschen eingestellt) :
-
@romeleitis Dazu brauche ich mehr Infos. Welche Version, woher installiert, welche .json ist importiert?
-
@rene55
Habe es fix mal getestet, auf einer neuen Maschiene, Adapter neu installiert. Die Anzeigen bei Regel 13 wechseln immer zwischen:
Richtig mit Regel 1 bis auf 534 wäre
-
@elektrofix-ol SO ganz komm ich nicht hinterher. Was heißt 'wechselt immer zwischen' ?
Damit ich das nachrechnen kann: kannst du mir bitte mal die ermittelten Werte von 534 und 535 und den 'gewünschten' (=richtigen) Wert geben. Sollte doch zu schaffen sein.
-
@rene55 Ich habe IOBroker in der Version 7.2.0 auf einem Unraid Server als Container laufen. Es ist der Deye Adapter 0.1.0 installiert (über die Adaptersuche). Die yaml (https://github.com/raschy/ioBroker.deyeidc/blob/main/deyeidc.Sun2000.json) hatte ich nicht importiert (weiß nicht wie das geht), sondern hatte die Werte händisch hinzugefügt.
Was mich absolut verwundert ist, dass der Abfrageintervall auf 330 Sekunden steht :
Ich aber trotzdem alle 30 Sekunden Fehler erhalte (auf 30 Sekunden stand mal die ursprüngliche Einstellung, habe ich wie geschrieben alles weggelöscht und neu hinzugefügt) :
Und die Fehler treten auch auf ohne dass ich irgendetwas zusätzlich in den Registern, Spulen etc. eintrage -
@romeleitis Die 330 Sekunden hatte ich als Standard eingetragen, weil die Werte vom WR eh nicht öfters aktualisiert werden. Wenn trotzden alle 30 Sekunden ein Fehler kommt bestätigt das meine Vermutung, dass noch irgendwer anderes mit dem WR spricht, der Adapter die Antworten aber nicht deuten kann. Siehe "Register 153, 154, 155 . . ".
Auf Github liegt eine angepasste Version, die (hoffentlich) die nicht angeforderten Antworten ausblendet. Daher wäre es einen Versuch wert, den Adapter einmal direkt von Github zu installieren.
-
@rene55 wechseln bedeutet, das die Werte bei der einem AbfrageZyklus "ABC", und beim nächsten oder übernächsten AbfrageZyklus "DEF" sind. habe ich auch zu ersten mal gesehen.
In der Influx wurden mir die Werte 534 ansteigend bei Master bis den Wert 6550.849999999999 und beim Slave bis den Wert 6552.666666666667 geschrieben, dann fangen Sie wieder bei 0 an und der 535 bekam ein 1
Ich zeichne die Werte nur alle 30 Min auf.Die Anlage steht leider 70km von mir entfernt. Dauert, bis ich die Werte von Display bekomme.