ModbusAttr am SolarEdge SE10K-RWB48BFN4 mit Speicher

Begonnen von MartinD, 20 August 2025, 14:45:37

Vorheriges Thema - Nächstes Thema

MartinD

Hallo,
ich versuche hochgradig erfolglos den Modbus auszulesen.

Mein Ziel ist den Tagesertrag von PV-Paneelen zu erfassen.

Device List ergibt

Internals:
   DEF        1 60 192.168.2.40 TCP
   DeviceName 192.168.2.40:502
   EXPECT     idle
   FD         56
   FUUID      688b6b18-f33f-84ec-4946-89700e97d3ce21f8
   IODev      SolarEdge
   Interval   60
   LASTOPEN   1755637046.78877
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.5.6 - 7.11.2023
   NAME       SolarEdge
   NOTIFYDEV  global
   NR         437
   NTFY_ORDER 50-SolarEdge
   PARTIAL   
   PROTOCOL   TCP
   STATE      PV: 0.20 KW, Eigenverbrauch: 0.38 kW, Netz: -0.18 kW, Batterie: 0.00 kW, Ladestand: 100.00 %
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 4
   devioNoSTATE 1
   eventCount 33424
   nextOpenDelay 60
   DICACHE:
     3:
       UNPACK     
       EXPRS:
       EXTRAS:
       FNAMES:
   Helper:
     DBLOG:
       B_Lifetime_Export_Energy_Counter:
         mozart4_DbLog:
           TIME       1755689354.96512
           VALUE      2.825
       B_Lifetime_Import_Energy_Counter:
         mozart4_DbLog:
           TIME       1755689355.12613
           VALUE      3.962
       I_AC_Energy_WH:
         mozart4_DbLog:
           TIME       1755689591.81904
           VALUE      84.52
       M_Leistung_Panele:
         mozart4_DbLog:
           TIME       1755689593.32242
           VALUE      0.09

Die Parameter:

