Erfahrungen mit der Anbindung von Huawei Wechselrichtern?

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

Vorheriges Thema - Nächstes Thema

Andre09

Zitat von: cs-online am 22 Juli 2023, 12:26:12
Zitat von: Heatseeker am 13 Juli 2023, 06:48:1932080 ist die WR_Leistung. Dass sollte so einigermaßen hinkommen.

Das funktioniert bei mir recht gut, solange der Speicher geladen oder entladen wird, sonst steht da bei der gleiche Wert, wie bei der Input_power...

Wie ist das bei euch ?

Grüße

Christian

Hello. Habe hier jetzt alles durchgelesen aber leider ist viel für mich noch Fachchinesisch, du scheinst aber die gleiche Konstellation zu haben daher noch mal für meine laienhafte versrändnis.

Ich habe selbige Anlage mit Speicher. Mein WR hängt im WLAN. Mein Pi mit fhem per LAN im selbigem Netzwerk.

Habe ich richtig verstanden das der Installateur mir die TCP Schnittstelle freischalten muss und ich DANN in fhem direkt die entsprechende Instanz definieren kann? (So als würde ich andere Geräte die im Netz sind hinzufügen?) Wenn das Hardware technisch funktioniert, kannst du mit nochmal erklären auf was ich genau achten muss ?

Ich brauche auch kein 10 sek abfrage Intervall, mit reicht da 1 min oder noch länger, will es halt nur auf einem tablet mit ftui vernünftig darstellen. Bin für jede Hilfe dankbar :)

der-Lolo

Hallo Andre09,
ja die Modbus Option ist im Standard ausgeschaltet und muss durch den installateur Account in FusionSolar aktiviert werden.
Entweder Du verfügst selbst über die rechte hierzu oder Du fragst Deinen Solarteur.

Danach kannst Du ModbusTCP definieren und die Daten in FHEM weiterverarbeiten.
Diese Verbindungsart macht jedoch häufig probleme.

Die zweite Variante ist:
Ein Raspi in der unmittelbaren nähe des WR - der verbindet sich mit dem Nahfeld-Wlan des Wechselrichter und fragt den Wechselrichter nach den ModbusDaten und nicht den Dongle.
Dieser Raspi wiederum hängt mit der Lan Schnittstelle dann im Heimnetz und stellt FHEM bereit.

So hab ich das aufgebaut und es läuft seit März sehr stabil.


Andre09

Zitat von: der-Lolo am 12 September 2023, 08:39:19Hallo Andre09,
ja die Modbus Option ist im Standard ausgeschaltet und muss durch den installateur Account in FusionSolar aktiviert werden.
Entweder Du verfügst selbst über die rechte hierzu oder Du fragst Deinen Solarteur.

Danach kannst Du ModbusTCP definieren und die Daten in FHEM weiterverarbeiten.
Diese Verbindungsart macht jedoch häufig probleme.

Die zweite Variante ist:
Ein Raspi in der unmittelbaren nähe des WR - der verbindet sich mit dem Nahfeld-Wlan des Wechselrichter und fragt den Wechselrichter nach den ModbusDaten und nicht den Dongle.
Dieser Raspi wiederum hängt mit der Lan Schnittstelle dann im Heimnetz und stellt FHEM bereit.

So hab ich das aufgebaut und es läuft seit März sehr stabil.



Vielen Dank. Welche Probleme gibt es denn bei der ersten Variante? Wie gesagt mir geht es nicht darum wenn, ich sag mal jede Minute Daten empfangen werden und jede 2. Minute mal nicht. Mit geht es darum einigermaßen aktuell die Stände des Speichers und des Verbrauchs auf dem tablet zu visualisieren. Daher würde ich eigentlich die erste Variante bevorzugen. Gerade auch weil der dongle 2 m Luftlinie von meiner FRITZ!Box entfernt ist und wie gesagt der fhem Pi eh im Netz hängt.

Aber wenn ich es richtig verstehe könnte ich es ja ausprobieren wenn der Installateur das freischaltet und wenn es nicht zufriedenstellend ist immer noch einen Pi kaufen und zwischen schalten.

