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: plin am 02 Juni 2021, 09:04:32
Ich wohne im Hang, Tal in Richtung Osten. Die PV-Anlage ist in Richtung SW ausgerichtet und Nachmittags schlägt irgendwann der Schatten des Berges zu.
Okay, das ist suboptimal für PV :-(
Da musste auf die andere Seite auch noch PV drauf bauen.
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

Es gab mal wieder ein kleines Update beim WR_[1|2]

jetzt ist Inverter_Generation_P_Actual auch definiert

attr WR_1 comment Version 2021.06.02 14:00\
Kostal Plenticore 10 Plus mit BYD Speicher

attr WR_1 event-on-change-reading Act_state_of_charge,Actual_Battery_charge_-minus_or_discharge_-plus_I,Actual_Battery_charge_-minus_or_discharge_-plus_P,Actual_Battery_charge_usable_P,Battery_Total.*,Battery_charge.*,Battery_gross.*,Battery_temperature,Home_own_consumption.*,P_DC1,P_DC2,Total_DC_P.*,Total_DC_PV_Energy.*,Total_PV_P_reserve,Solar_.*,Total_.*,SW_.*,.*_yield,Inverter_state.*,Inverter_Generation_P_Actual.*

attr WR_1 obj-h575-reading Inverter_Generation_P_Actual
attr WR_1 obj-h575-unpack N

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)  },\
\
Total_DC_P_Max:Total_DC_P.* { 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,"Total_DC_P_sumOfAllPVInputs",0) + $Bat_out,0) : round(ReadingsVal($NAME,"Total_DC_P_sumOfAllPVInputs",0),0) },\
\
Actual_Battery_charge_-minus_or_discharge_-plus_P: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)},\
\
Actual_Battery_charge_usable_P:Act_state_of_charge.* {my $x = (ReadingsVal($NAME,"Battery_work_capacity",0)*(ReadingsVal($NAME,"Act_state_of_charge",0)-10)/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),0) },\
\
SW_Home_own_consumption:Total_AC_Active_P.* {round(ReadingsVal($NAME,"Total_Active_P_EM",0)+ReadingsVal($NAME,"Total_AC_Active_P",0)+ReadingsVal("WR_2","Total_AC_Active_P",0),0)},\
SW_Total_AC_Active_P:Total_AC_Active_P.*  {round(ReadingsVal($NAME,"Total_AC_Active_P",0)+ReadingsVal("WR_2","Total_AC_Active_P",0),0)},\
\
\
SW_Total_DC_P:Total_DC_P.* {round(ReadingsVal($NAME,"Total_DC_P",0)+ReadingsVal("WR_2","Total_DC_P",0),0) },\
\
SW_Total_DC_P_sumOfAllPVInputs:Total_DC_P.* {round(ReadingsVal($NAME,"Total_DC_P_sumOfAllPVInputs",0)+ReadingsVal("WR_2","Total_DC_P_sumOfAllPVInputs",0),0) },\
\
SW_Total_PV_P_reserve:SW_Total_DC_P.* {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.* { 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),0) },\
SW_Yield_Monthly:Monthly_yield.* { round(ReadingsVal($NAME,"Monthly_yield",0)+ReadingsVal("WR_2","Monthly_yield",0),0) },\
SW_Yield_Yearly:Yearly_yield.* { round(ReadingsVal($NAME,"Yearly_yield",0)+ReadingsVal("WR_2","Yearly_yield",0),0) },\
SW_Yield_Total:Total_yield.* { round(ReadingsVal($NAME,"Total_yield",0)+ReadingsVal("WR_2","Total_yield",0),0) },\
\
SW_Home_own_consumption_from_PV:SW_Home_own_consumption.* { (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.* { ReadingsVal($NAME,"Home_own_consumption_from_Battery",0) },\
SW_Home_own_consumption_from_grid:SW_Home_own_consumption_from_PV.* { ReadingsVal($NAME,"Home_own_consumption_from_grid",0) }\

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

Hallo zusammen,
wer von der 70% Abregelung betroffen ist kann dies nun mit P_limit_from_EVU loggen und erkennen.
Ob das bei einem einzelnen WR auch geht kann ich leider nicht mehr rausfinden, da wäre es schön, wenn Ihr Euch meldet.


attr WR_1 DbLogInclude Act_state_of_charge,Actual_Battery_charge_-minus_or_discharge_-plus_P,Actual_Battery_charge_usable_P,Battery_Total.*,Battery_charge.*,Battery_gross.*,Battery_temperature,P_DC1,P_DC2,Total_DC_PV_Energy_sumOfAllPVInputs,Total_Active_P_EM,Solar_Calculation,Solar_Calculation_fc0_4h,Solar_Calculation_fc0_day,Solar_Calculation_fc0_rest,Solar_Correction.*,Solar_Cloud,Solar_East_Covered,Solar_Rain,Solar_SolarRadiation,Solar_Temp,Solar_WR_.*,Solar_middayhigh.*,SW_.*,P_limit_from_EVU.*

attr WR_1 event-on-change-reading Act_state_of_charge,Actual_Battery_charge_-minus_or_discharge_-plus_I,Actual_Battery_charge_-minus_or_discharge_-plus_P,Actual_Battery_charge_usable_P,Battery_Total.*,Battery_charge.*,Battery_gross.*,Battery_temperature,Home_own_consumption.*,P_DC1,P_DC2,Total_DC_P.*,Total_DC_PV_Energy.*,Total_PV_P_reserve,Solar_.*,Total_.*,SW_.*,.*_yield,Inverter_state.*,Inverter_Generation_P_Actual.*,P_limit_from_EVU.*

attr WR_1 obj-h122-reading P_limit_from_EVU


attr WR_2 DbLogInclude P_DC1,P_DC2,P_DC3,Total_DC_P.*,P_limit_from_EVU.*

attr WR_2 event-on-change-reading P_DC1,P_DC2,P_DC3,Total_DC_P.*,Total_DC_PV_Energy.*,Total_AC_Active_P.*,Inverter_state.*,Inverter_Generation_P_Actual.*,P_limit_from_EVU.*

attr WR_2 obj-h122-reading P_limit_from_EVU


Im DbLog sieht man dann wieviel Prozent der WR Leistung freigegeben sind WR_1 hat bei mit 10 kWp und WR_2 hat 7 kWp

MySQL [fhem]> SELECT TIMESTAMP,DEVICE,READING,VALUE   FROM history WHERE DEVICE like 'WR_%' AND READING='P_limit_from_EVU' AND  TIMESTAMP > curdate();
+---------------------+--------+------------------+--------+
| TIMESTAMP           | DEVICE | READING          | VALUE  |
+---------------------+--------+------------------+--------+
| 2021-06-08 08:39:01 | WR_1   | P_limit_from_EVU | 100.00 |
| 2021-06-08 08:49:01 | WR_2   | P_limit_from_EVU | 100.00 |
| 2021-06-08 12:04:01 | WR_1   | P_limit_from_EVU | 84.00  |
| 2021-06-08 12:04:01 | WR_2   | P_limit_from_EVU | 84.00  |
| 2021-06-08 12:05:01 | WR_1   | P_limit_from_EVU | 57.00  |
| 2021-06-08 12:05:01 | WR_2   | P_limit_from_EVU | 57.00  |
| 2021-06-08 12:06:08 | WR_1   | P_limit_from_EVU | 39.00  |     <<< 10000 * 0.39 = 3900
| 2021-06-08 12:06:08 | WR_2   | P_limit_from_EVU | 39.00  |     <<<  7000 * 0.39 = 2730    => 6630 - 1630 (Hausverbrauch) = 5000 W (was ich testweise eingestellt hatte)
| 2021-06-08 12:07:01 | WR_1   | P_limit_from_EVU | 100.00 |
| 2021-06-08 12:07:01 | WR_2   | P_limit_from_EVU | 100.00 |
+---------------------+--------+------------------+--------+


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

ozwo

Hallo Christian,

ZitatOb das bei einem einzelnen WR auch geht kann ich leider nicht mehr rausfinden, da wäre es schön, wenn Ihr Euch meldet.

Ich habe zwar nur einen WR und sehe auch den Wert (100.00) im Reading. Da ich aber 9,9kWp auf einem Ost-West-Dach habe, wird das Reading auch wahrscheinlich keine anderen Werte als 100 annehmen...

Grüße
Oliver

ch.eick

Zitat von: ozwo am 08 Juni 2021, 17:05:10
Ich habe zwar nur einen WR und sehe auch den Wert (100.00) im Reading. Da ich aber 9,9kWp auf einem Ost-West-Dach habe, wird das Reading auch wahrscheinlich keine anderen Werte als 100 annehmen...
Wenn Du unter Info im WR ein Event für Abriegelung siehst, dann sollte der wert auch unter 100% gehen.
Ich henke Du hast sicher 7000 W als Abregelungsgrenze im WR eingetragen. Die Regelung über den KSEM ist nur bei mehreren WR notwendig.
Testen könntes Du es wenn im WR z.B. 3000 W eingetragen wird.
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

plin

Hi Christian,

meine KI-Vorhersage liefert jetzt zwar bei stabilen Wetterlagen richtig schöne Vorhersagen, ich realisere aber gerade, dass die ja die PV-Leistung bei 70% Drosselung gelernt hat ...

Gibt es bei den vielden Messwerten die Plenticore/KSEM liefern einen Wert für "Drosselung aktiv"?

VG Peter
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

ch.eick

Zitat von: plin am 11 Juni 2021, 09:40:52
meine KI-Vorhersage liefert jetzt zwar bei stabilen Wetterlagen richtig schöne Vorhersagen, ich realisere aber gerade, dass die ja die PV-Leistung bei 70% Drosselung gelernt hat ...

Gibt es bei den vieldn Messwerten die Plenticore/KSEM liefern einen Wert für "Drosselung aktiv"?
Hallo Peter,
Du bist gerade im Programmiertunnel :-) :-)
Das hatte ich gerade aktiviert und getestet GuckstDuHier

