Photovoltaik Eigenverbrauch,Bilanz,Prognose (Kostal Plenticore; KSEM; BYD HV)

Begonnen von ch.eick, 07 Oktober 2020, 16:09:12

Vorheriges Thema - Nächstes Thema

ch.eick

Zitat von: zwölfgang am 28 September 2022, 20:35:08
Hi Christian,
Urlaub vorbei und alles läuft gut. Auch mein go-eCharger ladet den Niro schön mit Überschuss sofern es welchen gibt, wird jetzt halt immer weniger.
Wollte damit nur sagen dass ich immer noch schön dabei bin und für neues immer gerne bereit zum testen.
Super Arbeit von dir.  :)

VG
Wolfgang
Hallo Wolfgang,
vielen Dank, es ist schön mal zu hören, dass noch jemand Spaß an diesem Thread hat :-)
Ich arbeite immer mal wieder an der Steuerung der Verbraucher und stelle sie auf den DOIF Perl Modus um. Doch da habe ich keinen Überblick, ob das überhaupt jemand verwendet hat.
Beim e-Niro habe ich jetzt noch eine Vorwarnung für die Inspektion ins uiTable rein gebaut, damit ich den Kilometer Stand nicht verpasse. Der Hersteller ist da sehr pingelig, wenn man das Jahresintervall oder die 15000 km überschreiten würde. Da jetzt bei mir ein Jahr rum ist war ich bereits zur Wartung, das hat aber nun zur Folge, dass ich unter 30000 km schon wieder hin muss :-(

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

nisi80

Hallöchen, aus Berlin!

Mein System läuft nun auch bereits seit einer Woche und ich versuche alle Komponenten in FHEM zu integrieren.

Vielen Dank an deine/eure super Arbeit!!!
Das hat mir sehr geholfen.

Ich habe nun jedoch 2 Punkte, die noch nicht wie gewünscht funktionieren:

  • Speicher
  • KSME

Ich habe einen BYD HVS am Plenticore und diesen per LAN an das Netzwerk angeschlossen.
Ich war auch schon mal per App und dem eigenen WLAN auf dem Speicher, jedoch wollte ich diesen auch gemäß der Definitionen einbinden. Leider gibt es hier einen Timeout beim Aufruf der referenzierten URL.
Bei einem Test mit curl kann ich das nachvollziehen, da hier keine Antwort zurück kommt.
Wenn man die reine Webadresse aufruft, kommt eine BasicAuth mit Username und Passwort.
Laut der anderen Foren kommt man per LAN ja nur auf den Ser2Net-Adapter um dort dessen Einstellungen ändern zu können.

--> Funktioniert der HVM-Speicher mit der HTTPMOD-Abfrage oder ist mein Speicher nicht unterstützt?

Der KSME kann leider nicht abgefragt werden.
FHEM versucht es immer wieder, scheitert aber scheinbar an der Anmeldung.
Wie kann ich hier korrekt das Passwort für den hoffentlich identischen User "user" hinterlegen?

Vielen Dank!

VG Denis
RaspberryPi mit FHEM 6.1
SMLUSB für den Stromzähler+WMBUS+nanoCUL für den Wasserzähler, 2x ebus-Konverter für die Gastherme und Solarthermie, nanoCUL868: MAXX! Fensterkontakte, RaspberryMatic-CCU: Bewegungsmelder, Rolläden, 1xPlenticore+2xPikoMP (10.4kWp)+BYD(5kW/h)

ch.eick

Hallo Denis

Zitat von: nisi80 am 06 Oktober 2022, 15:38:38
Ich habe einen BYD HVS am Plenticore und diesen per LAN an das Netzwerk angeschlossen.
Ich war auch schon mal per App und dem eigenen WLAN auf dem Speicher, jedoch wollte ich diesen auch gemäß der Definitionen einbinden. Leider gibt es hier einen Timeout beim Aufruf der referenzierten URL.
Bei einem Test mit curl kann ich das nachvollziehen, da hier keine Antwort zurück kommt.
Wenn man die reine Webadresse aufruft, kommt eine BasicAuth mit Username und Passwort.
Laut der anderen Foren kommt man per LAN ja nur auf den Ser2Net-Adapter um dort dessen Einstellungen ändern zu können.

--> Funktioniert der HVM-Speicher mit der HTTPMOD-Abfrage oder ist mein Speicher nicht unterstützt?
Der neuere BYD HVS kann nicht per HTTPMOD abgefragt werden, das geht nur beim BYD HV.
Es ist aber auch nicht wirklich notwendig, da die Steuerung durch den WR vorgenommen wird.
Solltest Du den BYD HVS selber über den Browser abfragen können, dann könnte man das auch mit dem HTTPMOD Modul nachbilden.

Zitat von: nisi80 am 06 Oktober 2022, 15:38:38
Der KSEM kann leider nicht abgefragt werden.
FHEM versucht es immer wieder, scheitert aber scheinbar an der Anmeldung.
Wie kann ich hier korrekt das Passwort für den hoffentlich identischen User "user" hinterlegen?
Bei dem KSEM musst Du ModBus aktivieren, das läuft dann ohne Passwort.

VG
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

nisi80

Vielen Dank, der Slave-Schalter war es!!!!
Nun ist das KSEM-Device aktiv und bekommt die Daten.

Jetzt frage ich noch die Daten meines zweiten und dritten WRs ab (Piko MP Plus), leider per HTTPMOD auf 2 XML-Dateien und hoffe, dass die Werte des Plneticore durch die Werte des KSEM korrekt sind.

Das mit dem Speicher habe ich mir schon gedacht!
Ich dachte nur, dass man eventuell die einzelnen Zellen Monitoren könnte und bei auffälligen Veränderungen der Spannungen und Temperaturen entsprechend reagieren kann.

VG Denis
RaspberryPi mit FHEM 6.1
SMLUSB für den Stromzähler+WMBUS+nanoCUL für den Wasserzähler, 2x ebus-Konverter für die Gastherme und Solarthermie, nanoCUL868: MAXX! Fensterkontakte, RaspberryMatic-CCU: Bewegungsmelder, Rolläden, 1xPlenticore+2xPikoMP (10.4kWp)+BYD(5kW/h)

ch.eick

Zitat von: nisi80 am 06 Oktober 2022, 18:55:28
Vielen Dank, der Slave-Schalter war es!!!!
Nun ist das KSEM-Device aktiv und bekommt die Daten.

Jetzt frage ich noch die Daten meines zweiten und dritten WRs ab (Piko MP Plus), leider per HTTPMOD auf 2 XML-Dateien und hoffe, dass die Werte des Plneticore durch die Werte des KSEM korrekt sind.
Ich meine ein anderer Nutzer hätte das für den Piko IQ auch mit ModBus verwenden können. Das ist die selbe Firmware Datei.
Wenn Du ein Device für den Piko MP Plus baust und den selben Namensstandard verwendest könnten wir das im Wiki mit aufnehmen.
Mein Konstrukt ist bisher nur für zwei WR vorbereitet, lässt sich aber in den userreadings einfach erweitern.
Die SW_* redings sind dann für den Schwarm gedacht und die Steuerungen wären somit kompatiebel.

Mit der jetzigen Firmware des KSEM 2.0.0 kann der Plenticore noch nicht die richtigen Werte anzeigen. Der KSEM zeigt zwar den Hausverbrauch jetzt an, sendet ihn aber noch nicht per ModBus. Das wird bei Kostal wohl noch etwas dauern. Wenn das dann später läuft werde ich die FHEM Devices entsprechend anpassen. Jetzt ist es ein work around :-)