der-Lolo

Der Dongle hat im Fall das Du dort abfragst nicht nur Dich zu bedienen sondern eben auch das Huawei Portal...
Hier kommt es wohl zu verbindungs und Time-Out problemen, ich hab es selbst noch nicht probiert und kann nichts genaues sagen.

cs-online

Hallo,

bei mir läuft Variante 1 seit Monaten flüssig, ich frage alle 10 Sekunden ca. 38 Werte ab, bislang ohne Probleme.

Grüße Christian
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

TheTrumpeter

Zitat von: der-Lolo am 12 September 2023, 11:33:54Der Dongle hat im Fall das Du dort abfragst nicht nur Dich zu bedienen sondern eben auch das Huawei Portal...
Hier kommt es wohl zu verbindungs und Time-Out problemen, ich hab es selbst noch nicht probiert und kann nichts genaues sagen.
Ich frage das Dongle seit 6 Monaten über Modbus-TCP ab, die letzten 4-5 Monate davon ca. 25 Werte (teilweise gruppiert) im 5-Sekunden-Intervall.
Während der Zeit ist mir noch kein einziger Ausfall aufgefallen.
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

der-Lolo

Ok, die erfahrungen hier weichen also deutlich von dem ab was die Leute im Photovoltaikforum erleben.
Ich glaube die Softwarestände von Dongle Wechselrichter und Luna spielen hier eine rolle.

Andre09

Hallo zusammen,

Habe dank Pn-Hilfe nun auch direkten Kontakt mit meinem sun2000.
Dank der hier hinterlegten PDF von huaweii versteh ich nun auch wo die ominösen Register Nummern herkommen.
Soweit so gut.
Um meine Frau nicht zuüberfordern würde ich gerne nur ähnliche Werte wie in der Fusion Solar App abfragen, aber so richtig steig ich da nicht durch bei der Vielzahl welche die relevanten sind. Vielleicht kann mir hier aus Erfahrung weiterhelfen. Ich brauche:

- was wird gerade vom Haus verbraucht und wieviel ist der aktuelle tagesgesamtverbrauch
- wieviel kWh davon werden gerade aus dem Netz und wieviel vom Speicher geholt
- wie voll ist der speicher
- gibt es was im Sinne von wie ,,gut" gerade geladen wird "¿

Für den Anfang würde mir das reichen um dann tiefer in die Materie einzutauchen.

Und eine weitere Frage: ich definiere das Attribut mit 30 sek abfrage, trotzdem kommen viele Reading im 1 sek Takt. Liegt das am Poll 1 in den Attributen"?
Brauche die Werte maximal alle 30 wenn nicht noch langsamer.

Danke für newbie Input

TheTrumpeter

Zitat von: der-Lolo am 16 September 2023, 07:57:39Ok, die erfahrungen hier weichen also deutlich von dem ab was die Leute im Photovoltaikforum erleben.
Ich glaube die Softwarestände von Dongle Wechselrichter und Luna spielen hier eine rolle.

Dongle: V100R001C00SPC125
Inverter: V100R001C00SPC153

Abfrage von ca. 25 Werten im 5-Sekunden-Intervall vom Dongle über Modbus-TCP
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

Andre09

Zitat von: Heatseeker am 13 Juli 2023, 06:48:19
Zitat von: der-Lolo am 12 Juli 2023, 20:12:0037113
Nein, dass ist der Netzbezug. Ich möchte den Hausverbrauch. Ich habe mir den nun berechnet aus:
32080 - 37113
32080 ist die WR_Leistung. Dass sollte so einigermaßen hinkommen.

Grüße
Heatseeker

Hey,

kannst du das ein wenig aufdröseln?
Stehe auch vor dem Problem welcher Wert jetzt was zuzurechnen ist:

37113 gibt mir gerade den Moment verbrauch aus Stromleitung wieder (z.B. -0,32 ) [negativ da keine Einspeisung] aktuell in KW. Bei uns ist Speicher und Modul noch nicht verbaut. Was genau gibt denn dann 32080 aus und wie hast du daraus konkret den aktuellen Hausverbrauch berechnet? (gerade wenn 37113 ins positive wegen Einspeisung dreht).