EDIT: Eigentlich wäre die Prognose inklusieve der Drosselung doch richtig, da ja eh nicht mehr kommen würde.

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

plin

Zitat von: ch.eick am 11 Juni 2021, 15:18:35
EDIT: Eigentlich wäre die Prognose inklusive der Drosselung doch richtig, da ja eh nicht mehr kommen würde.

Da muss ich wiedersprechen, da die Drosselung die Netzeinspeisung steuert und nicht die Erzeugung.

Im "Normalbetrieb" sehe ich Drosselung bei 4,3 kW + 300-400 W = ca. 4,8 kW. Wenn ich meine Zoe lade (die zieht 3,4 kW) habe ich schon eine PV-Leistung von 6,2 kW gesehen.

FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

ch.eick

Zitat von: plin am 11 Juni 2021, 15:54:20
Da muss ich wiedersprechen, da die Drosselung die Netzeinspeisung steuert und nicht die Erzeugung.

Im "Normalbetrieb" sehe ich Drosselung bei 4,3 kW + 300-400 W = ca. 4,8 kW. Wenn ich meine Zoe lade (die zieht 3,4 kW) habe ich schon eine PV-Leistung von 6,2 kW gesehen.
Wo er recht hat, hat er recht :-)
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

zwölfgang

Hallo PV-Freunde,
ich möchte mich auch mal hier in die interessierten Leser und auch mal als Frager einreihen. FHEM benutze ich schon einige Jahre auf div. Raspberrys und dank diesen Forums habe ich schon einiges zum Laufen gebracht.
Das Thema finde ich echt spannend da ich aktuell eine PV-Anlage in Betrieb genommen, mit Komponenten die fast haargenau hier passen.
- PV mit 10,2 KWp
- Kostal Plenticore plus 10
- KSEM
- BYD B-Box HVS 12.8 - im Moment noch nicht geliefert, kommt aber hoffentlich bald.
- go-eCharger für Elektroauto
- FHEM auf Raspi 4

