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
Hallo,
die meisten Fragen würden schon hier gelöst (https://forum.fhem.de/index.php?msg=1348020).
Was noch bleibt ist:
M_Import und M_Export liefern falsche Werte.
Wer kann helfen?
Mit besten Grüßen
Martin
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.
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
Zitat von: Max_Meyer am 16 September 2025, 10:16:46Zitat 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
Und hier noch die SE SunSpec (von Juni 2025) für die Register.
Zitat von: MartinD am 16 September 2025, 14:27:58Zitat von: Max_Meyer am 16 September 2025, 10:16:46Zitat 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
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]
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 :-(
Zitat von: MartinD am 16 September 2025, 20:16:20st aber erfolglos wegen falschen Werten geblieben.
Und habe mich schon so gefreut
Hallo Martin,
ist ein langsames herantasten :)
Wenn das h40226 geht muss das andere auch funktionieren
versuche mal:
obj-h40234-revRegs 0
mal mit 0 mal mit 1 ist die andere Sortierung
Gruß Gerd
Hallo Gerd,
habe ich natürlich versucht.
attr SolarEdge obj-h40226-revRegs 1 --> 69730.39
attr SolarEdge obj-h40226-revRegs 0 --> 5801.00
Erwartet habe ich --> ca. 40 Wh
Gruß
Martin
Weiß niemand einen Rat?