stateFormat {sprintf("PV: %.2f KW, Eigenverbrauch: %.2f kW, Netz: %.2f kW, Batterie: %.2f kW, Ladestand: %.2f %%", ReadingsVal("SolarEdge","I_DC_Power",0),ReadingsVal("SolarEdge","Eigenverbrauch",0), ReadingsVal("SolarEdge","M_AC_POWER",0)/1000, ReadingsVal("SolarEdge","B_Instantaneous_Power",0),ReadingsVal("SolarEdge","B_State_of_Energy",0))}
   userReadings Eigenverbrauch { sprintf("%.2f", ReadingsNum ('SolarEdge' ,'I_DC_Power',0) - ( ReadingsNum ('SolarEdge' ,'M_AC_POWER',0)/1000 + ReadingsNum ('SolarEdge' ,'B_Instantaneous_Power',0) ) )}, M_Leistung_Panele {sprintf("%.2f", ReadingsNum ('SolarEdge' ,'I_AC_Power',0) + ReadingsNum('SolarEdge' ,'B_Instantaneous_Power',0) + (ReadingsNum ('SolarEdge' ,'M_AC_POWER',0)/1000))

Die Readings:
obj-h40083-expr ($val * (10 ** $val[1]))/1000
obj-h40083-len 2
obj-h40083-reading I_AC_Power
obj-h40083-unpack s>s>
—————-
obj-h40100-expr $val * (10 ** $val[1])/1000
obj-h40100-len 2
obj-h40100-reading I_DC_Power
obj-h40100-unpack s>s>
———-
obj-h40206-expr $val * (10 ** ReadingsNum ('SolarEdge' ,'M_AC_Power_SF',0))/100
obj-h40206-reading M_AC_POWER
obj-h40206-unpack s>
———
obj-h40093-expr $val * (10 ** $val[1])/1000
obj-h40093-len 3
obj-h40093-reading I_AC_Energy_WH


I_AC_Energy_WH Liefert schon einen Wert das ich in der SolarEdge-App ablesen kann.

M_Import und M_Export liefern falsche Werte, was aber damit zusammenhängend ist dass ich z.Zt. im NULL-Einspeisung Modus bin (noch kein Zweirichtungs-Zähler vorhanden)

Das Problem bei meinem setup ist:
1. I_DC_Power liefert ständig einen Wert (auch in der Nacht - Energie kommt aus dem Speicher)
2.  I_AC_Power - dito
3. Berechnen im userReading liefert negative Ergebnisse, was natürlich nicht stimmen kann.

Für jeden sachdienlichen Rat wäre ich dankbar.

Mit besten Grüßen

Martin



MartinD

Hallo,

die meisten Fragen würden schon hier gelöst.
Was noch bleibt ist:

M_Import und M_Export liefern falsche Werte.

Wer kann helfen?

Mit besten Grüßen

Martin

Parallix

Wie schon im SF-Thread geschrieben, ist es immer sehr hilfreich, wenn am Ende eines jeden Beitrags eine aussagekräftige Signatur zu finden ist. Auf diese Weise braucht niemand in alten Beiträgen zu suchen, welche Hard- und Software verwendet wird.

Wenn Du die Signatur einmal angelegt hast und z.B. mit WR-Modell u.s.w. befüllt hast, kannst Du die im SF-Thread noch nicht geklärten Fragen hier gerne nochmal stellen.

Übrigens: Möchtest Du nach einem Posting diesem noch etwas hinzufügen, so kannst und Du ein Posting gerne bearbeiten. Inhaltlichen Änderungen solltest Du natürlich entsprechend kennzeichnen.
FHEM: Debian/Testing BananaPro - AVM: 7490 (7.60) und 7591 (8.20) - Goodwe: GW25K-ET (DSP V10 / ARM V12) - Trina TSM 405: (#East, #South, #West) = (12,16,12) - BYD: 2 x HVS 7.7 (BMS V3.31-B, BMU V3.26-B) - EnOcean - Z-Wave - FS20/HMS

Max_Meyer

Zitat von: MartinD am 15 September 2025, 20:49:58M_Import und M_Export liefern falsche Werte.
Hallo Martin,
kannst du das Problem bitte genauer beschreiben? - Welche Definition hast du verwandt? Wie sieht die Spec dazu aus?
Gruß Gerd
FHEM: PI3...5 FB7590/7530/EnOcean/FS20 /Revolt/FHEM2FHEM/HTTPMOD-->Solmaxx-, Deye-, Bosswerk-Inverter/ModBusTCP -->SMA-Inverter, GoE-Charger, BröntjeWP/Solarforecast/DbLog/DbRep/PostgreSQLDB/Grafana/MQTT-->Shelly,FHEM,HMS/HCCON/Netatmo/KLF etc.

MartinD

Zitat von: Max_Meyer am 16 September 2025, 10:16:46
Zitat von: MartinD am 15 September 2025, 20:49:58M_Import und M_Export liefern falsche Werte.
Hallo Martin,
kannst du das Problem bitte genauer beschreiben? - Welche Definition hast du verwandt? Wie sieht die Spec dazu aus?
Gruß Gerd


Hallo Gerd,

Danke für Deine Zeit.

Die Infos sind in den Bilder.
Ich benutze hier:
ModbusAttr
98_ModbusAttr.pm 27700 2023-06-23 14:34:28Z StefanStrobel
Angebunden:
define SolarEdge ModbusAttr 1 30 192.168.XXX.XXX TCP
Hardware:
Inverter -> SE SE10K-RWB48BFN4
Speicher - SE Home Battery 48V (DCDC)

Inverter befindet sich z.Zt. im NULL-Einspeise Modus (warte auf 2-Richtungszähler)


Gruß
Martin

MartinD

Und hier noch die SE SunSpec (von Juni 2025) für die Register.

Max_Meyer

Zitat von: MartinD am 16 September 2025, 14:27:58
Zitat von: Max_Meyer am 16 September 2025, 10:16:46
Zitat von: MartinD am 15 September 2025, 20:49:58M_Import und M_Export liefern falsche Werte.
Hallo Martin,
kannst du das Problem bitte genauer beschreiben? - Welche Definition hast du verwandt? Wie sieht die Spec dazu aus?
Gruß Gerd


Hallo Gerd,

Danke für Deine Zeit.

Die Infos sind in den Bilder.
Ich benutze hier:
ModbusAttr
98_ModbusAttr.pm 27700 2023-06-23 14:34:28Z StefanStrobel
Angebunden:
define SolarEdge ModbusAttr 1 30 192.168.XXX.XXX TCP
Hardware:
Inverter -> SE SE10K-RWB48BFN4
Speicher - SE Home Battery 48V (DCDC)

Inverter befindet sich z.Zt. im NULL-Einspeise Modus (warte auf 2-Richtungszähler)


Gruß
Martin
Hallo Martin
Ich würde erstmal mit minimaler Ausprägung starten und mit einem Register anfangen
Z.B.
40226:
1.expr auskommentieren
2.entweder 'Type' ODER 'len' und 'unpack' verwenden.
Was mir fehlt ist get = 1,
(Z.B. obj-i30531-showGet 1) das würde ich ergänzen, so kannst du gezielt nur das eine Reading abrufen und immer wieder korrigieren
40234
1.expr auskommentieren
2. unpack muss L> sein
3 auch get einfügen

Wenn die Ergebnisse nicht plausibel sind die  Sortierung noch mal ändern,  unpack L> in L<
Schreib mal ob es geklappt hat
Gruß Gerd
FHEM: PI3...5 FB7590/7530/EnOcean/FS20 /Revolt/FHEM2FHEM/HTTPMOD-->Solmaxx-, Deye-, Bosswerk-Inverter/ModBusTCP -->SMA-Inverter, GoE-Charger, BröntjeWP/Solarforecast/DbLog/DbRep/PostgreSQLDB/Grafana/MQTT-->Shelly,FHEM,HMS/HCCON/Netatmo/KLF etc.

MartinD

#7
Hallo Gerd,

also:
obj-h40223-expr --> ist weg
unpack  -       --> L>
obj-h40226-showGet 1
Type            --> ist weg


Ergebniss:  57440000.00 (ist halt ohne SkalierungsFaktor SF -> der war in der exp.
mit unpack  --> L< ist es 82080.05

Erwartet hätte ich inrgenwas in der Nähe von 140000 (Monitorings-Plattform gibt 0,14 kWH

Mit exp ist dann 57444 (wg. Umrechnung mit Register 40242)

Das Positive ---> die Werte ändern sich nun!

Ich kann im Modul mit get jeden einzelnen Reading abrufen, ich glaube obj-h40226-showGet 1 brauche ich nicht.

Gruß
Martin

[edit}
Die zuverlässig ausgelesen Register sind
obj-h57722-expr $val/1000
obj-h57722-len 4
obj-h57722-reading B_YieldDay_Import
obj-h57722-revRegs 1
obj-h57722-unpack Q>
und
obj-h57718-expr $val/1000
obj-h57718-len 4
obj-h57718-reading B_YieldDay_Export
obj-h57718-revRegs 1
obj-h57718-unpack Q>

Diese stehen aber nicht in SE-SunSpec.
[/edit]

MartinD

#8
Wenn ich aber :
attr SolarEdge obj-h40226-expr $val * ((10 ** ReadingsNum ('SolarEdge' ,'M_Energy_W_SF',0))*0.00002)

bekomme ich auf einmal den Wert den ich auch bei Monitorig-Platform sehe.
Keine Ahnung warum ich da derartige Konstante einführen muss.
Werde ich nächste Tage beobachten.

Ein Versuch diese Erkenntnis auf den anderen Register anzuwenden:
attr SolarEdge obj-h40234-expr $val * ((10 ** ReadingsNum ('SolarEdge' ,'M_Energy_W_SF',0))*0.00002)
attr SolarEdge obj-h40234-format %.3f
attr SolarEdge obj-h40234-len 2
attr SolarEdge obj-h40234-reading M_Imported
attr SolarEdge obj-h40234-unpack L>

ist aber erfolglos wegen falschen Werten geblieben.
Und habe mich schon so gefreut :-(