FHEM Forum

FHEM => Sonstiges => Thema gestartet von: MartinD am 20 August 2025, 14:45:37

Titel: ModbusAttr am SolarEdge SE10K-RWB48BFN4 mit Speicher
Beitrag von: MartinD am 20 August 2025, 14:45:37
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