Gehe ich recht in der Name das ein Tagesverbrauch wie in der App nicht über die Register darstellbar ist?

Danke dir :)

Wollte eigentlich versuchen auf dem Tablet eine ähnliche Übersicht wie Fuision Solar darzustellen aber vermutlich gehen immer nur die LIVE werte. Aber zumindest würde ich dann Baterriespeicher / Hausverbrauch / speise oder nehme ich Energie auf (37113) und entlade oder lade ich die Batterie darstellen wollen

bertl

Ich habe das Problem mit den Tageswerten um eine ähnliche Übersicht wie Fuision Solar darzustellen, mit folgenden userReadings gelöst:

PM_Energie_insNetz_Tag_kWh:PM_Energie_insNetz_.* {
  round( ReadingsNum( $name,'PM_Energie_insNetz_Gesamt_kWh',0 ) - ReadingsNum( $name,'PM_Energie_insNetz_Midnight_kWh',0 ), 2 );
},
PM_Energie_vomNetz_Tag_kWh:PM_Energie_vomNetz_.* {
  round( ReadingsNum( $name,'PM_Energie_vomNetz_Gesamt_kWh',0 ) - ReadingsNum( $name,'PM_Energie_vomNetz_Midnight_kWh',0 ), 2 );
},
WR_Energie_HausPV_Gesamt_kWh:(WR_Energie_PV_|PM_Energie_insNetz_).* {
  round( ReadingsNum( $name,'WR_Energie_PV_Gesamt_kWh',0 ) - ReadingsNum( $name,'PM_Energie_insNetz_Gesamt_kWh',0 ), 2 );
},
WR_Energie_HausPV_Tag_kWh:(WR_Energie_PV_|PM_Energie_insNetz_).* {
  round( ReadingsNum( $name,'WR_Energie_PV_Tag_kWh',0 ) - ReadingsNum( $name,'PM_Energie_insNetz_Tag_kWh',0 ), 2 );
},
WR_Energie_Haus_Gesamt_kWh:(WR_Energie_HausPV_|PM_Energie_vomNetz_).* {
  round( ReadingsNum( $name,'WR_Energie_HausPV_Gesamt_kWh',0 ) + ReadingsNum( $name,'PM_Energie_vomNetz_Gesamt_kWh',0 ), 2 );
},
WR_Energie_Haus_Tag_kWh:(WR_Energie_HausPV_|PM_Energie_vomNetz_).* {
  round( ReadingsNum( $name,'WR_Energie_HausPV_Tag_kWh',0 ) + ReadingsNum( $name,'PM_Energie_vomNetz_Tag_kWh',0 ), 2 );
},
WR_Leistung_Haus_W:(PM_Leistung_Momentan_W|WR_Leistung_Momentan_W).* {
  ( ReadingsNum( $name,'WR_Leistung_Momentan_W',0 ) - ReadingsNum( $name,'PM_Leistung_Momentan_W',0 ) >= 0 ) ? ( ReadingsNum( $name,'WR_Leistung_Momentan_W',0 ) - ReadingsNum( $name,'PM_Leistung_Momentan_W',0 ) ) : ReadingsNum( $name,'WR_Leistung_Haus_W',0 )
}

Um Mitternacht werden mittel 'at' die Readings
'PM_Energie_insNetz_Midnight_kWh' auf den Wert von 'PM_Energie_insNetz_Gesamt_kWh' und
'PM_Energie_vomNetz_Midnight_kWh' auf den Wert von 'PM_Energie_vomNetz_Gesamt_kWh' gesetzt.

Das userReading 'WR_Leistung_Haus_W' habe ich deshalb so gestaltet, um negative Werte zu vermeiden.
Diese können passieren, wenn das eine Reading schon aktualisiert und das andere Reading noch den alt vorherigen Wert beinhaltet.

