Erfahrungen mit der Anbindung von Huawei Wechselrichtern?

Begonnen von lingerb, 30 Oktober 2020, 20:02:56

Vorheriges Thema - Nächstes Thema

passibe

Also ohne die UserReadings für SolarForecast kriegst du Readings wie im angehängten Screenshot.
Wenn du FTUI nutzt kannst du devStateIcon einfach ignorieren bzw. nicht setzen.

Damit lässt sich das, was du willst, ziemlich einfach erreichen erreichen:

- Was verbraucht gerade mein Haus (unanhängig wo her)  -> Haus_Leistung_Momentan_W
- Was produziert gerade die PV? -> WR_Leistung_EingangSolar_W
- Was beziehe ich vom NETZ bzw. was speise ich ein? -> PM_Leistung_Momentan_W (negativ = beziehen, positiv = einspeisen)
- Gibt der Speicher was ab oder lädt er? -> BAT_Leistung_W (negativ = abgeben, positiv = laden)
- wie voll ist der Speicher in %? -> BAT_Ladestand

Andre09

Zitat von: passibe am 25 Oktober 2023, 12:25:59Also ohne die UserReadings für SolarForecast kriegst du Readings wie im angehängten Screenshot.
Wenn du FTUI nutzt kannst du devStateIcon einfach ignorieren bzw. nicht setzen.

Damit lässt sich das, was du willst, ziemlich einfach erreichen erreichen:

- Was verbraucht gerade mein Haus (unanhängig wo her)  -> Haus_Leistung_Momentan_W
- Was produziert gerade die PV? -> WR_Leistung_EingangSolar_W
- Was beziehe ich vom NETZ bzw. was speise ich ein? -> PM_Leistung_Momentan_W (negativ = beziehen, positiv = einspeisen)
- Gibt der Speicher was ab oder lädt er? -> BAT_Leistung_W (negativ = abgeben, positiv = laden)
- wie voll ist der Speicher in %? -> BAT_Ladestand


Danke dir! Werde mich heute Abend dran setzen und alles ausprobieren :)

Andre09

Zitat von: passibe am 25 Oktober 2023, 12:25:59Also ohne die UserReadings für SolarForecast kriegst du Readings wie im angehängten Screenshot.
Wenn du FTUI nutzt kannst du devStateIcon einfach ignorieren bzw. nicht setzen.

Damit lässt sich das, was du willst, ziemlich einfach erreichen erreichen:

- Was verbraucht gerade mein Haus (unanhängig wo her)  -> Haus_Leistung_Momentan_W
- Was produziert gerade die PV? -> WR_Leistung_EingangSolar_W
- Was beziehe ich vom NETZ bzw. was speise ich ein? -> PM_Leistung_Momentan_W (negativ = beziehen, positiv = einspeisen)
- Gibt der Speicher was ab oder lädt er? -> BAT_Leistung_W (negativ = abgeben, positiv = laden)
- wie voll ist der Speicher in %? -> BAT_Ladestand


Funktioniert astrein :) Danke dir.. einzigen WErt den ich vermisse ist wieviel von PV gerade für die Leistung des Hauses genutzt wird. kann zwar darstellen, wieviel Leistung das Haus gerade braucht und wieviel davon aus Netz und BAT gezogen wird, aber nicht wieviel aus der PV direkt kommt (was ja quasi der Substraktions-Wert wäre ;)

bertl

Klarstellung für Andre09 und passibe:

Register 32064 - Input Power - diese Leistung steht am Wechselrichter (WR) von den Panelen an, kann aber nicht genutzt werden - Eingang WR
Register 32080 - Active Power - diese Leistung steht zur Verfügung und wird vom Wechselrichter abgegeben - Ausgang WR

Somit muss für alle Verbräuche und sonstige Berechnungen das Register 32080 verwendet werden (FusionSolar nimmt auch diesen Wert).


Zitat von: Andre09 am 26 Oktober 2023, 18:09:28.. einzigen WErt den ich vermisse ist wieviel von PV gerade für die Leistung des Hauses genutzt wird
Diesen Wert musst du dir über ein userReadings selbst berechnen!

