Modbus Zugriff für Fronius Symo

Begonnen von Roger, 03 Januar 2016, 19:51:56

Vorheriges Thema - Nächstes Thema

Fritz Muster

Zitat von: MegaData am 18 Oktober 2018, 16:05:20
ist es eigentlich möglich anstatt die Tageserzeugung, auch den Tagesverbrauch auszulesen ? Die Daten scheinen vorhanden zu sein, im Solarweb kann ich es ja abrufen... ?

Ich denke das was im Solarweb dargestellt wird, wird mathematisch errechnet (Import+Direktverbrauch), da der (Haus)Verbrauch nicht gemessen wird.

Wenn Du den Verbrauch darstellen möchtest, musst Du fhem das berechnen lassen.

Grüße Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

sweetie-pie

#211
Zitat von: Roger am 03 Januar 2016, 19:51:56
Hallo FHEM-Gemeinde,
ich habe einen Fronius Symo PV Wechselrichter vom Typ 7.0-3-M.
Dieser kann auch über Modbus ausgelesen werden. Dafür habe ich einige FHEM-Module erstellt:

Fronius Basismodul:      98_Fronius_Modbus.pm
MPPT Tracker (Strings):  98_Fronius_Modbus_MPPT (String2 geht bei mir nicht)
Fronius String Combiner: 98_Fronius_Modbus_SC403.pm (ungetestet)
Fronius Energiezähler:   98_Fronius_Modbus_Meter.pm (ungetestet)


Dafür zunächst auch mal meinen Dank, ich habe einen Fronius Symo Hybrid 5.0-3-S und die Module funktionieren bei mir auch sehr gut. Ich habe zusätzlich noch eine Fronius Solar Battery. Dafür habe ich Quick'n'Dirty nach Gutenberg-Art ein entsprechendes Modul gebaut. Ich weiß, es hält nicht die fhem-Konventionen ein, aber es funktioniert zumindest. Vielleicht komme ich Winter nochmal dazu, den Quelltext aufzuräumen. Wer sich berufen fühlt, kann das gerne auch tun...  ;)

Das Modul zeigt nicht nur Werte an, sondern ermöglicht es das Verhalten des Speichers zu steuern wenn dies im WR so eingestellt. Ich tue das derzeit mit der Notstromreserve. Anhand von Proplanta-Vorhersage löse ich die Reserve auf wenn entspechend Sonne kommt, wenn nicht halte ich immer eine Reserve vor. Diverse Spielchen sind denkbar, man kann den Speicher gezielt laden und entladen und Grenzwerte festlegen... Die (deutsche) Beschreibung dazu aus dem Fronius PDF habe ich in die EN-Hilfe kopiert.  ::)

Im Anhang dann ein Screenshot einer Readingsgroup und das Modul.
Vielleicht hilft's einem...

Reliktdragon

Kann man irgendwie Power gesamt in watt anzeigen wenn man keinen Smart Meter hat? Bei mir sind nur die Strings einzeln aufgelistet.

Fritz Muster

Zitat von: Reliktdragon am 20 Dezember 2018, 09:12:18
Kann man irgendwie Power gesamt in watt anzeigen wenn man keinen Smart Meter hat? Bei mir sind nur die Strings einzeln aufgelistet.

Welche "Power gesamt" meinst Du, die Power (Leistung) welche aktuell vom WR/Kollektoren erzeugt wird?

Grüße Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

Reliktdragon

Zitat von: Fritz Muster am 20 Dezember 2018, 10:05:24
Welche "Power gesamt" meinst Du, die Power (Leistung) welche aktuell vom WR/Kollektoren erzeugt wird?

Grüße Fritz

Ja genau. Die aktuelle Gesamtleistung.

topa_LE

Mit dem Basis Solarmodul müsstest du die Readings:

Power_DC__W
Power_Site__W

erhalten.

Definiert ist das bei mir mit:
defmod PV_Solar_Basismodul Fronius_Modbus 1 30 192.168.178.60:502 TCP

Hoffe das meinst du?

Fritz Muster

Zitat von: Reliktdragon am 20 Dezember 2018, 12:09:02
Ja genau. Die aktuelle Gesamtleistung.

Kann ich bestätigen: Reading "Power_Site__W"

Grüße Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

Reliktdragon

