[98_Fronius.pm] Fronius API Modul

Begonnen von michael.winkler, 26 August 2020, 20:10:45

Vorheriges Thema - Nächstes Thema

eurofinder

@fred_feuerstein:
Hallo,

ich frage die Werte von meinem Symo 6.0-3-M wie folgt ab:
defmod PV_Wechselrichter fronius Deine-IP-PV-Wechselrichter
attr PV_Wechselrichter DbLogInclude PowerFlow_Inverters_1_P,Bezug,Einspeisung,PowerFlow_Site_P_Load
attr PV_Wechselrichter IntervalRealtimeData 20
attr PV_Wechselrichter alias Fronius Symo
attr PV_Wechselrichter devStateStyle style="text-align:right"
attr PV_Wechselrichter event-on-change-reading .*
attr PV_Wechselrichter event-on-update-reading .*
attr PV_Wechselrichter group Fronius
attr PV_Wechselrichter room PV
attr PV_Wechselrichter stateFormat {return "Status: ".ReadingsVal($name,"state","")."<br>\
PV-aktuell: ".sprintf("%.0f",ReadingsVal($name,"PowerFlow_Inverters_1_P",0))." W<br>\
PV Eigenverbrauch: ".sprintf("%.0f",ReadingsVal($name,"PowerFlow_Site_P_Load",0))." W<br>\
PV Einspeisung: ".sprintf("%.0f",ReadingsVal($name,"Einspeisung",0))." W<br>\
Netzbezug: ".sprintf("%.0f",ReadingsVal($name,"Bezug",0))." W<br>\
Autarkiegrad: ".sprintf("%.1f",ReadingsVal($name,"PowerFlow_Site_rel_Autonomy",0))." %<br>\
PV-Eigenverbrauch: ".sprintf("%.1f",ReadingsVal($name,"PowerFlow_Site_rel_SelfConsumption",0))." %";;}
attr PV_Wechselrichter userReadings Einspeisung:PowerFlow_Site_P_Grid.* {ReadingsVal($name,"PowerFlow_Site_P_Grid","")<0?ReadingsVal($name,"PowerFlow_Site_P_Grid","")*-1:0},\
Bezug:PowerFlow_Site_P_Grid.* {ReadingsVal($name,"PowerFlow_Site_P_Grid","")>0?ReadingsVal($name,"PowerFlow_Site_P_Grid",""):0}
attr PV_Wechselrichter verbose 2


Per ElectricityCalculator lasse ich dann die Werte berechnen und ausgeben:
defmod PV_Rechner ElectricityCalculator PV_Wechselrichter:PowerFlow_Inverters_1_E_Total.*
attr PV_Rechner BasicPricePerAnnum 0
attr PV_Rechner Currency €;
attr PV_Rechner DecimalPlace 3
attr PV_Rechner ElectricityCounterOffset 0
attr PV_Rechner ElectricityKwhPerCounts 0.001
attr PV_Rechner ElectricityPricePerKWh 0.2471
attr PV_Rechner MonthOfAnnualReading 1
attr PV_Rechner MonthlyPayment 0
attr PV_Rechner ReadingDestination CalculatorDevice
attr PV_Rechner SiPrefixPower W
attr PV_Rechner alias PV-Anlage
attr PV_Rechner devStateStyle style="text-align:right"
attr PV_Rechner icon sani_solar
attr PV_Rechner room PV
attr PV_Rechner stateFormat {return "Heute erzeugt: ".sprintf("%.2f",ReadingsVal($name,"PV_Wechselrichter_PowerFlow_Inverters_1_E_Total_EnergyDay",0))." kWh<br>\
Gestern erzeugt: ".sprintf("%.2f",ReadingsVal($name,"PV_Wechselrichter_PowerFlow_Inverters_1_E_Total_EnergyDayLast",0))." kWh<br>\
bisher im Monat erzeugt: ".sprintf("%.2f",ReadingsVal($name,"PV_Wechselrichter_PowerFlow_Inverters_1_E_Total_EnergyMonth",0))." kWh<br>\
letzten Monat erzeugt: ".sprintf("%.2f",ReadingsVal($name,"PV_Wechselrichter_PowerFlow_Inverters_1_E_Total_EnergyMonthLast",0))." kWh<br>\
bisher im Jahr erzeugt: ".sprintf("%.2f",ReadingsVal($name,"PV_Wechselrichter_PowerFlow_Inverters_1_E_Total_EnergyYear",0))." kWh";;}