Schönen verregneten Tag
Robert

TheTrumpeter

Ich habe durch Zufall gesehen, dass es für fhempy auch eine Huawei-Implementierung per Modbus-TCP gibt.
https://github.com/fhempy/fhempy/tree/master/FHEM/bindings/python/fhempy/lib/huawei_modbus

Hat das schon mal jemand ausprobiert?
Falls ja, was sind die Vor- oder Nachteile im Vergleich zur "normalen" Modbus-Lösung wie wir sie hier verwenden?
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110

rhoffm34

Hallo zusammen,

ich habe als Batterieleistung im leeren Zustand immer eine Leistung von um die 55W was aber nicht sein kann da sie ja leer ist. OK, sie wird ab und zu vom Netz geladen und anschließend wieder entladen... aber bei mir sieht das so aus als würde die Batterie ständig geladen. Beobachtet Ihr das auch so und habt Ihr da eine Lösung für?

   obj-h37001-expr $val/1
   obj-h37001-len 2
   obj-h37001-poll 1
   obj-h37001-reading ESU1_Momentanleistung_W
   obj-h37001-unpack N!

Grüße

bertl

Hallo rhoffm34,

vielleicht hast du das gleiche Problem wie @passibe aber nur mit einem anderen Wert!?

Zitat von: passibe am 25 Oktober 2023, 00:38:57P.S.: Falls sich irgendjemand wundert/um das für die Zukunft festzuhalten: Bei Register 37001 (bei mir BAT_Leistung_W) gibt die Batterie im Ruhezustand den Wert 2147483647 aus. Da ist die Leistung aber natürlich bei 0, deshalb muss das im Modul richtig gemappt werden.

Mögliche Lösung:
obj-h37001-expr my $newval = $val == 55 ? 0 : $val; return $newval
Gruß Robert

rhoffm34

Hallo Robert, Dein Tipp könnte passen wenn der Wert nicht um die 55 pendeln würde. Jetzt sind es gerade 57...

passibe

#128
Zwei Fragen:
Ist AC-Laden bei dir eingeschaltet?
Hast du einen minimalen SoC gesetzt (5 % oder so)?

Wenn AC-Laden eingeschaltet ist und die LUNA auf 0 steht geht sie vermutlich nicht gemeinsam mit dem WR in den Ruhezustand – die ~55W die du siehst sind vermutlich der Eigenverbrauch (bei mir sogar eher ~110W).
Kannst dazu mal im Photovoltaikforum im What's up Huawei-Thread oben auf die Lupe (Suchfunktion) klicken und nach "Eigenverbrauch" suchen, wenn du mehr lesen willst.
EDIT: Hier noch ein konkreter Beitrag aus dem LUNA2000-Thread dort (siehe auch die weiteren Posts danach, da wird das ein bisschen erklärt).

Lösung ist: AC-Laden auf aus stellen (oder über Modbus/FHEM automatisiert auf aus stellen, falls du kaskadierende WR benutzt) und einen minimalen SoC eingeben (5 % oder so, ist sowieso gut für die Lebensdauer). Dann sollte die LUNA mit Standby vom Wechselrichter abends auch in den Standby gehen und nichts mehr verbrauchen.

Dass AC-Laden ausgeschaltet ist schadet der Batterie nicht, wenn sie "zu sehr" entladen ist und eine Erhaltungsladung braucht, dann zieht sie sich das unabhängig von der AC-Laden-Einstellung aus dem Netz.

Hoffe das hilft!

tpoetschan

#129
Guten Tag liebe Community,

ich bin nach vielen Jahren FHEM Einsatz immer wieder begeistert was für geniale Köpfe hier ruckizucki einfach ein Modul aus dem Boden stampfen und es uns allen zur Verfügung stellen.

DANKE dafür! Ihr seid der Hammer!

Ich komm jedoch prompt mit einem Problem um die Ecke ... und brauche hier wirklichen Basis-Support.
Technisch bin ich drin im Thema ... aber Bus ist einfach nicht meine Stärke.
Das Modul hatte ich hier nun schonmal funktionierend im Einsatz. Dann nochmal an der Anlage bisschen hin- und her gebastelt und plötzlich geht nichts mehr.

Das Modul sagt "state opened", kann jedoch absolut nichts auslesen.
Seitens Anlage ist natürlich Modbus aktiviert (ohne Einschränkungen)

Die einzige Veränderung könnte das Update auf die neueste Firmware des 10KTL sein.

Dongle bekam: V200R022C10SPC108
WR bekam: SUN2000MA V100R001C00SPC159

So sieht mein Aufbau aus:
10KTL mit Dongle und Kabel Lan + feste IP 10.4.0.5
5KTL per Modbus am 10KTL dran (derzeit jedoch nicht angeschaltet - ein Anlagenteil fehlt noch)
15 kWh Batterie am 10KTL dran

FHEM auf Rapsberry Pi 2B


Logs?

Aus dem Modul bekomme ich nicht besonders viel an Log-Info heraus.
LAST_ERROR sagt: timeout waiting for reply to fc 3 to id 3, h32064, len 2


Bisherige Aktionen:

Ich habe das Modul bereits mit und ohne Port definiert.
Dann schwenkte ich um, definierte ein Modbus-Device und im Modul keine IP mehr, sodass IODEV das Modbusdevice ist.
(In beiden Fällen sagt das Modbusdevice und auch das Modul selbst ohne Modbusdevice "state: opened")

Ich habe nun das Modul wieder direkt definiert:

