Fronius symo PWP 8.0 plus Modbus TCP

Begonnen von mediastudio, 30 April 2023, 23:03:58

Vorheriges Thema - Nächstes Thema

mediastudio

Hallo, ich brauche die Aktuelle Leistung als Variable aus meinem Wechselrichter.
Ich habe mit der API kein Problem die Werte zu bekommen, die Abfrage macht aber
meine FHEM Applikation zu langsam. Deshalb muss ich es über den Modbus TCP schaffen.
ich habe vorab einen SMA gehabt, damit gab es da kein Problem der hatte ein Register
in dem der Wert eingetragen ist. Ich habe schon einige Foren durchforstet aber keine
Lösung richtige Lösung gefunden. Was ich bis jetzt rausgefunden habe, ist das der
Fronius GEN24 Plus zwei Register hat in den die Werte abgelegt werden.
 
Laut Datenblatt sind das die Modbus Registers in Fronius Gen 24 Inverters
40285  PV String 1 Output in W (scaled)
40305  PV String 2 Output in W (scaled)

Was ich nun rausgefunden habe ist folgendes:
PV String 1 Output legt die Aktuelle Leistung in Register 40284
PV String 2 Output legt die Aktuelle Leistung in Register 40304

Das funktioniert auch soweit, wenn aber die Gesamtleistung beider Register auf ca. 1000 Watt
absinken, ändert sich intern irgendwie automatisch der Teilungsfaktor um 10.
Also über 1000 Watt Ausgang ist folgendes "int(ReadingsVal ("PWP","PV_String_1",0)/10)"
unter 1000 Watt Ausgang ist folgendes "int(ReadingsVal ("PWP","PV_String_1",0)/100)"
Der Wert in den Registern erhöht sich dann automatisch so das der Teilungsfaktor geändert werden muss.

Nun meine Frage, hat da jemand schon eine Lösung für sich gefunden, ich könnte Hilfe gebrauchen.
Hier ist mein Teil in FHEM der mir für meine Anwendung als "userReadings Power_P_PV" den Wert liefert.

###################################
###    Fronius symo PWP 8.0 plus  ###
###################################
define PWP ModbusAttr 1 10 192.168.10.49:502 TCP
attr PWP dev-h-defPoll 1
attr PWP dev-h-defExpr $val & 0x1FFFFFFF
attr PWP room FRONIUS
attr PWP alias Fronius symo PWP 8.0 plus
#attr PWP obj-h40284-expr ($val  & 0x1FFFFFFF )
attr PWP obj-h40284-reading PV_String_1
#attr PWP obj-h40304-expr ($val  & 0x1FFFFFFF )
attr PWP obj-h40304-reading PV_String_2
attr PWP userReadings Power_P_PV {(int(ReadingsVal ("PWP","PV_String_1",0)/10) + int(ReadingsVal ("PWP","PV_String_2",0)/10))}
attr PWP devStateStyle style="color:yellow;;font-weight:bold;;font-size: 14pt"
attr PWP stateFormat Power_P_PV  Watt Aktuelle Leistung

frober

#1
Das "int(ReadingsVal..." brauchst du nicht, es geht einfacher mit
ReadingsNum("PWP","PV_String_1",undef,0)/10 Der 4. Parameter gibt die Anzahl der Stellen nach dem Komma an.
Edit: Fehler bereinigt und das "Runden" bezieht sich auf das Reading und nicht auf die Berechnung. Es kann trotz Ganzzahlen passieren, dass eine Kommazahl herauskommt (Perl bedingt). Evtl. benötigt man doch int() oder  alternativ round().   


Als Lösungsmöglichkeiten ( ungestestet):
attr PWP userReadings Power_P_PV {
my $a = ReadingsNum("PWP","PV_String_1",undef,0)/10;
if($a < 1000) {
  $a = $a / 10;
}
my $b = ReadingsNum("PWP","PV_String_2",undef,0)/10;
if($b < 1000) {
  $b = $b / 10;
}
return $a + $b;
}
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

mediastudio

Hallo Autor frober,
ich danke Dir für Deinen Vorschlag, ich habe das mal zum eingegeben.

attr PWP userReadings Power_P_PV {\
my $a = ReadingsNum("PWP","PV_String_1",undef,0)/10;;\
my $b = ReadingsNum("PWP","PV_String_2",undef,0)/10;;\
if($a < 1000) {$a = $a / 10}\
if($b < 1000) {$b = $b / 10}\
return $a + $b \
}

Das Funktioniert soweit, kennst Du dich mit dem Modbus Protokoll aus?
Laut Datenblatt sind das die Modbus Registers im Fronius Gen 24 Inverters
40285  PV String 1 Output in W (scaled)
40305  PV String 2 Output in W (scaled)

Ich hole die Daten ja jeweils aus Register h40284 und 40304.
Die Register 40285 und 40305 zeigen mir nur statische Werte.
Ich denke, dass es da noch ein Register gibt welches mir nicht bekannt ist.
Die Dokumentation für den Fronius Gen 24 Inverters ist offen zugänglich.
Ich habe die Register mit dem "Modbus Master Simulator" durchforstet, aber
nichts gefunden was auf die "Aktuelle ausgegebene Leistung" passt.
Die aktuelle Leistung kann ich ja über die Fronius App sehen.
Wie schon gesagt, über meinem SMA gibt es ein Register das die Leistung rausgibt.

Ich habe seit Jahren eine Anwendung über "FHEM Tablet UI" für die Ansteuerung von
Leistungsabhängigen Verbrauchern. Einfach gesagt "Smart Steckdose".
Diese benutze ich z.B. für die Laufzeit von Pumpen und Heizung meines Pools.