Zitat
Das mit dem Speicher habe ich mir schon gedacht!
Ich dachte nur, dass man eventuell die einzelnen Zellen Monitoren könnte und bei auffälligen Veränderungen der Spannungen und Temperaturen entsprechend reagieren kann.
Das war mein Grundgedanke dabei, leider kann ich nur den ersten Block abfragen, da der interne Web Server etwas störrisch ist.
Somit werde ich in einigen Jahren ein Ticket bei EFT aufmachen, dann sollen die das prüfen :-)

Momentan arbeite ich noch an den Verbraucher Devices, die ich vom DOIF FHEM Modus zum DOIF Perl Modus umbaue. Wenn da interesse besteht melde Dich, da die noch nicht im Wiki sind.

VG   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

nisi80

Hallo Christian,

kann ich gern versuchen, leider kann ich nach einem ersten Telnet-Versuch mit dem Piko MP sagen, dass der den Port 1502 nicht offen hat. Wenn ich das beim Plenticore versuche, kommt wenigstens ein Prompt, der dann bei Eingabe eines Zeichens abbricht.

Aktuell frage ich folgende Dateien per HTTPMOD ab und werte die KeyValue-Pärchen aus:
http://192.168.xxx.xxx/measurements.xml
<?xml version='1.0' encoding='UTF-8'?>
<root>
<Device Name='PIKO 3.6-1 MP plus' Type='Inverter' Platform='Net16' HmiPlatform='HMI17' NominalPower='3600' UserPowerLimit='nan' CountryPowerLimit='nan' Serial='######' OEMSerial='####' BusAddress='1' NetBiosName='####' WebPortal='PIKO Solar Portal' ManufacturerURL='kostal-solar-electric.com' IpAddress='192.168.xxx.xxx' DateTime='2022-10-07T13:45:46' MilliSeconds='288'>
<Measurements>
<Measurement Value='237.3' Unit='V' Type='AC_Voltage'/>
<Measurement Value='1.953' Unit='A' Type='AC_Current'/>
<Measurement Value='463.3' Unit='W' Type='AC_Power'/>
<Measurement Value='463.1' Unit='W' Type='AC_Power_fast'/>
<Measurement Value='49.993' Unit='Hz' Type='AC_Frequency'/>
<Measurement Value='172.6' Unit='V' Type='DC_Voltage'/>
<Measurement Value='2.937' Unit='A' Type='DC_Current'/>
<Measurement Value='345.5' Unit='V' Type='LINK_Voltage'/>
<Measurement Unit='W' Type='GridPower'/>
<Measurement Unit='W' Type='GridConsumedPower'/>
<Measurement Unit='W' Type='GridInjectedPower'/>
<Measurement Unit='W' Type='OwnConsumedPower'/>
<Measurement Value='100.0' Unit='%' Type='Derating'/>
</Measurements>
</Device>
</root>