Meine Definition der Readings ist hier zu finden:
Zitat von: bertl am 14 August 2023, 19:55:57Und falls es jemanden interessiert, hier meine gesamte Modbus-Definition: 98_ModbusSUN2000WR.pm

Heatseeker

Zitat von: Andre09 am 19 September 2023, 14:03:46Hey,

kannst du das ein wenig aufdröseln?
Stehe auch vor dem Problem welcher Wert jetzt was zuzurechnen ist:

37113 gibt mir gerade den Moment verbrauch aus Stromleitung wieder (z.B. -0,32 ) [negativ da keine Einspeisung] aktuell in KW. Bei uns ist Speicher und Modul noch nicht verbaut. Was genau gibt denn dann 32080 aus und wie hast du daraus konkret den aktuellen Hausverbrauch berechnet? (gerade wenn 37113 ins positive wegen Einspeisung dreht).



Moin,
Das passt soweit, 32080 ist die Wechselrichterleistung. Sind das 2000W und du speist 1700 Watt ein (positiv) hast du 2000-1700=300W Hausverbrauch. Wenn du 0W erzeugung hast und 300W (Bezug negativ) hast du 0 - (-300)= 300W Hausverbrauch. Problematisch ist es bei stark wechselden Befingungen und die Werte kommen nicht gleichzeitig. Muss mir mal die Lösung von bertl anschauen.
Vielleicht Werte im Fusion Portal sind leider berechnet...

Andre09

ich steh vor dem selbem Problem. Habe auch die PDF vor mir mit den ganzen Werten und checke gerade weil nicht 1:1 mit App vergleichbar, welcher Wert für das sein soll. Vielleicht kann das ja mal wer aufdröseln der sich besser auskennt. ICH habe Speicher und WR und theoretisch interessiert mich folgendes + was ich denke was korrekt ist

- Was verbraucht gerade mein Haus (unanhängig wo her)  -> keine Ahnung aber evtl nicht notwendig wenn ich Werte aus Verbrauch ich aus Netz oder Verbrauch ich aus Batterie habe
- Was produziert gerade die PV? - 32064 ??
- Was beziehe ich vom NETZ bzw. was speise ich ein? --> 37113  (+ = Einspeiung, - = Bezug, auf 0 wenn von Batterie)
- Gibt der Speicher was ab oder lädt er? --> krieg ich gar nicht hin 37001, 38275 ? liefert mir aber irgendwie nix
- wie voll ist der Speicher in %?   -> 37004





passibe

#118
Servus Andre09,

ich gebe dir mal im Anhang folgendes Modul rüber, das basiert auf dem von bertl und ist ergänzt durch die relevanten Daten zur Batterie (habe mir nicht die Mühe gemacht alle Register abzubilden, sondern nur die, die ich brauche).
Hinzugefügt ist: Gerätestatus, Ladestand, (Ent-)Ladeleistung in W und (Ent-)Ladung/Tag.

Mit der unten folgenden Raw definition hast du auch alle relevanten Daten im devStateIcon.
Der momentane und Langzeit-Hausverbrauch wird durch die userReadings "Haus_Leistung_Momentan_W" bzw. "Haus_Verbrauch_Gesamt_kWh" abgebildet, daraus wird dann die Autarkiequote "Haus_Autarkie_Gesamt" berechnet.

Die UserReadings
- BAT_Leistung_Entladen_Momentan_W
- BAT_Leistung_Laden_Momentan_W
- PM_Energie_insNetz_Momentan_W
- PM_Energie_vomNetz_Momentan_W
kannst du ggfs. löschen, die habe ich nur rein gemacht, damit ich SolarForecast benutzen kann. Das hat mit den teilweise negativen Werten, die der WR liefert bei mir irgendwie nicht richtig funktioniert.

Hier die Raw definition:
defmod pv_wr ModbusSUN2000WR 1 30 <IP/Hostname des WR bzw. des Dongles>:<Ggfs. Port (6607), falls über AP vom WR verbunden> TCP
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 maxTimeoutsToReconnect 5
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 timeoutLogLevel 4
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;;}\
}