Für die Bezug- und Einspeisewerte nutze ich das SmarMeter:
defmod FroniusMeter Fronius_Modbus_Meter 240 30 Deine-IP-Wechselrichter:502 TCP
attr FroniusMeter devStateStyle style="text-align:right"
attr FroniusMeter event-on-change-reading .*
attr FroniusMeter poll-Energy_total__kWh 1
attr FroniusMeter room PV
attr FroniusMeter stateFormat {return "Status: ".ReadingsVal($name,"state","")."<br>".ReadingsTimestamp($name,'Energy_export__kWh','')."<br>Einspeisung: ".sprintf("%.0f",ReadingsVal($name,"Energy_export_current__kWh",0))." W | Gesamt: ".sprintf("%.1f",ReadingsVal($name,"Energy_export__kWh",0))."W<br>\
Bezug: ".sprintf("%.0f",ReadingsVal($name,"Energy_import_current__kWh",0))." W | Gesamt: ".sprintf("%.1f",ReadingsVal($name,"Energy_import__kWh",0))."W<br>".ReadingsTimestamp($name,'Energy_import__kWh','')}
attr FroniusMeter userReadings Energy_import_current__kWh {ReadingsVal("PV_Wechselrichter","Bezug",0)},\
Energy_export_current__kWh {ReadingsVal("PV_Wechselrichter","Einspeisung",0)}\

attr FroniusMeter verbose 2


Bezug:
defmod PV_Bezug ElectricityCalculator FroniusMeter:Energy_import__kWh.*
attr PV_Bezug BasicPricePerAnnum 0
attr PV_Bezug Currency €;
attr PV_Bezug DecimalPlace 3
attr PV_Bezug ElectricityCounterOffset 0
attr PV_Bezug ElectricityKwhPerCounts 1
attr PV_Bezug ElectricityPricePerKWh 0.2567
attr PV_Bezug MonthOfAnnualReading 5
attr PV_Bezug MonthlyPayment 0
attr PV_Bezug ReadingDestination CalculatorDevice
attr PV_Bezug SiPrefixPower W
attr PV_Bezug devStateStyle style="text-align:right"
attr PV_Bezug room PV
attr PV_Bezug stateFormat {return "Heute bezogen: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_import__kWh_EnergyDay",0))." kWh<br>\
Gestern bezogen: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_import__kWh_EnergyDayLast",0))." kWh<br>\
bisher im Monat bezogen: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_import__kWh_EnergyMonth",0))." kWh<br>\
letzten Monat bezogen: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_import__kWh_EnergyMonthLast",0))." kWh<br>\
bisher im Jahr bezogen: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_import__kWh_EnergyYear",0))." kWh";;}


Einspeisung:
defmod PV_Einspeisung ElectricityCalculator FroniusMeter:Energy_export__kWh.*
attr PV_Einspeisung BasicPricePerAnnum 0
attr PV_Einspeisung Currency €;
attr PV_Einspeisung DecimalPlace 3
attr PV_Einspeisung ElectricityCounterOffset 0
attr PV_Einspeisung ElectricityKwhPerCounts 1
attr PV_Einspeisung ElectricityPricePerKWh 0.2567
attr PV_Einspeisung MonthOfAnnualReading 5
attr PV_Einspeisung MonthlyPayment 0
attr PV_Einspeisung ReadingDestination CalculatorDevice
attr PV_Einspeisung SiPrefixPower W
attr PV_Einspeisung devStateStyle style="text-align:right"
attr PV_Einspeisung room PV
attr PV_Einspeisung stateFormat {return "Heute eingespeist: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_export__kWh_EnergyDay",0))." kWh<br>\
Gestern eingespeist: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_export__kWh_EnergyDayLast",0))." kWh<br>\
bisher im Monat eingespeist: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_export__kWh_EnergyMonth",0))." kWh<br>\
letzten Monat eingespeist: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_export__kWh_EnergyMonthLast",0))." kWh<br>\
bisher im Jahr eingespeist: ".sprintf("%.2f",ReadingsVal($name,"FroniusMeter_Energy_export__kWh_EnergyYear",0))." kWh";;}


Gruß
eurofinder
RPI3+; Raspbian Buster Lite; RPI-RF-MOD; piVCCU3, HMIP-eTRV-2, HmIP-SWDO, HmIP-SRH, HmIP-STHO, HmIP-SLO

fred_feuerstein

Vielen Dank!!

Den Wechselrichter SYMO GEN 24 10.0 hatte ich bereits per API eingebunden und auch ein paar usr-Readings angelegt. Habe noch ein bisschen ergänzt und den ElectricityCalculator auf den Total Wert gesetzt wie in deiner Config.

Nun wollte ich den Smart Meter über modbus wie in deiner Config einbinden. Ein Connect war nur so möglich:
defmod FroniusMeter Fronius_Modbus_Meter 200 30 Deine-IP-Wechselrichter:502 TCP
Also statt 240 eine 200.
Nun kommen einige Readings, auch die benötigten für den Berechnungen, aber die sind alle mit dem Wert 0.000