http://192.168.xxx.xxx/yields.xml
<?xml version='1.0' encoding='UTF-8'?>
<root>
<Device Name='PIKO 3.6-1 MP plus' Type='Inverter' Platform='Net16' HmiPlatform='HMI17' NominalPower='3600' UserPowerLimit='nan' CountryPowerLimit='nan' Serial='#####' OEMSerial='####' BusAddress='1' NetBiosName='###' WebPortal='PIKO Solar Portal' ManufacturerURL='kostal-solar-electric.com' IpAddress='192.168.xxx.xxx' DateTime='2022-10-07T13:48:34' MilliSeconds='467'>
<Yields>
<Yield Type='Produced' Slot='Total' Unit='Wh'>
<YieldValue Value='10581' TimeStamp='2021-04-27T19:00:00'/>
</Yield>
</Yields>
</Device>
</root>


Ich rechne nun, wie von dem User, der das Define im Forum gepostet hat, per statistics-Modul die Yield-Werte für den Tag, Monat und Jahr aus.
Dann habe ich deine UserReadings entsprechend umbenannt, da ein benennen der Statistiken ja nicht möglich ist. Das könnte man aber wiederum mit UserReadings erschlagen.

Ich würde diese HTTPMODs dann entsprechend definieren und hier einmal posten.

PS: könntet ihr das Einstellen der Modus-Slave-Funktion im Wiki ergänzen? Wenn ich drüber gestolpert bin, dann eventuell auch andere  :D
RaspberryPi mit FHEM 6.1
SMLUSB für den Stromzähler+WMBUS+nanoCUL für den Wasserzähler, 2x ebus-Konverter für die Gastherme und Solarthermie, nanoCUL868: MAXX! Fensterkontakte, RaspberryMatic-CCU: Bewegungsmelder, Rolläden, 1xPlenticore+2xPikoMP (10.4kWp)+BYD(5kW/h)

ch.eick

Zitat von: nisi80 am 07 Oktober 2022, 14:02:23
PS: könntet ihr das Einstellen der Modus-Slave-Funktion im Wiki ergänzen? Wenn ich drüber gestolpert bin, dann eventuell auch andere  :D
Das kann ich machen.
EDIT: Erledigt :-)

Die Ausgaben von Deinem WR Model habe ich bisher noch nicht gesehen. Da kann ich nichts zu sagen.
Der Plenticore liefert ja schon von sich aus die ganzen Statistiken, da kann man die bei mehreren entsprechend verrechnen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Zitat von: nisi80 am 07 Oktober 2022, 14:02:23
Aktuell frage ich folgende Dateien per HTTPMOD ab und werte die KeyValue-Pärchen aus:
http://192.168.xxx.xxx/measurements.xml

http://192.168.xxx.xxx/yields.xml

Ich rechne nun, wie von dem User, der das Define im Forum gepostet hat, per statistics-Modul die Yield-Werte für den Tag, Monat und Jahr aus.
Dann habe ich deine UserReadings entsprechend umbenannt, da ein benennen der Statistiken ja nicht möglich ist. Das könnte man aber wiederum mit UserReadings erschlagen.

Ich würde diese HTTPMODs dann entsprechend definieren und hier einmal posten.
Hier habe ich noch was zu HTTPMOD XMF File gefunden
Damit solltest Du die readings aus dem XML File und direkt nach meiner Benennung ins Device bekommen.
Es sollte dann dem WR_2 Slave angepasst sein. Fehlende Statistiken könnte man im zweiten Schritt im Device dann zusätzlich ablegen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

nisi80

Hallo, anbei meine WR_2 Definition, die ich dann so auch für den WR_3 übernehmen werde:


defmod WR_2 HTTPMOD http://192.168.xxx.xxx/measurements.xml 10
attr WR_2 group Wechselrichter
attr WR_2 icon measure_photovoltaic_inst
attr WR_2 reading1Name AC_Power
attr WR_2 reading1Regex Measurement Value='(-?\d*\.?\d*)' Unit='W' Type='AC_Power'
attr WR_2 reading2Name DC_Voltage
attr WR_2 reading2Regex Measurement Value='(-?\d*\.?\d*)' Unit='V' Type='DC_Voltage'
attr WR_2 reading3Name DC_Current
attr WR_2 reading3Regex Measurement Value='(-?\d*\.?\d*)' Unit='A' Type='DC_Current'
attr WR_2 reading4Name AC_Power_fast
attr WR_2 reading4Regex Measurement Value='(-?\d*\.?\d*)' Unit='W' Type='AC_Power_fast'
attr WR_2 reading5Name AC_Frequency
attr WR_2 reading5Regex Measurement Value='(-?\d*\.?\d*)' Unit='Hz' Type='AC_Frequency'
attr WR_2 reading6Name AC_Current
attr WR_2 reading6Regex Measurement Value='(-?\d*\.?\d*)' Unit='A' Type='AC_Current'
attr WR_2 reading7Name AC_Voltage
attr WR_2 reading7Regex Measurement Value='(-?\d*\.?\d*)' Unit='V' Type='AC_Voltage'
attr WR_2 room Strom->Photovoltaik
attr WR_2 stateFormat AC_Power W
attr WR_2 userReadings Inverter_Generation_P_Actual:AC_Power.* {round(ReadingsVal($NAME,"AC_Power",0),0);;},\
Total_AC_Active_P:AC_Power.* {round(ReadingsVal($NAME,"AC_Power",0),0);;},\
Total_DC_P:[DC_Current|DC_Voltage].* {round((ReadingsVal($NAME,"DC_Current",0)*(ReadingsVal($NAME,"DC_Voltage",0))),0);;},\
Total_DC_P_sumOfAllPVInputs:Total_DC_P.* {ReadingsVal($NAME,"Total_DC_P",0)},\
Daily_yield:AC_Power.* {ReadingsVal("WR_2_yields","statYieldValueDay",0)},\
Monthly_yield:AC_Power.* {ReadingsVal("WR_2_yields","statYieldValueMonth",0)},\
Yearly_yield:AC_Power.* {ReadingsVal("WR_2_yields","statYieldValueYear",0)},\
Total_yield:AC_Power.* {ReadingsVal("WR_2_yields","YieldValue",0)},\
Total_DC_Energy_From_PV1:AC_Power.* {ReadingsVal("WR_2_yields","YieldValue",0)},\
Total_DC_PV_Energy_sumOfAllPVInputs:AC_Power.* {ReadingsVal("WR_2_yields","YieldValue",0)}


Dazu kommt noch ein Yield-Device:


defmod WR_2_yields HTTPMOD http://192.168.xxx.xxx/yields.xml 60
attr WR_2_yields event-on-change-reading Ertrag_PV
attr WR_2_yields group Helferfunktionen
attr WdR_2_yields icon measure_photovoltaic_inst
attr WR_2_yields reading1Name YieldValue
attr WR_2_yields reading1Regex YieldValue Value='(-?\d*)'
attr WR_2_yields room Strom->Photovoltaik
attr WR_2_yields stateFormat {my $PVDay = ReadingsVal($name,"statYieldValueDay",0)/1000;;\
my $PVMonth = ReadingsVal($name,"statYieldValueMonth",0)/1000;;\
my $PVYear = ReadingsVal($name,"statYieldValueYear",0)/1000;;\
my $PVTotal = ReadingsVal($name,"YieldValue",0)/1000;;\
"Erträge: ".$PVDay."kW/h Tag / ".$PVMonth."kW/h Monat / ".$PVYear."kW/h Jahr / ".$PVTotal."kW/h Gesamt"\
}
attr WR_2_yields userReadings Total_DC_Energy_From_PV1:YieldValue.* {ReadingsVal($name,"YieldValue",0)}
attr WR_2_yields verbose 0


Und eines, welches die Statistiken erzeugt:


defmode stat_WR_2 statistics WR_2_yields
attr stat_WR_2 deltaReadings YieldValue
attr stat_WR_2 group Helferfunktionen
attr stat_WR_2 room Strom->Photovoltaik
attr stat_WR_2 singularReadings WR_2_yields:YieldValue:Delta:Day|WR_2_yields:YieldValue:Delta:Month|WR_2_yields:YieldValue:Delta:Year


Dazu habe ich die Userreadings deines WR_1 abgeändert, dass dieser noch einen dritten WR in die Auswertung mit einbezieht:


attr WR_1 userReadings Total_PV_P_reserve:Total_DC_P.* {my $reserve = ReadingsVal($NAME,"Total_DC_P_sumOfAllPVInputs",0) * 0.90 - ReadingsVal($NAME,"Home_own_consumption_from_PV",0);;;; ($reserve lt 0)? 0 : round($reserve,0)  },\
\
Actual_Battery_charge_-minus_or_discharge_-plus_P:[Battery_voltage|Actual_Battery_charge_-minus_or_discharge_-plus_I].* {round((ReadingsVal($NAME,"Actual_Battery_charge_-minus_or_discharge_-plus_I",0)*ReadingsVal($NAME,"Battery_voltage",0)),0)},\
\
Total_DC_P_Max:[Total_DC_P_sumOfAllPVInputs|Actual_Battery_charge_-minus_or_discharge_-plus_P].* { my $Bat_P = ReadingsVal($NAME,"Actual_Battery_charge_-minus_or_discharge_-plus_P",0);;;; ($Bat_P gt 0)? round(ReadingsVal($NAME,"Total_DC_P_sumOfAllPVInputs",0) + $Bat_P,0) : round(ReadingsVal($NAME,"Total_DC_P_sumOfAllPVInputs",0),0) },\
\
Actual_Battery_charge_usable_P:[Act_state_of_charge|Battery_MinSOC].* {my $x = (ReadingsVal($NAME,"Battery_work_capacity",0)*(ReadingsVal($NAME,"Act_state_of_charge",0)-ReadingsVal($NAME,"Battery_MinSOC",0))/100);;;; ($x lt 0)? 0 : round($x,0) },\
\
SW_Inverter_Generation_P_Actual:Inverter_Generation_P_Actual.* {round(ReadingsVal($NAME,"Inverter_Generation_P_Actual",0)+ReadingsVal("WR_2","Inverter_Generation_P_Actual",0)+ReadingsVal("WR_3","Inverter_Generation_P_Actual",0),0)},\
\
SW_Home_own_consumption:[Total_Active_P_EM:|Total_AC_Active_P:].* {round(ReadingsVal($NAME,"Total_Active_P_EM",0)+ReadingsVal($NAME,"Total_AC_Active_P",0),0)},\
SW_Total_AC_Active_P:Total_AC_Active_P:.*  {round(ReadingsVal($NAME,"Total_AC_Active_P",0),0)+ReadingsVal("WR_2","Total_AC_Active_P",0)+ReadingsVal("WR_3","Total_AC_Active_P",0)},\
\
SW_Total_Active_P_EM:Total_Active_P_EM:.* {round(ReadingsVal($NAME,"Total_Active_P_EM",0),0)},\
\
SW_Total_DC_P:Total_DC_P:.* {round(ReadingsVal($NAME,"Total_DC_P",0)+ReadingsVal("WR_2","Total_DC_P",0)+ReadingsVal("WR_3","Total_DC_P",0),0) },\
\
SW_Total_DC_P_sumOfAllPVInputs:Total_DC_P_sumOfAllPVInputs.* {round(ReadingsVal($NAME,"Total_DC_P_sumOfAllPVInputs",0)+ReadingsVal("WR_2","Total_DC_P_sumOfAllPVInputs",0)+ReadingsVal("WR_3","Total_DC_P_sumOfAllPVInputs",0),0) },\
\
SW_Total_PV_P_reserve:SW_Total_DC_P_sumOfAllPVInputs.* {my $reserve = ReadingsVal($NAME,"SW_Total_DC_P_sumOfAllPVInputs",0) * 0.90 - ReadingsVal($NAME,"SW_Home_own_consumption",0);;;; ($reserve lt 0)? 0 : round($reserve,0)  },\
\
SW_Total_DC_P_Max:SW_Total_DC_P_sumOfAllPVInputs.* { my $Bat_out = (ReadingsVal($NAME,"Actual_Battery_charge_-minus_or_discharge_-plus_I",0)*ReadingsVal($NAME,"Battery_voltage",0));;;; ($Bat_out gt 0)? round(ReadingsVal($NAME,"SW_Total_DC_P_sumOfAllPVInputs",0) + $Bat_out,0) : round(ReadingsVal($NAME,"SW_Total_DC_P_sumOfAllPVInputs",0),0) },\
\
SW_Yield_Daily:Daily_yield.* { round(ReadingsVal($NAME,"Daily_yield",0)+ReadingsVal("WR_2","Daily_yield",0)+ReadingsVal("WR_3","Daily_yield",0),0) },\
SW_Yield_Monthly:Monthly_yield.* { round(ReadingsVal($NAME,"Monthly_yield",0)+ReadingsVal("WR_2","Monthly_yield",0)+ReadingsVal("WR_3","Monthly_yield",0),0) },\
SW_Yield_Yearly:Yearly_yield.* { round(ReadingsVal($NAME,"Yearly_yield",0)+ReadingsVal("WR_2","Yearly_yield",0)+ReadingsVal("WR_3","Yearly_yield",0),0) },\
SW_Yield_Total:Total_yield.* monotonic { round(ReadingsVal($NAME,"Total_yield",0)+ReadingsVal("WR_2","Total_yield",0)+ReadingsVal("WR_3","Total_yield",0),0) },\
\
SW_Home_own_consumption_from_PV:[Total_Active_P_EM|SW_Home_own_consumption:|Home_own_consumption_from_grid|Home_own_consumption_from_Battery].* { (ReadingsVal($NAME,"Total_Active_P_EM",0) ge 0) ? ReadingsVal($NAME,"SW_Home_own_consumption",0) - ReadingsVal($NAME,"Home_own_consumption_from_grid",0) - ReadingsVal($NAME,"Home_own_consumption_from_Battery",0) :  ReadingsVal($NAME,"SW_Home_own_consumption",0) - ReadingsVal($NAME,"Home_own_consumption_from_Battery",0);;;; },\
\
SW_Home_own_consumption_from_Battery:[SW_Home_own_consumption_from_PV|Home_own_consumption_from_Battery].* { ReadingsVal($NAME,"Home_own_consumption_from_Battery",0) },\
SW_Home_own_consumption_from_grid:[SW_Home_own_consumption_from_PV|Home_own_consumption_from_grid].* { ReadingsVal($NAME,"Home_own_consumption_from_grid",0) },\
\
\
SW_Battery_Total_AC_ChargeEnergy_ACsideToBattery:Battery_Total_AC_ChargeEnergy_ACsideToBattery.* monotonic { round(ReadingsVal($NAME,"Battery_Total_AC_ChargeEnergy_ACsideToBattery",0),0) },\
SW_Battery_Total_AC_ChargeEnergy_gridToBattery:Battery_Total_AC_ChargeEnergy_gridToBattery.* monotonic { round(ReadingsVal($NAME,"Battery_Total_AC_ChargeEnergy_gridToBattery",0),0) },\
SW_Battery_Total_AC_DischargeEnergy_BatteryToGrid:Battery_Total_AC_DischargeEnergy_BatteryToGrid.* monotonic { round(ReadingsVal($NAME,"Battery_Total_AC_DischargeEnergy_BatteryToGrid",0),0) },\
SW_Battery_Total_DC_ChargeEnergy_DCsideToBattery:Battery_Total_DC_ChargeEnergy_DCsideToBattery.* monotonic { round(ReadingsVal($NAME,"Battery_Total_DC_ChargeEnergy_DCsideToBattery",0),0) },\
SW_Battery_Total_DC_DischargeEnergy_DCsideFromBattery:Battery_Total_DC_DischargeEnergy_DCsideFromBattery.* monotonic { round(ReadingsVal($NAME,"Battery_Total_DC_DischargeEnergy_DCsideFromBattery",0),0) },\
\
SW_Total_AC_Energy_ACsideToGrid:Total_AC_Energy_ACsideToGrid.* monotonic { round(ReadingsVal($NAME,"Total_AC_Energy_ACsideToGrid",0)+ReadingsVal("WR_2","Total_AC_Energy_ACsideToGrid",0)+ReadingsVal("WR_3","Total_AC_Energy_ACsideToGrid",0),0) },\
\
SW_Total_DC_Energy_From_PV1:Total_DC_Energy_From_PV1.* monotonic { round(ReadingsVal($NAME,"Total_DC_Energy_From_PV1",0),0) },\
SW_Total_DC_Energy_From_PV2:Total_DC_Energy_From_PV2.* monotonic { round(ReadingsVal($NAME,"Total_DC_Energy_From_PV2",0),0) },\
SW_Total_DC_Energy_From_PV3:Total_DC_Energy_From_PV3.* monotonic { round(ReadingsVal($NAME,"Total_DC_Energy_From_PV3",0),0) },\\
SW_Total_DC_Energy_From_PV4:Total_DC_Energy_From_PV1.* monotonic { round(ReadingsVal("WR_2","Total_DC_Energy_From_PV1",0),0) },\\
\
SW_Total_DC_PV_Energy_sumOfAllPVInputs:Total_DC_PV_Energy_sumOfAllPVInputs.* monotonic { round(ReadingsVal($NAME,"Total_DC_PV_Energy_sumOfAllPVInputs",0)+ReadingsVal("WR_2","Total_DC_PV_Energy_sumOfAllPVInputs",0)+ReadingsVal("WR_3","Total_DC_PV_Energy_sumOfAllPVInputs",0),0) },\
SW_Total_home_consumption_Battery:Total_home_consumption_Battery.* monotonic { round(ReadingsVal($NAME,"Total_home_consumption_Battery",0),0) },\
SW_Total_home_consumption_Grid:Total_home_consumption_Grid.* monotonic { round(ReadingsVal($NAME,"Total_home_consumption_Grid",0),0) },\
SW_Total_home_consumption_PV:Total_home_consumption_PV.* monotonic { round(ReadingsVal($NAME,"Total_home_consumption_PV",0),0) }\


PS: warum wird bei mir, wenn die Auth_me Funktion aufgerufen wird, mein User im Webportal des Plenticore gesperrt und ich muss ein neues Passwort mit dem Masterkey erzeugen? Ist das bei euch auch so, oder habe ich hier einen Fehler?

VG Denis
RaspberryPi mit FHEM 6.1
SMLUSB für den Stromzähler+WMBUS+nanoCUL für den Wasserzähler, 2x ebus-Konverter für die Gastherme und Solarthermie, nanoCUL868: MAXX! Fensterkontakte, RaspberryMatic-CCU: Bewegungsmelder, Rolläden, 1xPlenticore+2xPikoMP (10.4kWp)+BYD(5kW/h)

ch.eick

Zitat von: nisi80 am 09 Oktober 2022, 14:15:01
Hallo, anbei meine WR_2 Definition, die ich dann so auch für den WR_3 übernehmen werde:


defmod WR_2 HTTPMOD http://192.168.xxx.xxx/measurements.xml 10
attr WR_2 group Wechselrichter
attr WR_2 icon measure_photovoltaic_inst
attr WR_2 reading1Name AC_Power
attr WR_2 reading1Regex Measurement Value='(-?\d*\.?\d*)' Unit='W' Type='AC_Power'
attr WR_2 reading2Name DC_Voltage
attr WR_2 reading2Regex Measurement Value='(-?\d*\.?\d*)' Unit='V' Type='DC_Voltage'
attr WR_2 reading3Name DC_Current
attr WR_2 reading3Regex Measurement Value='(-?\d*\.?\d*)' Unit='A' Type='DC_Current'
attr WR_2 reading4Name AC_Power_fast
attr WR_2 reading4Regex Measurement Value='(-?\d*\.?\d*)' Unit='W' Type='AC_Power_fast'
attr WR_2 reading5Name AC_Frequency
attr WR_2 reading5Regex Measurement Value='(-?\d*\.?\d*)' Unit='Hz' Type='AC_Frequency'
attr WR_2 reading6Name AC_Current
attr WR_2 reading6Regex Measurement Value='(-?\d*\.?\d*)' Unit='A' Type='AC_Current'
attr WR_2 reading7Name AC_Voltage
attr WR_2 reading7Regex Measurement Value='(-?\d*\.?\d*)' Unit='V' Type='AC_Voltage'


Hallo Denis,
ich fände es toll, wenn Du versuchen würdest die Namen der readings noch an die bestehenden Namen anzupassen. Das führt ansonsten zu Verwirrungen und Inkonsistenzen.

Als Beispiele

AC_Power = P_AC
DC_Voltage = V_DC
AC_Current = I_AC

Das mag am Anfang etwas unverständlich sein, ist aber später in der Datenbank und bei Berechnungen übersichtlicher.
Ich hatte auch mit den Langnamen begonnen und mich stark an die Vorgaben von Kostal gehalten, jedoch wurde das sehr
schnell unübersichtlich und bei Abfragen in der Datenbank ziemlich länglich.