define pv_wr ModbusSUN2000WR 0 30 10.4.0.5 TCP
setuuid pv_wr 65b512e0-f33f-9b9a-7f1a-15a206658fc1f9af
attr pv_wr dev-timing-timeout 10
attr pv_wr devStateIcon {my $bat = sprintf("%.0f", ReadingsNum($name,"BAT_Ladestand",""));; my $batonl = ReadingsVal($name,"BAT_Geraetestatus","na") eq "running"?"10px-kreis-gruen" : ReadingsVal($name,"BAT_Geraetestatus","na") eq "sleep_mode" ? "10px-kreis-gelb":"10px-kreis-rot";; my $pvin = ReadingsNum($name,"WR_Leistung_EingangSolar_W","");; my $wronl = ReadingsVal($name,"WR_Geraetestatus","na") eq "on_grid"?"10px-kreis-gruen" : ReadingsVal($name,"WR_Geraetestatus","na") eq "Standby_no_irradiation" ? "10px-kreis-gelb":"10px-kreis-rot";; my $haus = ReadingsNum($name,"Haus_Leistung_Momentan_W","");; my $batw = ReadingsNum($name,"BAT_Leistung_W","");; my $laden = $batw > 0?"<span style='color:green'>Laden:</span>": $batw < 0?"<span style='color:red'>Entladen:</span>":"<span style='color:grey'>Batterie:</span>";; my $netz = ReadingsNum($name,"PM_Leistung_Momentan_W","");; my $einspeisen = $netz > 0?"<span style='color:green'>Einspeisen:</span>": $netz < 0?"<span style='color:red'>Beziehen:</span>":"<span style='color:grey'>Netz:</span>";; my $bezuggesamt = ReadingsNum($name,"PM_Energie_vomNetz_Gesamt_kWh","");; my $einspeisunggesamt = ReadingsNum($name,"PM_Energie_insNetz_Gesamt_kWh","");; my $autark = ReadingsNum($name,"Haus_Autarkie_Gesamt","");;"<div> ".FW_makeImage($batonl)."&nbsp;;Batterie: $bat % | ".FW_makeImage($wronl)."&nbsp;;PV-in: $pvin W | Haus: $haus W | $laden ".abs($batw)." W | $einspeisen ".abs($netz)." W | Eingespeist: $einspeisunggesamt kWh | Bezogen: $bezuggesamt kWh ($autark %)</div>"}
attr pv_wr icon solar
attr pv_wr poll-PM_Leistung_A_W 0
attr pv_wr poll-PM_Leistung_B_W 0
attr pv_wr poll-PM_Leistung_C_W 0
attr pv_wr poll-PM_Leistungsfaktor 0
attr pv_wr poll-PM_Netzfrequenz 0
attr pv_wr poll-PM_Spannung_Netz_A 0
attr pv_wr poll-PM_Spannung_Netz_B 0
attr pv_wr poll-PM_Spannung_Netz_C 0
attr pv_wr poll-PM_Status 0
attr pv_wr poll-PM_Strom_Netz_A 0
attr pv_wr poll-PM_Strom_Netz_B 0
attr pv_wr poll-PM_Strom_Netz_C 0
attr pv_wr poll-WR_Anzahl_MPPTrackers 0
attr pv_wr poll-WR_Anzahl_PVStrings 0
attr pv_wr poll-WR_Effizienz 0
attr pv_wr poll-WR_Leistung_Nenn 0
attr pv_wr poll-WR_Leistung_Tagesspitze_W 0
attr pv_wr poll-WR_Leistungsbegrenzung_Modus 0
attr pv_wr poll-WR_Leistungsbegrenzung_Prozent 0
attr pv_wr poll-WR_Leistungsbegrenzung_kW 0
attr pv_wr poll-WR_Modell_ID 0
attr pv_wr poll-WR_Modell_Name 0
attr pv_wr poll-WR_Modell_PN 0
attr pv_wr poll-WR_Modell_SN 0
attr pv_wr poll-WR_Netzcode 0
attr pv_wr poll-WR_Shutdown 0
attr pv_wr poll-WR_Spannung_A 0
attr pv_wr poll-WR_Spannung_B 0
attr pv_wr poll-WR_Spannung_C 0
attr pv_wr poll-WR_Spannung_String1 0
attr pv_wr poll-WR_Spannung_String2 0
attr pv_wr poll-WR_Startup 0
attr pv_wr poll-WR_Strom_A 0
attr pv_wr poll-WR_Strom_B 0
attr pv_wr poll-WR_Strom_C 0
attr pv_wr poll-WR_Strom_String1 0
attr pv_wr poll-WR_Strom_String2 0
attr pv_wr poll-WR_Temperatur_Intern 0
attr pv_wr poll-WR_Zeit_Shutdown 0
attr pv_wr poll-WR_Zeit_Startup 0
attr pv_wr poll-WR_Zeit_System 0
attr pv_wr poll-WR_Zeitzone 0
attr pv_wr room PV
attr pv_wr userReadings Haus_Leistung_Momentan_W:(WR_Leistung_EingangSolar_W|BAT_Leistung_W|PM_Leistung_Momentan_W).* {\
    ReadingsNum($NAME,"WR_Leistung_EingangSolar_W","0") - ReadingsNum($NAME,"BAT_Leistung_W","0") - ReadingsNum($NAME,"PM_Leistung_Momentan_W","0")\
},\
Haus_Verbrauch_Gesamt_kWh:(WR_Energie_PV_Gesamt_kWh|PM_Energie_insNetz_Gesamt_kWh).* {\
    ReadingsNum($NAME,"WR_Energie_PV_Gesamt_kWh","0") - ReadingsNum($NAME,"PM_Energie_insNetz_Gesamt_kWh","0")\
},\
Haus_Autarkie_Gesamt:Haus_Verbrauch_Gesamt_kWh.* {\
    my $eigenverbrauch = ReadingsNum($NAME,"Haus_Verbrauch_Gesamt_kWh","");;\
    sprintf("%.1f", $eigenverbrauch/(ReadingsNum($NAME,"PM_Energie_vomNetz_Gesamt_kWh","")+$eigenverbrauch)*100);;\
},\
PM_Energie_insNetz_Momentan_W:PM_Leistung_Momentan_W.* {\
    my $leistungmom = ReadingsNum($NAME,"PM_Leistung_Momentan_W","");;\
    if ($leistungmom > 0) {\
        return abs($leistungmom);;\
    }\
    else {return 0;;}\
},\
PM_Energie_vomNetz_Momentan_W:PM_Leistung_Momentan_W.* {\
    my $leistungmom = ReadingsNum($NAME,"PM_Leistung_Momentan_W","");;\
    if ($leistungmom < 0) {\
        return abs($leistungmom);;\
    }\
    else {return 0;;}\
},\
BAT_Leistung_Laden_Momentan_W:BAT_Leistung_W.* {\
    my $leistungmom = ReadingsNum($NAME,"BAT_Leistung_W","");;\
    if ($leistungmom > 0) {\
        return abs($leistungmom);;\
    }\
    else {return 0;;}\
},\
BAT_Leistung_Entladen_Momentan_W:BAT_Leistung_W.* {\
    my $leistungmom = ReadingsNum($NAME,"BAT_Leistung_W","");;\
    if ($leistungmom < 0) {\
        return abs($leistungmom);;\
    }\
    else {return 0;;}\
}