Hast Du noch eine Idee? Klar, es hat nichts mit dem API-Modul hier zu tun. Wenn Du meinst, gehen wir mit der Frage in einen anderen Thread.

Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

eurofinder

@fred_feuerstein:
Im Fronius-Wechselrichter unter Einstellungen (mit admin anmelden) bei Modbus folgendes eingestellt?
    Datenausgabe über Modbus: tcp
    Modbus Port: 502
    String Control Adress-Offset: 101
    Sunspec Model Type: float
    Demo Modus: aus
Gruß
eurofinder
RPI3+; Raspbian Buster Lite; RPI-RF-MOD; piVCCU3, HMIP-eTRV-2, HmIP-SWDO, HmIP-SRH, HmIP-STHO, HmIP-SLO

fred_feuerstein

So wie es aussieht ist der smart Meter noch nicht korrekt installiert.
Bei Komponenten im Webif ist ein roter Punkt vor dem smart Meter.
Kenne das von einem Bekannten. Da ist der Punkt grün.
Denke, da muss der Elektriker, der alles installiert hat nochmal schauen.
Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

PhyTHZ

ZitatSo wie es aussieht ist der smart Meter noch nicht korrekt installiert.

Das muss nicht sein. Im photovoltaikforum gab es dazu einen Thread. Dort hieß es, dass laut Installationsanleitung das Smart Meter auf Modbus M1 und Speicher auf  Modbus M0 geklemmt werden soll. Die Software des Gen24 erwartet es aber wohl genau anders herum...
Gehen tut wohl beides.

Grüße

fred_feuerstein

Die Installationsfirma schaut es sich im neuen Jahr noch an. Ggfs. muss nur etwas umgeklemmt werden oder gar nur anders konfiguriert...
Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

treborst

Hallo @eurofinder,

vielen Dank für deine Info wie du die Daten auswertest.
Was ich nicht verstehe, warum du das Smartmeter per Modbus anbindest.
Die Werte des Smartmeters sind doch auch per API verfügbar, oder täusche ich mich da?
Den von dir verwendeten Wert des Smartmeters finde ich leider nicht, welcher würde dem von dir verwendeten entsprechen?

eurofinder

@treborst:
Gegenwärtig bin ich mit der Abfrage über Modbus sehr zufrieden - läuft zuverlässig und ich bekomme alle Daten, die ich benötige. Alternativ kannst du natürlich von Fronius die Solar.web Query API nutzen.

Gruß
eurofinder
RPI3+; Raspbian Buster Lite; RPI-RF-MOD; piVCCU3, HMIP-eTRV-2, HmIP-SWDO, HmIP-SRH, HmIP-STHO, HmIP-SLO

flobeewan

Hi,
vielen Dank für das super Modul! Hat bei mir auf Anhieb funktioniert. Allerdings bin ich mir den ganzen Readings etwas überfordert.
Die Schnittstellenbeschreibung der API habe ich auch durchgeschaut, wurde aber nicht wirklich schlauer.
Was sind die Unterschiede zwischen zum Beispiel:
Bei den Tageswerten:
- Inverter_Common_DAY_ENERGY_Value (Wert: 2807.7) und
- Inverter_3P_DAY_ENERGY_Values_1 (Wert: 2630)

oder bei den Totals:
- Inverter_3P_TOTAL_ENERGY_Values_1 (Wert: 3828)
- Inverter_Common_TOTAL_ENERGY_Value (Wert: 4004)
- Inverter_Common_YEAR_ENERGY_Value (Wert: 4004.9)

Wieso sind die erfassten Wh hier unterschiedlich? Das kann doch nicht am Verlust liegen, oder?
Vielen Dank!

PhyTHZ

Hi,

Zitat von: flobeewan am 21 Januar 2022, 09:21:55
[..]
Bei den Tageswerten:
- Inverter_Common_DAY_ENERGY_Value (Wert: 2807.7) und
- Inverter_3P_DAY_ENERGY_Values_1 (Wert: 2630)
[..]
ich meine einige Readings gibt es so eigentlich nicht – schau mal auf den Zeitstempel der Readings. Bei mir ist es so, dass offenbar irgendetwas die Abarbeitung der Befehls-Queue im API-Modul durcheinanderbringt, d.h. die ,,Frage" an den und die ,,Antwort" des Wechselrichters passen nicht zusammen. So entstehen im Laufe der Zeit immer neue Reading-Kreationen  :).

Zitat von: eurofinder am 08 Januar 2022, 09:18:56
@treborst:
[..] Alternativ kannst du natürlich von Fronius die Solar.web Query API nutzen.

Ich habe nach "Solar.web Query API" gesucht. Das scheint mir nicht für den Privatgebrauch gedacht zu sein und ist außerdem kostenpflichtig. Oder habe ich etwas übersehen?