Meiner kurzen Vorstellung hänge ich noch eine Frage an:
Ich habe die Module aus dem Wiki installiert und das WR_1_API zeigt bei "aktuelle Werte" komisch unsinnige Werte an, bei  "heute", "dieser Monat", "dieses Jahr" scheint es gut zu passen.
Frage: Hat sich durch Updates im Kostal möglicherweise etwas in der Struktur verändert, oder habe ich nicht das aktuelle Modul in FHEM installiert?
Das habe ich:
- Kostal Plenticore: IOC = 01.55, MC =01.55, UI = 01.19.05650
- FHEM ModuleVersion = 4.1.08 - 1.4.2021
welche Versionsnummern sind den wichtig, was ist den aktuell?
Danke für ein paar Tipps.

immer sonnige Grüße
Wolfgang

ch.eick

Zitat von: zwölfgang am 13 Juni 2021, 22:10:06
Ich habe die Module aus dem Wiki installiert und das WR_1_API zeigt bei "aktuelle Werte" komisch unsinnige Werte an, bei  "heute", "dieser Monat", "dieses Jahr" scheint es gut zu passen.
Frage: Hat sich durch Updates im Kostal möglicherweise etwas in der Struktur verändert, oder habe ich nicht das aktuelle Modul in FHEM installiert?
Das habe ich:
- Kostal Plenticore: IOC = 01.55, MC =01.55, UI = 01.19.05650
- FHEM ModuleVersion = 4.1.08 - 1.4.2021
welche Versionsnummern sind den wichtig, was ist den aktuell?
Hallo Wolfgang, herzlich willkommen.