Zitat von: topa_LE am 20 Dezember 2018, 12:18:24
Mit dem Basis Solarmodul müsstest du die Readings:

Power_DC__W
Power_Site__W

erhalten.

Definiert ist das bei mir mit:
defmod PV_Solar_Basismodul Fronius_Modbus 1 30 192.168.178.60

Hoffe das meinst du?

Vielen Dank. Jetzt hat es funktioniert. Power_Site steht jetzt da.

MegaData

Hallo zusammen,

ich habe mir das auch alles mit einem 5er Symo eingerichtet, jedoch wird mir seither das Log voll gemüllt... Kann man das abschalten oder was hat er für ein Problem ? Es war schon dunkel, also dass er meldet das ein Fehler vorliegt ist okay... Aber... so viel in 2 Minuten ?

2018.12.30 18:46:10.829 3: Solaranlage: MapConvert called from ModbusLD_ParseObj did not find 307 in map 1:aus, 2:AutoShutdown, 3:startet, 4:Normalbetrieb, 5:Leistungsreduktion, 6:abschalten, 7:Fehler, 8:Standby
2018.12.30 18:46:23.704 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Current_String1__A, OpStateName: Operating_State_String1, OpState: Error.exists; Operating_State nicht i.O. --> WertNeu auf Null: 0
2018.12.30 18:46:25.676 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Power_String1__W, OpStateName: Operating_State_String1, OpState: Error.exists; Operating_State nicht i.O. --> WertNeu auf Null: 0
2018.12.30 18:46:29.648 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Current_String2__A, OpStateName: Operating_State_String2, OpState: 65535; Operating_State nicht i.O. --> WertNeu auf Null: 0
2018.12.30 18:46:30.561 2: IgnoreExprMppt, DevName: SolaranlageString1, ReadingName: Voltage_String2__V, WertAlt: 0, WertNeu: 0.4; zu grosse Abweichung alt/neu --> kein Update, 1. mal, neu: 0.4 gt alt: 0
2018.12.30 18:46:30.561 3: SolaranlageString1: CheckEval for ModbusLD_ParseObj error evaluating ignoreExpr for Voltage_String2__V, val=40, expr=IgnoreExprMppt($hash,$name,"Voltage_String2__V",$val,"ScaleFactor_Voltage"): Undefined subroutine &main::xterTeil called at ./FHEM/98_Fronius_Modbus_MPPT.pm line 572.

2018.12.30 18:46:30.562 2: ExprMppt, DevName: SolaranlageString1, ReadingName: Voltage_String2__V, OpStateName: Operating_State_String2, OpState: 65535; geloescht, 1. mal, neu: 0.4 gt alt: 0
2018.12.30 18:46:31.634 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Power_String2__W, OpStateName: Operating_State_String2, OpState: 65535; Operating_State nicht i.O. --> WertNeu auf Null: 0
2018.12.30 18:47:13.747 3: Solaranlage: MapConvert called from ModbusLD_ParseObj did not find 522 in map 1:aus, 2:AutoShutdown, 3:startet, 4:Normalbetrieb, 5:Leistungsreduktion, 6:abschalten, 7:Fehler, 8:Standby
2018.12.30 18:48:16.785 3: Solaranlage: MapConvert called from ModbusLD_ParseObj did not find 307 in map 1:aus, 2:AutoShutdown, 3:startet, 4:Normalbetrieb, 5:Leistungsreduktion, 6:abschalten, 7:Fehler, 8:Standby
2018.12.30 18:48:24.035 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Current_String1__A, OpStateName: Operating_State_String1, OpState: Error.exists; Operating_State nicht i.O. --> WertNeu auf Null: 0
2018.12.30 18:48:26.142 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Power_String1__W, OpStateName: Operating_State_String1, OpState: Error.exists; Operating_State nicht i.O. --> WertNeu auf Null: 0
2018.12.30 18:48:30.106 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Current_String2__A, OpStateName: Operating_State_String2, OpState: Error.exists; Operating_State nicht i.O. --> WertNeu auf Null: 0
2018.12.30 18:48:31.019 2: IgnoreExprMppt, DevName: SolaranlageString1, ReadingName: Voltage_String2__V, WertAlt: 0, WertNeu: 0.4; zu grosse Abweichung alt/neu --> kein Update, 1. mal, neu: 0.4 gt alt: 0
2018.12.30 18:48:31.020 2: ExprMppt, DevName: SolaranlageString1, ReadingName: Voltage_String2__V, OpStateName: Operating_State_String2, OpState: Error.exists; geloescht, 1. mal, neu: 0.4 gt alt: 0
2018.12.30 18:48:32.061 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Power_String2__W, OpStateName: Operating_State_String2, OpState: Error.exists; Operating_State nicht i.O. --> WertNeu auf Null: 0
2018.12.30 18:49:19.775 3: Solaranlage: MapConvert called from ModbusLD_ParseObj did not find 522 in map 1:aus, 2:AutoShutdown, 3:startet, 4:Normalbetrieb, 5:Leistungsreduktion, 6:abschalten, 7:Fehler, 8:Standby

topa_LE

2018.12.30 18:48:32.061 3: ExprMppt, DevName: SolaranlageString1, ReadingName: Power_String2__W, OpStateName: Operating_State_String2, OpState: Error.exists; Operating_State nicht i.O. --> WertNeu auf Null: 0

Die hatte ich z.B. auch , gerade wenn nix produziert wird, da es dunkel ist liefert z.B. der String1 und 2 jede Menge im Log.

Das Solar Tracker Modul (Fronius_Modbus_MPPT) habe ich daher disabled, da du das eigentlich nicht mehr brauchst. Habe aktuell nur noch das Basismodul am Laufen, weil das alles liefert was du für die normale Statistik etc. brauchst.

Hier mal meine Defines vom Basis-Modul:

defmod httpmod_PV_Solaranlage HTTPMOD http://192.168.178.60/solar_api/v1/GetPowerFlowRealtimeData.fcgi 10
attr httpmod_PV_Solaranlage userattr reading01Name reading01OMap reading01Regex reading02Name reading02OMap reading02Regex reading03Name reading03OMap reading03Regex reading04Name reading04OMap reading04Regex reading05Name reading05OMap reading05Regex reading06Name reading06OMap reading06Regex reading07Name reading07OMap reading07Regex reading08Name reading08OMap reading08Regex
attr httpmod_PV_Solaranlage DbLogExclude .*
attr httpmod_PV_Solaranlage DbLogInclude PV_Eigenverbrauch_Aktuell_in_Watt,Eigenverbrauch_Current_SelfConsumption,Netzbezug_P_Load,PV_Einspeisung_Aktuell_in_Watt,Produktion_Gesamt_Fronius,Produktion_P_Generate,Produktion_pro_Jahr_Fronius,Produktion_pro_Tag_Fronius,Verbrauch_P_Grid,Strombezug_Aktuell_in_Watt,Strom_Gesamtverbrauch_Aktuell_in_Watt,Relative_Current_Autonomy
attr httpmod_PV_Solaranlage alias Solar PV Fronius Sym 6.0.3 - Daten
attr httpmod_PV_Solaranlage alignTime 00:00:00
attr httpmod_PV_Solaranlage event-on-change-reading .*
attr httpmod_PV_Solaranlage group PV Solaranlage FRONIUS
attr httpmod_PV_Solaranlage icon message_light_intensity
attr httpmod_PV_Solaranlage reading01Name Verbrauch_P_Grid
attr httpmod_PV_Solaranlage reading01OMap null:0
attr httpmod_PV_Solaranlage reading01Regex "P_Grid"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_PV_Solaranlage reading02Name Netzbezug_P_Load
attr httpmod_PV_Solaranlage reading02OMap null:0
attr httpmod_PV_Solaranlage reading02Regex "P_Load"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_PV_Solaranlage reading03Name Produktion_P_Generate
attr httpmod_PV_Solaranlage reading03OMap null:0
attr httpmod_PV_Solaranlage reading03Regex "P_PV"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_PV_Solaranlage reading04Name Eigenverbrauch_Current_SelfConsumption
attr httpmod_PV_Solaranlage reading04OMap null:0
attr httpmod_PV_Solaranlage reading04Regex "rel_SelfConsumption"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_PV_Solaranlage reading05Name Relative_Current_Autonomy
attr httpmod_PV_Solaranlage reading05OMap null:0
attr httpmod_PV_Solaranlage reading05Regex "rel_Autonomy"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_PV_Solaranlage reading06Name Produktion_pro_Tag_Fronius
attr httpmod_PV_Solaranlage reading06OMap null:0
attr httpmod_PV_Solaranlage reading06Regex "E_Day"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_PV_Solaranlage reading07Name Produktion_pro_Jahr_Fronius
attr httpmod_PV_Solaranlage reading07OMap null:0
attr httpmod_PV_Solaranlage reading07Regex "E_Year"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_PV_Solaranlage reading08Name Produktion_Gesamt_Fronius
attr httpmod_PV_Solaranlage reading08OMap null:0
attr httpmod_PV_Solaranlage reading08Regex "E_Total"[ : \t]+([-+]?[a-z\d\.]+)
attr httpmod_PV_Solaranlage room Draußen,HW-Raum
attr httpmod_PV_Solaranlage showError 1
attr httpmod_PV_Solaranlage stateFormat {return "PV aktuell: ".sprintf("%.0f",ReadingsVal($name,"Produktion_P_Generate",0))." W | PV Eigenverbrauch: ".sprintf("%.0f",ReadingsVal($name,"PV_Eigenverbrauch_Aktuell_in_Watt",0))." W | PV Einspeisung: ".sprintf("%.0f",ReadingsVal($name,"PV_Einspeisung_Aktuell_in_Watt",0))." W | Netzbezug: ".sprintf("%.0f",ReadingsVal($name,"Strombezug_Aktuell_in_Watt",0))." W | Stromverbrauch: ".sprintf("%.0f",ReadingsVal($name,"Strom_Gesamtverbrauch_Aktuell_in_Watt",0))." W<br/>PV Leistung (60 Minuten Ø): ".sprintf("%.0f",ReadingsVal($name,"statPower_P_GenerateHourAvg",0))." | Autarkiegrad: ".sprintf("%.1f",ReadingsVal($name,"Relative_Current_Autonomy",0))." % | PV-Eigenverbrauch: ".sprintf("%.1f",ReadingsVal($name,"Eigenverbrauch_Current_SelfConsumption",0))." %";;}
attr httpmod_PV_Solaranlage userReadings PV_Einspeisung_Aktuell_in_Watt { my $temp1 = ReadingsVal($name,"Verbrauch_P_Grid",0)*-1;; return $temp1 if($temp1>0);; return 0;; }, Strombezug_Aktuell_in_Watt { my $temp2 = ReadingsVal($name,"Verbrauch_P_Grid",0);; return 0 if($temp2<0);; return $temp2;;}, PV_Eigenverbrauch_Aktuell_in_Watt { my $temp3 = ReadingsVal($name,"Produktion_P_Generate",0);; my $temp4 = ReadingsVal($name,"PV_Einspeisung_Aktuell_in_Watt",0);; my $temp5 = $temp3 - $temp4;; return $temp5 if($temp5>0);; return 0;; }, Strom_Gesamtverbrauch_Aktuell_in_Watt { my $temp41 = ReadingsVal($name,"Netzbezug_P_Load",0)*-1;; return $temp41 if($temp41>0);; return 0;;}
attr httpmod_PV_Solaranlage verbose 2