Nachdem ich aktuell keine Werte schreibe, verwende für den Gen24 nur das API-Modul von Michael. Und zusätzlich eine Abfrage der API, die die interne Webseite des WR verwendet. Zum Beispiel verwende ich http://<ip>/components/cache/readable um die Spannungen/Leistung/Strom meiner beiden Strings auszulesen (httpmod und entsprechendem RegEx).  Das könnte man natürlich auch ins Modul einbauen, aber da würde ich gerne erst einmal verstehen was darin genau schief läuft...

Eine weitere Alternative wäre es die Daten mit HTTPMOD aus dem Solarweb selbst zu holen (ohne Query-API). Der Login könnte evtl. eine Hürde sein.

Grüße

hugomckinley

Hi Michael,
danke für dieses Modul. Funktionierte auf Anhieb, bis auf den Bug, dass nach dem Neustart am Morgen nur mehr die PowerFlow.* Readings aktualisiert werden.
Der Workaround mit dem at das das Device ändert funktioniert, jedoch führt dass dazu, dass immer das rote Fragezeichen beim Save config erscheint.

Hast du da schon eine Idee, an was das liegen kann bzw. wie man dieses Problem sauber umgehen kann?

Hugo
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

fred_feuerstein

#101
Zitat von: hugomckinley am 17 Februar 2022, 21:18:09
Hi Michael,
danke für dieses Modul. Funktionierte auf Anhieb, bis auf den Bug, dass nach dem Neustart am Morgen nur mehr die PowerFlow.* Readings aktualisiert werden.
Der Workaround mit dem at das das Device ändert funktioniert, jedoch führt dass dazu, dass immer das rote Fragezeichen beim Save config erscheint.

Was ist das für ein Workaround? Kannst Du mir kurz sagen wo der steht, bzw. wie er funktioniert?
Gruß, Fred

FHEM auf Raspberry PI 3B+ im 7Zoll TouchDisplay Gehäuse, OS: Bullseye, mit Z-Wave RaZberry-Modul, 868CUL (WMBUS), LaCrosseCUL (Temp) und knapp 300 Devices aller Art

hugomckinley

#102
Der hier:
Zitat von: michael.winkler am 21 Januar 2021, 12:53:12
Das mit den Beiden Werten ist noch ein BUG. Werde ich in der nächsten Version fixen.

Das Irgendwann keine Werte mehr komme, habe ich auch. Ursache habe ich leider noch keine gefunden. Bei mir ist es so, dass der Wechselrichter keine Werte mehr liefert.

Behelfe mir aktuell mit einem AT der alle 10 Sekunde prüft ob die Readings ein entsprechendes Alter haben. sind sie zu alt wird das Device kurz neu Modifiziert.

Hier mal der DEF dazu:

+*00:00:10 {
my $PvsAge    = ReadingsAge("pvs.smartmeter","PowerFlow_Site_P_Load",0);
my $AkkuAge   = ReadingsAge("pvs.smartmeter","Storage_0_Controller_Temperature_Cell",0);

# Check PVS Smartmeter
if    ($PvsAge >= 65 || $AkkuAge >= 65) {
if (ReadingsVal("pvs.smartmeter", "restart", "0") ne "1") {
fhem "setreading pvs.smartmeter restart 1";
Log3 "watchdog",3,"pvs.smartmeter start PVS! ReadingAge=$PvsAge";
fhem "modify pvs.smartmeter 10.10.0.170";
}
else {
fhem "setreading pvs.smartmeter restart 0";
}
}
}


Das Fragezeichen im Menü beim "Save config" link. Siehe Screenshot.
----------------------------------------------------
FHEM in TrueNAS-Jail
HMLGW + HM-Komponenten, alexa-fhem, Modbus/TCP, Modbus/RS485, LG-WebOS, Firmata, 1wire, ESP-RGBWW, DaikinAC per WLAN, Shellys, Denon AVR, Fronius WR, Helios Wohnraumlüftung, ...

aicgazi

Super Modul.
Allerdings habe ich auch das Problem dass über Nacht die Funktion eingestellt ist.
ein defmod kann hier nicht die Lösung sein.

Der Wechslrichter geht halt nun mal bei Dunkelheit aus.
Eine nicht Erreichbakeit sollte nicht dazu führen, dass das Modul nicht mehr funktioniert.

Cybers

Zitat von: aicgazi am 28 Februar 2022, 11:23:40
Der Wechslrichter geht halt nun mal bei Dunkelheit aus.
Eine nicht Erreichbakeit sollte nicht dazu führen, dass das Modul nicht mehr funktioniert.

Diese Standby-Funktion bei Dunkelheit lässt sich direkt am Wechselrichter ändern:
Einstellungen -> Display => Nachtmodus ein

Gruß, Sascha
FHEM 6.2 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel