Deye SUN-12K-SG04LP3 mit Modbus auslesen

Begonnen von mfischer-ffb, 09 April 2023, 22:18:26

Vorheriges Thema - Nächstes Thema

e_brandt

Zitat von: e_brandt am 21 November 2024, 05:59:57Guten Morgen Gisbert, vielen Dank schon mal für deine Mühe, du machst das jedoch über esphome oder? Ich wollte das eigentlich direkt über Fhem - modbus machen ohne esp und mqtt.

Auslesen klappt auch hervorragend, bis auf das Register vom Generator Eingang. Da hängt noch ein kleiner Wechselrichter dran. Wenn die Sonne aufgeht bekommt ich im Plott ganz merkwürdige ausschläge siehe Bild.

Also das auslesen des Generator Registers klapp jetzt auch.Es mussten noch die Atribute richtig gestzt werden da der Wert über 2 Register kommt.



Jetzt würde ich auch gern die Batterie zwecks Strom sparen bei diesem bescheidenem Wetter abschalten. Kann mir eventuell jamand sagen wie der Befehl zum beschreiben des Register 111 zum Batterie abschalten auszusehen hat?



Gisbert

Zitat von: e_brandt am 12 Dezember 2024, 21:42:20Also das auslesen des Generator Registers klapp jetzt auch.Es mussten noch die Atribute richtig gestzt werden da der Wert über 2 Register kommt.

Hallo e_brandt,

ich schalte den Micro-Inverter per MQTT und da ist meines Wissens nur ein Register involviert. Deshalb bin ich etwas verwirrt bei deinem Hinweis auf 2 Register. Kannst du deinen Code / Konstruktion posten, damit ich es evtl. bei mir besser machen kann, als das, was ich bisher habe? Die URL <auch.es> führt leider ins nichts.

Ich nehme an, dass du für das Abschalten der Batterie keinen MQTT-Code gebrauchen kannst? Ich kann dich auf jeden Fall ermuntern, nachts und bei leerer Batterie (hierzulande auch "Winter" genannt, dann aber tags und nachts ;D) die Batterie wegzuschalten. Ich spare um die 70W, d.h. über Nacht gut gerne etwas mehr als 1 kWh pro Tag.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

e_brandt

Zitat von: Gisbert am 13 Dezember 2024, 10:58:18
Zitat von: e_brandt am 12 Dezember 2024, 21:42:20Also das auslesen des Generator Registers klapp jetzt auch.Es mussten noch die Atribute richtig gestzt werden da der Wert über 2 Register kommt.

Hallo e_brandt,

ich schalte den Micro-Inverter per MQTT und da ist meines Wissens nur ein Register involviert. Deshalb bin ich etwas verwirrt bei deinem Hinweis auf 2 Register. Kannst du deinen Code / Konstruktion posten, damit ich es evtl. bei mir besser machen kann, als das, was ich bisher habe? Die URL <auch.es> führt leider ins nichts.

Ich nehme an, dass du für das Abschalten der Batterie keinen MQTT-Code gebrauchen kannst? Ich kann dich auf jeden Fall ermuntern, nachts und bei leerer Batterie (hierzulande auch "Winter" genannt, dann aber tags und nachts ;D) die Batterie wegzuschalten. Ich spare um die 70W, d.h. über Nacht gut gerne etwas mehr als 1 kWh pro Tag.

Viele Grüße Gisbert

Hallo Gisbert, ich habe mich da eventuell etwas blöd ausgedrückt. Es ging darum das ich ja Probleme hatte das Register für den Micro Wechselrichter richtig auszulesen. Ich glaube das war Register 667 oder so. Das besteht aus einem low und hi word in einem 2. Register.

Das abschalten der Batterie ist wohl nur ein Register, die 111. Und das wollte ich mit einem set Befehl umschalten.

e_brandt

Ich bin etwas weiter gekommen mit meinem Register 111 schreiben, ist mir fast ein bisschen peinlich... Hatte vergessen das obj_111 anzulegen. Jetzt kann ich zumindest den Set befehl losschicken. Leider kommt wenn ich eine null sende die Fehlermeldung: Timeout in Readanswer.

Nun weiß ich mal wieder nicht weiter :'(


Wäre ich super wenn jemand einen tip hat was ich da noch machen muss.

Gisbert

Hallo e_brandt,

wenn ich dich nur zu MQTT überreden könnte, dann hättest du schon längst eine Lösung.