Wie du die Fehler beseitigen kannst, weiß ich nicht. Vielleicht hat ja einer ne Lösung.

dobiwan

Hallo zusammen,

ich habe im Dezember auch einen Fronius Symo Hybrid 5.0-3-S in Betrieb genommen. Habe ihn mit HTTPMOD auslesen können. Bekomme aber seit mehreren Tagen kein Update über json mehr. Die Seite ist online. Ich habe jetzt diesen Beitrag hier gefunden und mir die Module in das FHEM verzeichnis kopiert und nachgeladen. Leider zeigt mir Modul disconnected. Habe natürlcih meine IP verwendet. Wird an dem Projekt noch gearbeitet oder hat jemand eine funktionierende Konfig als Beispiel.

Grüße

Dirk

topa_LE

An dem Projekt bzw. dem Modbus Modul wird immer irgendwie "gearbeitet" ... , wenn alles funktioniert und keine Probleme gemeldet werden gibt es auch kein Update  ;)

Es funktioniert derzeit, siehe Config oben. Warum du ein Disconnect hast, kann ich nicht beurteilen., stimmen denn die Settings auf der Anlage?

Port etc. (weiter oben findest du die dafür erforderlichen Einstellungen)

Gibt dir die Anlage denn Werte zurück?
http://IP-DER-ANLAGE/solar_api/v1/GetPowerFlowRealtimeData.fcgi