Hier handelt es sich nicht um ein Modul, sondern die Verwendung verschiedener Module aus FHEM, die entsprechend für die Kommunikation mit den Geräten konfiguriert wurden.

Ich entnehme Deinem Schreiben, dass Du die Kommunikation zum Plenticore bereits inklusive Anmeldung geschafft hast. Dann läuft die Grundlage bereits.
Zu den Versionen:
- Kostal Plenticore ist mit v1.19 aktuell und verwende ich auch
- Das HTTPMOD hat 4.1.08 - 1.4.2021 und passt somit auch.

Du hast einen einzelnen Plenticore und somit noch keine Schwarm Installation.
Bitte schau Dir zuerst mal die readings ohne SW_* an, denn das sind die, die direkt vom Plenticore kommen.
Ein "list WR_1_API" könntest Du bitte als .txt Datei hier anhängen, dann schau ich da mal rein.
Die WR_* reading sollten die gleichen Werte haben wie die entsprechenden Plenticore reading.
Wie die readings mit Batterie aussehen kann ich nicht sagen, da ich sofort einen Speicher dran hatte. Das schau ich mir dann in Deinem List an.

Aktuelle Werte sind im WR_1_API keine zu sehen, da es die Statistiken abfragt, mit Ausnahme des stateFormat, was dann diese Werte aus dem WR_1 Device sind

my $WR="WR_1";

my $pvt   = sprintf("%04d W",ReadingsVal($WR,"SW_Total_AC_Active_P",0) );
my $pv  = sprintf("%04d W",ReadingsVal($WR,"SW_Home_own_consumption_from_Battery",0)+ReadingsVal($WR,"SW_Home_own_consumption_from_PV",0) );
my $gfi  =  sprintf("%04d W",(ReadingsVal($WR,"Total_Active_P_EM",0)<=0 ? abs(round(ReadingsVal($WR,"Total_Active_P_EM",0),0)):  0) );
my $eb   = sprintf("%04d W",(ReadingsVal($WR,"Total_Active_P_EM",0)>=0 ? round(ReadingsVal($WR,"Total_Active_P_EM",0),0) : 0) );
my $pvb   = sprintf("%04d W",ReadingsVal($WR,"SW_Home_own_consumption_from_Battery",0));
my $et   = sprintf("%04d W",(ReadingsVal($WR,"SW_Home_own_consumption_from_PV",0)+ReadingsVal($WR,"SW_Home_own_consumption_from_Battery",0)+ReadingsVal($WR,"SW_Home_own_consumption_from_grid",0)) );
my $valA = ReadingsVal($WR, "SW_Total_AC_Active_P",0)-ReadingsVal($WR, "SW_Home_own_consumption_from_grid",0);
    $calcVal = ($valA > 0) ? round($valA /($valA + ReadingsVal($WR, "SW_Home_own_consumption_from_grid",""))*100 ,0) : 0;
my $aq = sprintf("%3.0f %%",(($calcVal > 100) ? 100 : $calcVal) );


Auch hier könntest Du ein "list WR_1" als .txt Datei anhängen.

VG bis später
    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

Hallo zusammen,

in der Funktion Solar_forecast() hat es eine Änderung gegeben.

Hintergrund:

Das Mittagshoch wurde von 09:00 bis 18:00 Uhr ermittelt, was natürlich viel zu lang ist, wenn man eine MaxSoc Begrenzung macht.
Im Speicher ist dann nicht so viel Platz und das Laden würde je nach weiterer Konfiguration schon um 09:00 Uhr beginnen.
Dadurch wäre der Speiche im Sommer eventuell um 12:00 Uhr bereits komplett gefüllt und das Mittagshoch läuft ins leere.

Weitere Faktoren

SpeicherMidday_NotBefore
Bei MaxSoc Begrenzung und Mittagshoch wird generell bereits auf 12:00 Uhr verschoben.


Die Zeiten könne ja auch für eigene Steuerungen verwendet werden, wodurch eine ermittelte Zeit auch vor 12:00 Uhr sinn macht,
obwoh sie für die Speichersteuerung durch WR_1_Speicher_1_ExternControl  noch verschoben werden kann.

Umsetzung:

Bei einem Mittagshoch von > 4h wird die Start- und Endezeit dynamisch verschoben.


Beispiel:

18 - 9 => 9 / 4 => 2,25 => 2
09:00 + 2:00 => 11:00 Uhr
18:00 -  2:00 => 16:00 Uhr


Code Änderungen sind bereits im Wiki, aber hier noch ein Ausschnitt...

< snip >

=============================================
     my $middayhigh           = 0 ; # Ein Merker, ob das Tagesmaximum überschritten wird
     my $middayhigh_start     = "00:00";
     my $middayhigh_stop      = "00:00";
     my $middayhigh_tmp       = 0;
     my $middayhigh_start_tmp = 0;
     my $middayhigh_stop_tmp  = 0;

     my $Inverter_Max_Power = ReadingsVal($logdevice."_Speicher_1_ExternTrigger","SpeicherMidday_Inverter_Max_Power","unused");  # Überschreiben des middayhigh
=============================================

< snip >

=============================================
       # Alle Forecast Werte für die jeweilige Stunde in die DbLog schreiben (Es wird der Cache verwendet)

       if ( $logdb ne "none" ) {
         CommandSet(undef, $logdb." addCacheLine ".$timestamp."|".$logdevice."|addlog|".$reading.": ".$logentry1h."|".$reading."|".$logentry1h."|") ;

         if ( $middayhigh == 0 and $logentry1h > $Inverter_Max_Power ) {
           $middayhigh           = 1;
           $middayhigh_start_tmp = $i-1;
         };
         if ( $middayhigh == 1 and $logentry1h < $Inverter_Max_Power and $middayhigh_stop_tmp == 0 )  {
           $middayhigh_stop_tmp = $i;
         };
         if ( $middayhigh == 1 and $logentry1h > $Inverter_Max_Power and $middayhigh_stop != 0 )  {
           $middayhigh_stop_tmp = 0;                                # da war ein kurzer Einbruch, es sollte noch länger sein.
         };
         if ($middayhigh == 1 and
             $middayhigh_stop_tmp != 0 and
             $middayhigh_stop_tmp == $i ) {                                    # das Ende des Middayhigh wurde gefunden

           $middayhigh_tmp = $middayhigh_stop_tmp - $middayhigh_start_tmp;
           if ( $middayhigh_tmp > 4 )  {                                       # das Middayhigh wird zu lang
             if ($verbose >= 3 ) {                                             # die bisherigen Zeiten ausgeben
               Log 3, "Solar_middayhigh_fc".$fc."_start   : ".sprintf("%02d:00",$middayhigh_start_tmp);
               Log 3, "Solar_middayhigh_fc".$fc."_stop    : ".sprintf("%02d:00",$middayhigh_stop_tmp) ;
             }
             $middayhigh_tmp       = round(($middayhigh_tmp/4)-0.2 ,0);        # die Rundung der Zeit zum Abziehen etwas verschieben
             $middayhigh_start_tmp = $middayhigh_start_tmp + $middayhigh_tmp;  # es wird um ganze Stunden verkürzt
             $middayhigh_stop_tmp  = $middayhigh_stop_tmp  - $middayhigh_tmp;
             if ($verbose >= 3) {                                              # melde die Verkürzung
               Log 3, "Solar_middayhigh_fc".$fc."         : verkürzt um ".($middayhigh_tmp *2)." Stunden";
             }
           };
           $middayhigh_start = sprintf("%02d:00",$middayhigh_start_tmp);
           $middayhigh_stop  = sprintf("%02d:00",$middayhigh_stop_tmp);
           if ($verbose >= 3) {                                                # gib die finalen Zeiten aus
             Log 3, "Solar_middayhigh_fc".$fc."_start   : ".$middayhigh_start;
             Log 3, "Solar_middayhigh_fc".$fc."_stop    : ".$middayhigh_stop ;
           }
         };
         CommandSetReading(undef, $logdevice." Solar_middayhigh_fc".$fc." ".$middayhigh) ; # setz die Zeiten im Device
         CommandSetReading(undef, $logdevice." Solar_middayhigh_fc".$fc."_start ".$middayhigh_start) ;
         CommandSetReading(undef, $logdevice." Solar_middayhigh_fc".$fc."_stop ".$middayhigh_stop) ;
       };