Vielen Dank für eure Hilfe und viele Grüße

Thomas

tpoetschan

Nachtrag: Steinigt mich nicht für Doppelpost...

SDongle + Fusionsolar + Modbus TCP geht schon, oder?
Irgendwie finde ich im Netz ein paar Aussagen das nur Fusionsolar ODER ModbusTCP gehen soll ...

In meiner Konfiguration ist der Dongle in FusionSolar aktiv.

passibe

Zitat von: tpoetschan am 27 Januar 2024, 16:14:53SDongle + Fusionsolar + Modbus TCP geht schon, oder?
Das sollte alles gehen, tut es bei mir jedenfalls.

Wenn du direkt am Dongle abfragst und nicht den WLAN-AP des Inverters nutzt, ist die richtige Modbus ID 1 und nicht 0, probier mal das zu ändern:
defmod pv_wr ModbusSUN2000WR 1 30 10.4.0.5 TCP
Ansonsten hilft es bei mir gegen initiale Timeouts, wenn das Device in FHEM läuft und ich kurz das LAN-Kabel am Dongle abstecke und wieder einstecke.
Denke aber, dass bei dir die falsche ID das Problem ist.

bertl

Hallo Thomas,

soweit ich das beurteilen kann, ist dein Problem die neue Dongle Firmware V200R022C10SPC108.
Ich habe ganz bewusst nicht auf diese Firmware upgedated, sondern verwende diese hier V100R001C00SPC133 - mit der funktioniert es.
Irgendwo auf www.photovoltaikforum.com wird/wurde über dieses Thema ausführlich diskutiert (einfach mal googeln).

Gruß Robert

bertl

...wobei @passibe mit seiner Aussage natürlich recht hat - als erstes also die ID auf 1 umstellen.

Falls das nicht funktioniert, meinen vorherigen Post mal checken!

feger

Zitat von: bertl am 23 Januar 2024, 21:16:52Hallo rhoffm34,

vielleicht hast du das gleiche Problem wie @passibe aber nur mit einem anderen Wert!?

Zitat von: passibe am 25 Oktober 2023, 00:38:57P.S.: Falls sich irgendjemand wundert/um das für die Zukunft festzuhalten: Bei Register 37001 (bei mir BAT_Leistung_W) gibt die Batterie im Ruhezustand den Wert 2147483647 aus. Da ist die Leistung aber natürlich bei 0, deshalb muss das im Modul richtig gemappt werden.

Mögliche Lösung:
obj-h37001-expr my $newval = $val == 55 ? 0 : $val; return $newval
Gruß Robert

Solche Probleme habe ich auch des öfteren.
Gibt es vielleicht die Möglichkeit bei den einzelnen Registern Grenzwerte zu definieren?
Es gibt ja die Attribute min und max, aber soweit ich das verstanden habe, gelten die nur beim "set" Befehl.

Kann man in das Modul ModbusSun2000WR ein Attribut einbauen z.B. grenzwert_min, grenzwert_max einbauen? Wenn der Wert außerhalb dieser beiden ist, dann wird er verworfen.

Was haltet ihr davon?
mfg Feger
CUL433MHz für Intertechno & Somfy
CUL868MHz für Homematic
RFXTRX433E für Oregon & KeeLoq