Wenn wir das auch ind Wiki aufnehmen möchten, sollte es aussehen wie aus einem Guss, da ansonsten jede Menge Fragen auftauchen werden.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

nisi80

Hallo Christian,

anbei die korrigierten Benennungen, mit der Hoffnung, dass diese übereinstimmen:

defmod WR_2 HTTPMOD http://192.168.xxx.xxx/measurements.xml 10
attr WR_2 group Wechselrichter
attr WR_2 icon measure_photovoltaic_inst
attr WR_2 reading1Name P_AC
attr WR_2 reading1Regex Measurement Value='(-?\d*\.?\d*)' Unit='W' Type='AC_Power'
attr WR_2 reading2Name U_DC1
attr WR_2 reading2Regex Measurement Value='(-?\d*\.?\d*)' Unit='V' Type='DC_Voltage'
attr WR_2 reading3Name I_DC1
attr WR_2 reading3Regex Measurement Value='(-?\d*\.?\d*)' Unit='A' Type='DC_Current'
attr WR_2 reading4Name AC_Power_fast
attr WR_2 reading4Regex Measurement Value='(-?\d*\.?\d*)' Unit='W' Type='AC_Power_fast'
attr WR_2 reading5Name Frequency_EM
attr WR_2 reading5Regex Measurement Value='(-?\d*\.?\d*)' Unit='Hz' Type='AC_Frequency'
attr WR_2 reading6Name I_L1
attr WR_2 reading6Regex Measurement Value='(-?\d*\.?\d*)' Unit='A' Type='AC_Current'
attr WR_2 reading7Name U_L1
attr WR_2 reading7Regex Measurement Value='(-?\d*\.?\d*)' Unit='V' Type='AC_Voltage'
attr WR_2 room Strom->Photovoltaik
attr WR_2 stateFormat P_AC W
attr WR_2 userReadings Inverter_Generation_P_Actual:AC_Power.* {round(ReadingsVal($NAME,"P_AC",0),0);;},\
Total_AC_Active_P:AC_Power.* {round(ReadingsVal($NAME,"P_AC",0),0);;},\
Total_DC_P:[I_DC1|U_DC1].* {round((ReadingsVal($NAME,"I_DC1",0)*(ReadingsVal($NAME,"U_DC1",0))),0);;},\
Total_DC_P_sumOfAllPVInputs:Total_DC_P.* {ReadingsVal($NAME,"Total_DC_P",0)},\
Daily_yield:P_AC.* {ReadingsVal("WR_2_yields","statYieldValueDay",0)},\
Monthly_yield:P_AC.* {ReadingsVal("WR_2_yields","statYieldValueMonth",0)},\
Yearly_yield:P_AC.* {ReadingsVal("WR_2_yields","statYieldValueYear",0)},\
Total_yield:P_AC.* {ReadingsVal("WR_2_yields","YieldValue",0)},\
Total_DC_Energy_From_PV1:P_AC.* {ReadingsVal("WR_2_yields","YieldValue",0)},\
Total_DC_PV_Energy_sumOfAllPVInputs:P_AC.* {ReadingsVal("WR_2_yields","YieldValue",0)}


VG Denis
RaspberryPi mit FHEM 6.1
SMLUSB für den Stromzähler+WMBUS+nanoCUL für den Wasserzähler, 2x ebus-Konverter für die Gastherme und Solarthermie, nanoCUL868: MAXX! Fensterkontakte, RaspberryMatic-CCU: Bewegungsmelder, Rolläden, 1xPlenticore+2xPikoMP (10.4kWp)+BYD(5kW/h)

ch.eick

Zitat von: nisi80 am 10 Oktober 2022, 10:22:47
Hallo Christian,

anbei die korrigierten Benennungen, mit der Hoffnung, dass diese übereinstimmen:

defmod WR_2 HTTPMOD http://192.168.xxx.xxx/measurements.xml 10
attr WR_2 group Wechselrichter
attr WR_2 icon measure_photovoltaic_inst
attr WR_2 reading1Name P_AC
attr WR_2 reading1Regex Measurement Value='(-?\d*\.?\d*)' Unit='W' Type='AC_Power'
attr WR_2 reading2Name U_DC1
attr WR_2 reading2Regex Measurement Value='(-?\d*\.?\d*)' Unit='V' Type='DC_Voltage'
attr WR_2 reading3Name I_DC1
attr WR_2 reading3Regex Measurement Value='(-?\d*\.?\d*)' Unit='A' Type='DC_Current'
attr WR_2 reading4Name AC_Power_fast
attr WR_2 reading4Regex Measurement Value='(-?\d*\.?\d*)' Unit='W' Type='AC_Power_fast'
attr WR_2 reading5Name Frequency_EM
attr WR_2 reading5Regex Measurement Value='(-?\d*\.?\d*)' Unit='Hz' Type='AC_Frequency'
attr WR_2 reading6Name I_L1
attr WR_2 reading6Regex Measurement Value='(-?\d*\.?\d*)' Unit='A' Type='AC_Current'
attr WR_2 reading7Name U_L1
attr WR_2 reading7Regex Measurement Value='(-?\d*\.?\d*)' Unit='V' Type='AC_Voltage'
attr WR_2 room Strom->Photovoltaik
attr WR_2 stateFormat AC_Power W
attr WR_2 userReadings Inverter_Generation_P_Actual:AC_Power.* {round(ReadingsVal($NAME,"P_AC",0),0);;},\
Total_AC_Active_P:AC_Power.* {round(ReadingsVal($NAME,"P_AC",0),0);;},\
Total_DC_P:[I_DC1|U_DC1].* {round((ReadingsVal($NAME,"I_DC1",0)*(ReadingsVal($NAME,"U_DC1",0))),0);;},\
Total_DC_P_sumOfAllPVInputs:Total_DC_P.* {ReadingsVal($NAME,"Total_DC_P",0)},\
Daily_yield:AC_Power.* {ReadingsVal("WR_2_yields","statYieldValueDay",0)},\
Monthly_yield:AC_Power.* {ReadingsVal("WR_2_yields","statYieldValueMonth",0)},\
Yearly_yield:AC_Power.* {ReadingsVal("WR_2_yields","statYieldValueYear",0)},\
Total_yield:AC_Power.* {ReadingsVal("WR_2_yields","YieldValue",0)},\
Total_DC_Energy_From_PV1:AC_Power.* {ReadingsVal("WR_2_yields","YieldValue",0)},\
Total_DC_PV_Energy_sumOfAllPVInputs:AC_Power.* {ReadingsVal("WR_2_yields","YieldValue",0)}