=============================================
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

plin

Hi Christian,

ich mache die Entscheidung "Zoe kann jetzt geladen werden" von der aktuellen PV-Leistung (Total AC active power in kW) und dem Delta der letzten Stunde (Ertrag in kWh) abhängig. Durch den aktuellen Peak-Wert kann ich sicherstellen, dass ich aktuell Ladeleistung+Hausverbrauch erzeuge und durch das Stundenmittel der letzten Stunde weiß ich auch, dass diese Leistung relativ stabil/sicher erzeugt wird. So brauche ich keine Uhrzeiten vorzugeben.

VG Peter
FHEM1 (Main) Raspi4 mit CUL, Homematic, SDUINO 433/OOK, zentrale Steuerung
FHEM2 (Keller) x86 mit CUL/hmland, IP-basierte Module
FHEM3 (Erdgeschoss) Raspi2 mit SDUINO 868/GFSK
FHEM4 (Hausanschlussraum), USV und OBIS-Modul
FHEM5 (Docker) mit FHEM2FHEM, InfluxDB

ch.eick

Zitat von: plin am 14 Juni 2021, 18:43:24
ich mache die Entscheidung "Zoe kann jetzt geladen werden" von der aktuellen PV-Leistung (Total AC active power in kW) und dem Delta der letzten Stunde (Ertrag in kWh) abhängig. Durch den aktuellen Peak-Wert kann ich sicherstellen, dass ich aktuell Ladeleistung+Hausverbrauch erzeuge und durch das Stundenmittel der letzten Stunde weiß ich auch, dass diese Leistung relativ stabil/sicher erzeugt wird. So brauche ich keine Uhrzeiten vorzugeben.

Hallo Peter,
Mit den Beispielen aus dem Wiki für Pool oder LWP habe ich da auch ein Minimum und eine Zeit, die die Leistung stabil anstehen muss. Zusätzlich gibt es noch Zeiten, wann es frühestens, wie lange, eine Mindestzeit und bis wann freigeschaltet werden soll. Das hangelt sich dann schön an der PV-Kurve entlang oder schaltet auch ab, wenn es einen Verbraucher mit Vorrang gibt.

Gruß
   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

Hier mal wieder ein Sceenshot vom Dashboard.
Bald sollte es soweit sein eine Beschreibung anzufertigen...

Es sind jetzt nahezu alle Verbraucher mit Zähler im Haushalt (oben) und im Keller (unten) dargestellt.
Die Restverbraucher wurden berechnet.
Der Gesamt Hausverbrauch von 1.3 kW sollte sich je nach PV oder Netzbezug von grün nach rot ändern.
Die WallBoxen sind noch im Karton und der Getränkekühlschrank muss auch noch angeschlossen werden :-)
Durch ausgelesene Energiewerte des Wärmespeichers konnte auch ein Cop errechnet werden, der unterhalb der WP angezeigt wird.

Was mir noch fehlt sind die Planzahlen für die Batterie mit MaxSoc und Mittagshoch, da habe ich noch keine Idee für die Darstellung.

Ob ich auch noch Wetter Werte loggen möchte bin ich mir auch noch nicht so ganz im klaren.

Gerne nehme ich auch noch Eure Ideen entgegen

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