dobiwan

Hallo topa_LE,

ja ich bekomme die Daten. über HTTPMOD.
Aber eigentlich sollten die Module doch die Werte bringen, wenn ich sie einbinde. Ich habe ModBus over TCP aktiviert auf Port 502.

Fritz Muster

Zitat von: dobiwan am 14 Januar 2019, 10:29:05
Ich habe ModBus over TCP aktiviert auf Port 502.

poste mal die Ausgaben von

list

Deiner Devices

Grüße Fritz
RasPi 3B+, Stretch, Fhem 5.9, DBlog SQLite
HMLAN, mapleCUN MAX/WMBus, mapleSduino 868/433/868
HM Sensoren/Aktoren ,Technoline TX 29 DTH-IT, TFA 30.3155WD, MAX!
Hour Counter, Astro, EletricityCounter, Statistics, Charting Frontend, TabletUI, Modbus

tamash

#224
Hallo Roger!

Erstmal vielen Dank für dein Modul. Hab es seit einigen Tagen im Betrieb und es funktioniert so weit ganz gut.
Der String2 im MPPT Modul bleibt leider meist auf Error.exists.

Ich bekomme dazu einige Fehlermeldungen im LOG die wie folgt aussehen:

2019.11.01 07:36:51 2: IgnoreExprMppt, DevName: Tr.Fronius_mppt, ReadingName: Current_String2__A, WertAlt: 0.00, WertNeu: 0.31; zu grosse Abweichung alt/neu --> kein Update, 1. mal, neu: 0.31 gt alt: 0.00
2019.11.01 07:36:51 3: Tr.Fronius_mppt: CheckEval for ParseObj error evaluating ignoreExpr for Current_String2__A, val=31, expr=IgnoreExprMppt($hash,$name,"Current_String2__A",$val,"ScaleFactor_Current"): Undefined subroutine &main::xterTeil called at ./FHEM/98_Fronius_Modbus_MPPT.pm line 572.

2019.11.01 07:36:51 3: ExprMppt, DevName: Tr.Fronius_mppt, ReadingName: Current_String2__A, OpStateName: Operating_State_String2, OpState: Error.exists; Operating_State nicht i.O. --> WertNeu auf Null: 0
2019.11.01 07:36:51 2: ExprMppt, DevName: Tr.Fronius_mppt, ReadingName: Current_String2__A, OpStateName: Operating_State_String2, OpState: Error.exists; geloescht, 1. mal, neu: 0.31 gt alt: 0.00
2019.11.01 07:36:55 2: IgnoreExprMppt, DevName: Tr.Fronius_mppt, ReadingName: Power_String2__W, WertAlt: 0, WertNeu: 97.5; zu grosse Abweichung alt/neu --> kein Update, 1. mal, neu: 97.5 gt alt: 0


Soweit ich das Richtig verstehe werden die Werte auf 0 gesetzt weil das Reading 'Operating_State_String2' auf 'Error.exists' steht. Setzen des Power Reading wird ingoriert weil die Abweichung zu groß (97.5>0) ist.
Die definition der Subroutine 'xterTeil' konnte ich in den Sourcen nicht finden. Wo sollte  die definiert sein?

Interessant ist, wenn ich ein 'get Tr.Fronius Operating_State_String2' ausführe wechselt das reading sofort auf 'normal.operation'

Für den String1 scheint das irgendwie (anders) zu funktionieren:

2019.11.01 07:19:01 2: IgnoreExprMppt, DevName: Tr.Fronius_mppt, ReadingName: Current_String1__A, WertAlt: 0.31, WertNeu: 0.28, AlterWertAlt: 360s ; alter Wert sehr alt --> doch Update
2019.11.01 07:19:02 2: IgnoreExprMppt, DevName: Tr.Fronius_mppt, ReadingName: Voltage_String1__V, WertAlt: 150, WertNeu: 317.6, AlterWertAlt: 359s ; alter Wert sehr alt --> doch Update


Die Fronius hat die FW Version: 3.14.1-10

Danke nochmals und LG
Thomas