Für SolarForecast habe ich dann folgendes:
set <SolarForecastDevice> currentInverterDev <WechselrichterDevice> pv=WR_Leistung_EingangSolar_W:W etotal=WR_Energie_PV_Gesamt_kWh:kWh capacity=10000
set <SolarForecastDevice> currentMeterDev <WechselrichterDevice> gcon=PM_Energie_vomNetz_Momentan_W:W contotal=PM_Energie_vomNetz_Gesamt_kWh:kWh gfeedin=PM_Energie_insNetz_Momentan_W:W feedtotal=PM_Energie_insNetz_Gesamt_kWh:kWh
set <SolarForecastDevice> currentBatteryDev <WechselrichterDevice> pin=BAT_Leistung_Laden_Momentan_W:W pout=BAT_Leistung_Entladen_Momentan_W:W charge=BAT_Ladestand

Hoffe das hilft. Die Werte scheinen soweit alle plausibel zu sein, aber kann natürlich nicht garantieren, dass das zu 100 % stimmt.

P.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.

Andre09

#119
Zitat von: passibe am 25 Oktober 2023, 00:38:57Servus Andre09,

ich gebe dir mal im Anhang folgendes Modul rüber, das basiert auf dem von bertl und ist ergänzt durch die relevanten Daten zur Batterie (habe mir nicht die Mühe gemacht alle Register abzubilden, sondern nur die, die ich brauche).
Hinzugefügt ist: Gerätestatus, Ladestand, (Ent-)Ladeleistung in W und (Ent-)Ladung/Tag.

Mit der unten folgenden Raw definition hast du auch alle relevanten Daten im devStateIcon.
Der momentane und Langzeit-Hausverbrauch wird durch die userReadings "Haus_Leistung_Momentan_W" bzw. "Haus_Verbrauch_Gesamt_kWh" abgebildet, daraus wird dann die Autarkiequote "Haus_Autarkie_Gesamt" berechnet.

Die UserReadings
- BAT_Leistung_Entladen_Momentan_W
- BAT_Leistung_Laden_Momentan_W
- PM_Energie_insNetz_Momentan_W
- PM_Energie_vomNetz_Momentan_W
kannst du ggfs. löschen, die habe ich nur rein gemacht, damit ich SolarForecast benutzen kann. Das hat mit den teilweise negativen Werten, die der WR liefert bei mir irgendwie nicht richtig funktioniert.

Hier die Raw definition:
defmod pv_wr ModbusSUN2000WR 1 30 <IP/Hostname des WR bzw. des Dongles>:<Ggfs. Port (6607), falls über AP vom WR verbunden> TCP
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 maxTimeoutsToReconnect 5
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 timeoutLogLevel 4
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;;}\
}

Für SolarForecast habe ich dann folgendes:
set <SolarForecastDevice> currentInverterDev <WechselrichterDevice> pv=WR_Leistung_EingangSolar_W:W etotal=WR_Energie_PV_Gesamt_kWh:kWh capacity=10000
set <SolarForecastDevice> currentMeterDev <WechselrichterDevice> gcon=PM_Energie_vomNetz_Momentan_W:W contotal=PM_Energie_vomNetz_Gesamt_kWh:kWh gfeedin=PM_Energie_insNetz_Momentan_W:W feedtotal=PM_Energie_insNetz_Gesamt_kWh:kWh
set <SolarForecastDevice> currentBatteryDev <WechselrichterDevice> pin=BAT_Leistung_Laden_Momentan_W:W pout=BAT_Leistung_Entladen_Momentan_W:W charge=BAT_Ladestand

Hoffe das hilft. Die Werte scheinen soweit alle plausibel zu sein, aber kann natürlich nicht garantieren, dass das zu 100 % stimmt.

P.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.

Danke dir, versuche ich mich mal dran allerdings brauch ich für meine ftui-Oberfläche einzelne Readings die ich darstellen kann. Schaue mal ob mir die userreadings das hergeben was ich brauche oder ob die Variante für meine Zwecke zu kompliziert wird.

Deswegen ging es mir eigentlich auch nur um die oben genannten Werte da alles andere auch komfortabel über die App darstellbar ist :)