Bei der Batterie sind in Wirklichkeit 2 Register involviert: 98 und 111.
Ich hab mir dazu folgendes notiert und im yaml-File definiert:
select:
#Register 98, code von @tsg
#Wenn am Wechselrichter Lithium (BMS) ausgewählt wurde, muss dieses Register auf 1 (=Lithium) stehen, bei 0 stünde es auf Blei.
#https://www.akkudoktor.net/forum/deye-wechselrichter/home-assistant-einbindung-vom-deye-12k-und-baugleiche-sunsyk-solarman/paged/24/
#Beim Umschalten von Use V auf No Bat steht das Register 98 immer auf 0, also auf Lead Battery.
# 98 - 1 / 111 - 0 -> Lithium (BMS)
# 98 - 0 / 111 - 0 -> Use V
# 98 - 0 / 111 - 1 -> Use %
# 98 - 0 / 111 - 2 -> No Bat
  - platform: modbus_controller
    use_write_multiple: true
    modbus_controller_id: ${modbus_controller_id}
    name: ${device_type}-battery-typ
    id: ${device_type}_Battery_Typ
    address: 98
    value_type: U_WORD
    optionsmap:
      "Lead Battery": 0
      "Lithium Battery": 1

Bei der ganzen Aktion (An- und Abschalten der Batterie per Modbus und in Kombination mit einer Einstellung am Deye-Display) ist es durchaus möglich, den Typ als Blei-Akku zu definieren, was für eine LFP-Batterie wohl ziemlich blöde wäre. Man sollte schon sehr genau wissen, was man tut, bevor man den Akku grillt. Das BMS wird wohl einschreiten, ist aber trotzdem nicht schön.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

e_brandt

Habe es hinbekommen, dank jojo11ś Beitrag hier: attr Deye dev-h-write 16 # 10H
Keine Ahnung was das bewirkt aber es funktioniert.Somit kann ich weiter spielen.

@ Gisbert, danke für deine Hilfe, im Moment wird ja auch wenn der WR auf Blei steht nichts passieren  :))

Werde das mal testen mit dem Register 98. Ich meine irgendwo was gelesen zu haben das das Firmwareabhängig ist und es bei manchen reicht das Reg 11 zu ändern.


e_brandt

Darf ich fragen nach welchen Kriterien ihr eure Wechselrichter in den Standby schaltet?

Ich dachte jetzt erstmal so zum testen von 1.11- 1.3 wenn dunkel und Akku unter 30 % oder so.

Gisbert

Hallo e_brandt,

ich nutze folgende Definition, die auch eine PV-Prognose einsetzt. Falls Sonne in Sicht ist, entlade ich bis SOC 10%, ansonsten bis 30%.

defmod Deye_Batt_MaxDischarge DOIF ([JK_BMS:capacity_remaining] <= 10) \
(set Deye_Inverter:FILTER=MaxBattDischarge!=0 MaxBattDischarge 0) \
DOELSEIF ([JK_BMS:capacity_remaining] <= 30 and \
(([?{sunset_abs(-3600)}-23:59] and [?mySolarForecast:Tomorrow_PVforecast:d] < ([?mySolarForecast:Tomorrow_ConsumptionForecast:d]-5000)) or \
([?mySolarForecast:RestOfDayPVforecast:d] < ([?mySolarForecast:RestOfDayConsumptionForecast:d]-5000)))) \
(set Deye_Inverter:FILTER=MaxBattDischarge!=0 MaxBattDischarge 0) \
DOELSEIF ([JK_BMS:capacity_remaining] >= 15 and \
(([?{sunset_abs(-3600)}-23:59] and [?mySolarForecast:Tomorrow_PVforecast:d] >= ([?mySolarForecast:Tomorrow_ConsumptionForecast:d]-5000)) or \
([?mySolarForecast:RestOfDayPVforecast:d] >= ([?mySolarForecast:RestOfDayConsumptionForecast:d]-5000)))) \
(set Deye_Inverter:FILTER=MaxBattDischarge!=100 MaxBattDischarge 100) \
DOELSEIF ([JK_BMS:capacity_remaining] >= 35) \
(set Deye_Inverter:FILTER=MaxBattDischarge!=100 MaxBattDischarge 100)
Das funktioniert zuverlässig.

Den Akku schalte ich dann so ab und an:
defmod Deye_Batt_onoff DOIF (([Lichtstaerke:Lichtstaerke.Ostseite.Lux.Av] > 175 or [Lichtstaerke.West:Lichtstaerke.Westseite.Lux.Av] > 345) \
or [Deye_Inverter:MaxBattDischarge] > 0) \
(set Deye_Inverter:FILTER=BattV!=1 BattV 1) \
DOELSEIF (!isday and [Deye_Inverter:Deye_Growatt_power] == 0 and [?Deye_Inverter:MaxBattDischarge] == 0) \
(set Deye_Inverter:FILTER=BattV!=0 BattV 0)
Zum Einschalten nutze ich schon vorhandene Lichtsensoren. Die Werte sind so gewählt, dass ca. 70W erreicht werden, die in etwa dem Eigenverbrauch des DEYE entsprechen.