VG Denis
Hallo Denis,
das sieht doch schon gut aus :-)

Frequency_EM = Grid_frequency
Im userreading ist noch AC_Power als Trigger verwendet.
Auch der Trigger Total_DC_P.* scheint bei Dir nicht vorhanden zu sein.

Da Du für den WR zwei XML Abfragen hast könntest Du diese in einem HTTPMOD eintragen und dort auch als folge aneinander ketten. Dann wird es ein gemeinsames Device mit den yield Abfragen. Dafür gibt es ein Attribut get*FollowGet und Du sparst Dir das WR_2_yields Device, was den Zusammenhang besser deutlich macht.

EDIT: Ein Abfrage Intervall von 10 Sekunden ist bei mir bisher nicht notwendig gewesen, da hättest Du nur die x Fache Menge an Daten, jedoch keinen wirklichen Nutzen daraus.
EDIT: Achtung, das hier "Total_DC_P_sumOfAllPVInputs:Total_DC_P.*" könnte zu einem Loop führen, bitte teste das besser mal genauer, da Total_DC_P_sumOfAllPVInputs auch ein Event auslöst und auch in die Maske passt.

VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Zitat von: nisi80 am 09 Oktober 2022, 14:15:01
PS: warum wird bei mir, wenn die Auth_me Funktion aufgerufen wird, mein User im Webportal des Plenticore gesperrt und ich muss ein neues Passwort mit dem Masterkey erzeugen? Ist das bei euch auch so, oder habe ich hier einen Fehler?
Hallo Denis,
dass passiert eigentlich nur, wenn über kurze Zeit mehrfach das Passwort falsch gewesen ist.
Ich setze bei mir das Passwort immer gleich dem Code auf dem Geräte Aufkleber.
VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

nisi80

Vielen Dank für den Hinweis!
Nach einem erneuten Setzen des Passwortes war auch das Flag für authenticated in den Readings TRUE.
Jetzt bleibt der Nutzer erhalten.

Super!
RaspberryPi mit FHEM 6.1
SMLUSB für den Stromzähler+WMBUS+nanoCUL für den Wasserzähler, 2x ebus-Konverter für die Gastherme und Solarthermie, nanoCUL868: MAXX! Fensterkontakte, RaspberryMatic-CCU: Bewegungsmelder, Rolläden, 1xPlenticore+2xPikoMP (10.4kWp)+BYD(5kW/h)

nisi80

Nun ist mir aufgefallen, dass die Werte der drei Spalten 2 (heute), 3 (Monat) und 4 (Jahr) im WR_1_API nicht aktualisiert werden.
Hier wird ja der Timestamp z.B. des Autarkie per Tag Wertes ausgelesen und der steht bei mir aktuell immer noch auf dem 6.10.2022.

Alle SW_Statistic_EnergyHome* Readings werden nicht geupdatet.

Ich habe die URL, die hinter der Funktion liegt auch einmal per curl aufgerufen:
curl http://192.168.xxx.xxx/api/v1/processdata/scb:statistic:EnergyFlow
Und es kommt als Antwort:
[{"processdata":[],"moduleid":"scb:statistic:EnergyFlow"}]
Das heißt, die Statistiken werden im Plenticore berechnet und dann abgerufen oder übermittelt?

Jedenfalls hat es ja am 6.10. schon mal funktioniert, aber seitdem nicht mehr.

Könnt ihr mir helfen herauszufinden, was hier das Problem ist?
Eingeloggt ist der User jetzt und der Account wird auch nicht mehr gesperrt.

Vielen Dank!
RaspberryPi mit FHEM 6.1
SMLUSB für den Stromzähler+WMBUS+nanoCUL für den Wasserzähler, 2x ebus-Konverter für die Gastherme und Solarthermie, nanoCUL868: MAXX! Fensterkontakte, RaspberryMatic-CCU: Bewegungsmelder, Rolläden, 1xPlenticore+2xPikoMP (10.4kWp)+BYD(5kW/h)