Ohne Akku liefert der DEYE deutlich später seine Leistung, d.h. es ist schon wichtig den Akku rechtzeitig wieder zu zuschalten.

Mit dieser Steuerung erhalte ich alle Daten vom DEYE, nachts dann nur mit einem Eigenverbrauch von 10~15W Eigenverbrauch.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Gisbert

Hallo zusammen,

ich hab die Ab/Zuschaltung des Akkus abgeändert, da es durch das PV-Forecast-Modul beim Datumswechsel kurzfristig zum Zuschalten, ein paar Sekunden später wieder zum Abschalten des Akkus kam.

Entfernt:
or [Deye_Inverter:MaxBattDischarge] > 0

defmod Deye_Batt_onoff DOIF ([Lichtstaerke:Lichtstaerke.Ostseite.Lux.Av] > 175 or [Lichtstaerke.West:Lichtstaerke.Westseite.Lux.Av] > 345) \
(set Deye_Inverter:FILTER=BattV!=1 BattV 1) \
DOELSEIF (!isday and [Deye_Inverter:Deye_Growatt_power] == 0 [s]and [?Deye_Inverter:MaxBattDischarge] == 0[/s]) \
(set Deye_Inverter:FILTER=BattV!=0 BattV 0)

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Marlon

#69
Hallo Gisbert,

mit der Anregung, über Register 111 BattMode die Batterie, statt mit Register 80 (EnableSwitch) den Deye12K abzuschalten, bin ich nach über einem Jahr endlich die Nachtverbrauchsabsenkung des Deye-Verbrauchs angegangen. Während bei Abschaltung über Register 80 der Deye den undokumentierten F19 meldet und alle Relais abschaltet, geht er bei Abschaltung der Batterie über Register 111 in den nach Anleitung korrekten F13 Fault und lässt nur das Grid-Relais ein. Dadurch stehen alle gemessenen Leistungen zur Verfügung und mit Kenntnis der Netzwirkleistung kann die Batterie eingeschaltet werden, sobald eine bestimmte Einspeiseleistung erreicht wird.
Durch den Hinweis, dass auch Register 98 betroffen ist, das zwischen Lithium (1) und Blei (0) wählt, wurde ich etwas verunsichert. Dies war aber unbegründet. Bei meinem Deye12K stand Register 98 auf 1 (Lithium) und Register 111 auf 1, obwohl ich das BMS mit dem Deye gekoppelt habe. Zum Abschalten der Batterie setze ich Register 111 auf 2 und zum Einschalten wieder auf 1 und das funktioniert problemlos. Register 98 bleibt durchgehend auf 1 und wird auch nicht verändert.
Aufgefallen ist mir außerdem, dass die vom Deye12K über die CT-Klemmen ermittelte Netzwirkleistung nachts ohne Batterie etwa 28 W geringer ist als die von Homematic direkt vom Zähler erhaltene Netzwirkleistung. Die Messwerte der CT-Klemmen scheinen ungenau skaliert zu sein, denn wenn der Deye die Netzwirkleistung zu 0 regelt, stimmen beide Messwerte gemittelt überein.

Zitat von: Gisbert am 13 Dezember 2024, 20:55:18Bei der Batterie sind in Wirklichkeit 2 Register involviert: 98 und 111.
Ich hab mir dazu folgendes notiert und im yaml-File definiert:
Code Auswählen Erweitern
select:
#Register 98, code von @tsg
#Wenn am Wechselrichter Lithium (BMS) ausgewählt wurde, muss dieses Register auf 1 (=Lithium) stehen, bei 0 stünde es auf Blei.
#https://www.akkudoktor.net/forum/deye-wechselrichter/home-assistant-einbindung-vom-deye-12k-und-baugleiche-sunsyk-solarman/paged/24/
#Beim Umschalten von Use V auf No Bat steht das Register 98 immer auf 0, also auf Lead Battery.
# 98 - 1 / 111 - 0 -> Lithium (BMS)
# 98 - 0 / 111 - 0 -> Use V
# 98 - 0 / 111 - 1 -> Use %
# 98 - 0 / 111 - 2 -> No Bat

e_brandt

Du musst nur aufpassen das es draußen wirklich dunkel ist. Ansonsten gibt es auch Probleme mit der Messung in der Nacht. Er misst dann nicht immer alle Phasen. Ich muss das Register 98 schalten sonst steht der Wr morgens auf Bleibatterie.

Marlon

Die Änderung des Registers 98 erfolgt vermutlich nur, wenn man das BMS der Batterie nicht mit dem Deye gekoppelt hat, sondern rein spannungsbasiert fährt. Aktuell habe ich zwei Batterien über Seplos-BMS mit dem Deye verbunden. Der Deye verwendet bei diesem Szenario allerdings falsche Maximalleistungswerte, so dass bei hoher PV-Leistung oder hoher Last-Leistung nicht die gesamte Leistung durch die Batterie abgedeckt wird, was ein reines Softwareproblem ist. Der Deye-Support schob den Fehler allerdings auf das Seplos-BMS, so dass ich wahrscheinlich irgendwann auch die Batterien rein Spannungsgesteuert mit dem Deye koppeln werde.

Ich habe zwei verschiedene Varianten realisiert, wie Deye und Batterie geschaltet werden:
  • Nur über Batterieabschaltung mit Register 111
    • Register 111 geht auf 2 (Batterie wird abgeschaltet), wenn die Sonne nicht scheint auf Basis von sunrise_abs("HORIZON=4") und sunset_abs("HORIZON=4")
      und
      |BattLeistungW| < 100
      und
      ((SOC <= 10) oder ((SOC <= 30) und (NetzWirkleistungW > 100))
      Das musste ich für den zuverlässigen Betrieb so kompliziert machen, weil der SOC bei entladener Batterie im Winter, wenn sie nie voll wird, oft mit zunehmender Zahl der Lade/Entladezyklen ansteigt.
    • Register 111 geht wieder auf 1 (Batterie wird eingeschaltet), wenn die Sonne scheint auf Basis von sunrise_abs("HORIZON=4") und sunset_abs("HORIZON=4")
      und
      NetzWirkleistung < -50
  • Dreistufig über Kombination von Deyeabschaltung mit Register 80 und Batterieabschaltung mit Register 111
    • Register 80 geht auf 0 (Deye wird abgeschaltet), wenn die Sonne nicht scheint auf Basis von sunrise_abs("HORIZON=4") und sunset_abs("HORIZON=4")
      und
      |BattLeistungW| < 100
      und
      ((SOC <= 10) oder ((SOC <= 30) und (NetzWirkleistungW > 100))
    • Register 80 geht wieder auf 1 (Deye wird eingeschaltet) und Register 111 geht auf 2 (Batterie wird abgeschaltet), wenn die Sonne scheint auf Basis von sunrise_abs("HORIZON=4") und sunset_abs("HORIZON=4")
    • Register 111 geht wieder auf 1 (Batterie wird eingeschaltet), wenn die Sonne scheint auf Basis von sunrise_abs("HORIZON=4") und sunset_abs("HORIZON=4")
      und
      NetzWirkleistung < -50
Ich muss nun erst mal mehrere Nächte messen, wie viel Energie Variante 2 gegenüber Variante 1 spart.

tonobo

Hey, kann man die ganze internen Regulatoren deaktivieren, und dem deye WR einfach per Modbus sagen 10KW einspeisen, 10KW laden? Vermutlich könnte man ähnliches erreichen indem man ein Grid Meter emuliert, quasi immer den setpoint auf 0 stellen und einfach den grid eingang entsprechend modifizieren. Noch eine weitere fage, wisst ihr wie die abtastrate vom grid meter ist?

Jojo11

#73
Kurze Frage in die Runde: Meine Gesamt-PV-Erzeugung (Register 534) weicht extrem vom Wert im Deye bzw. in Solarman ab. Die Werte pro Tag (mit statistics-Modul) passen aber. 534 habe ich wie folgt eingebunden (wie im ersten post hier):

attr Mod_Deye obj-h534-expr $val * 0.1
attr Mod_Deye obj-h534-len 2
attr Mod_Deye obj-h534-reading PV_kWh

Ist das Register evtl. anders auszulesen? Passen die Werte bei Euch mit denen im Deye überein?

[Update]: Mit revRegs geht es. Muss bei einigen Registern gemacht werden, sonst passen die Werte nicht.


e_brandt

Zitat von: Jojo11 am 11 Februar 2025, 17:53:25Kurze Frage in die Runde: Meine Gesamt-PV-Erzeugung (Register 534) weicht extrem vom Wert im Deye bzw. in Solarman ab. Die Werte pro Tag (mit statistics-Modul) passen aber. 534 habe ich wie folgt eingebunden (wie im ersten post hier):

attr Mod_Deye obj-h534-expr $val * 0.1
attr Mod_Deye obj-h534-len 2
attr Mod_Deye obj-h534-reading PV_kWh

Ist das Register evtl. anders auszulesen? Passen die Werte bei Euch mit denen im Deye überein?

[Update]: Mit revRegs geht es. Muss bei einigen Registern gemacht werden, sonst passen die Werte nicht.


bei mir funktioniert das auch nicht...