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: misux am 21 September 2021, 11:16:17
HI!

Ist es möglich vom Kostal Plenticore 10Plus einfach nur die aktuellen Daten abzufassen und im FHEM als Reading darzustellen? Also ohne ein dblog zu erstellen?

Ich würde gerne NUR die Aktuellen Wertr abgreifen (PV Leistung/Einspeisung/Eigenverbrauch/BAtterieladezustand). Viel mehr brauche ich nicht, möchte es nur in der FTUI Visualisieren...

Geht das relativ einfach?
Hallo Misux,

mit diesen beiden Attributen wird gesteuert, was ins DbLog geht.
Wenn Du das DbLogInclude Attribut löscht, dann wird auch nichts weg geschrieben.
Man kann natürlich auch ins FileLog schreiben.
Das selbe gilt natürlich auch für die Statistiken mit dem Device WR_1_API.

DbLogExclude .*

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,Battery_MaxChargePowerLimitAbs,Battery_.*SOC,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.*


Die Autokorrektur vom Solar_forecast() geht dann natürlich auch nicht mehr, da sie aus der DbLog die letzten Tage analysiert.
Auch das Dashboard und die Graphen mit Grafana fallen dann weg.
Für TableUI könnte man einen Link über share einbinden.

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

Und nochmal hallo,

ich habe heute beim Testen mal die Sommer/Winter Umschaltung bei niedriger Prognose ausprobiert und diesem Moment im Grapgen Leistungsbezug festgehalten.
Anhand der gelben Linie Actual_battery_charge_usable_P sieht man wie sich die verwendbare Leistung reduziert hat.
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

misux

Hi!

Vielen Dank für deine schnelle Antwort... Aber ich bin irgendwie zu blöd...

Wenn ich
define WP ModbusAttr 71 60 192.168.178.122:1502 TCP
eingebe, bekomme ich irgendwie keine readings.
Nicht einmal die 5 die ich brauche...

Was mache ich falsch?

ch.eick

Zitat von: misux am 21 September 2021, 19:55:20
Wenn ich
define WP ModbusAttr 71 60 192.168.178.122:1502 TCP
eingebe, bekomme ich irgendwie keine readings.

Was mache ich falsch?
Du machst den RAW Editor auf und kopierst die komplette Definition von WR_1 in des Fenster. Das sind sehr viele Definitionen!

Bitte halte erstmal auch die Namen der Devices bei, bis Du alle Zusammenhänge überblicken kannst.

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

Hallo zusammen,

für die Liebhaber der Datenbank habe ich da nochmal etwas vorbereitet :-)

Das Jahr ist bald rum und dann kommt zumindest in Deutschland wieder das Finanzamt um die Ecke und möchte wissen, was wir so erzeugt haben :-(
Was haltet Ihr da von einer geänderten Jahresspalte in WR_1_API Device ?
Mit einem Doppel Klick auf die Zahl kann man die dann direkt in die Steuererklärung übernehmen.
Nebenbei sieht man auch, ob das Jahr besser oder schlechter wird.

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

zwölfgang

Hallo Christian,
gerne, wäre dabei obwohl es bei mir ein letztes Jahr erst nächstes Jahr gibt.  :)

Grüssle Wolfgang

ch.eick

Zitat von: zwölfgang am 23 September 2021, 19:10:15
gerne, wäre dabei obwohl es bei mir ein letztes Jahr erst nächstes Jahr gibt.  :)

Grüssle Wolfgang
Hallo Wolfgang,
dann brauchst Du es ja im Januar :-)
Hast Du schon DbRep mit eingerichtet? Das wird zb. beim Solar_forecast() verwendet für die Autokorrektur.

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

Hallo zusammen,
ich fange einfach mal an das Vorjahr mit ins stateFormat vom WR_1_API aufzunehmen


In der 99_myutils.pm muss noch eine Funktion rein, die die Ausgabe vom SQL SELECT zerlegt und in readings umwandelt.
Das habe ich versucht generisch zu halten, damit es auch für andere Abfragen passt.

############################################################################################################
########           DbRep readings separieren und erstellen
############################################################################################################
sub splitReading {
my ($name,$reading,$value) = @_;
my $hash = $defs{$name};

if($reading =~ /^.*SqlResultRow_.*$/ and
    $value   =~ /^(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)\|(.*)\|(.*)/ ) {

     my $TIMESTAMP = "$1-$2-$3 $4:$5:$6";
     my $READING   = "$7";
     my $VALUE     = "$8";

     setReadingsVal($hash,$READING,$VALUE,$TIMESTAMP);
}
return;
}


Das wäre dann das DbRep Device, das später aus einem Scheduling Device mit "set LogDBRep_Statistic_previous_Year  sqlCmd SELECT...." aufgerufen wird.
An der Verwendung der §Variablen§ arbeitet Heiko im Moment noch, was später eine kleinere Änderung wäre, sie stehen aber schon als "device" und "reading" in den Attributen.

defmod LogDBRep_Statistic_previous_Year DbRep LogDB
attr LogDBRep_Statistic_previous_Year DbLogExclude .*
attr LogDBRep_Statistic_previous_Year allowDeletion 0
attr LogDBRep_Statistic_previous_Year comment Version 2021.09.23 15:00
attr LogDBRep_Statistic_previous_Year device WR_1_API
attr LogDBRep_Statistic_previous_Year reading Statistic_%Year  EXCLUDE=%Autarky%,%Rate%
attr LogDBRep_Statistic_previous_Year room System
attr LogDBRep_Statistic_previous_Year userExitFn splitReading .*:.*
attr LogDBRep_Statistic_previous_Year verbose 0

setstate LogDBRep_Statistic_previous_Year 2021-09-23 15:17:36 sqlCmd SELECT * FROM (SELECT TIMESTAMP,READING,cast(VALUE/1000 AS decimal(6)) AS VALUE FROM history WHERE DEVICE='WR_1_API' AND READING LIKE 'Statistic_%Year' AND READING NOT LIKE '%Autarky%' AND READING NOT LIKE '%Rate%' AND TIMESTAMP > STR_TO_DATE(CONCAT(YEAR(CURDATE())-1,'-12-31'),'%Y-%m-%d') AND TIMESTAMP < STR_TO_DATE(CONCAT(YEAR(CURDATE()) ,'-01-01'),'%Y-%m-%d') ORDER BY TIMESTAMP DESC ) AS x1 GROUP BY x1.READING



Danach fehlt nur noch das geänderte stateFormat im WR_1_API, dass die readings aus dem LogDBRep_Statistic_previous_Year Device liest

{
my $calcVal=0;
my $WR="WR_1";
my $YearBefore='LogDBRep_Statistic_previous_Year';

my $pvt   = sprintf("%04d W",ReadingsVal($WR,"SW_Total_AC_Active_P",0) );
my $pvtd  = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_Yield_Day",0)/1000 );
my $pvtm  = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_Yield_Month",0)/1000 );
my $pvty  = sprintf("%05d / %05d",ReadingsVal("$name","SW_Statistic_Yield_Year",0)/1000, ReadingsVal("$YearBefore","Statistic_Yield_Year",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 $pvd  = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_EnergyHomePv_Day",0)/1000 );
my $pvm  = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_EnergyHomePv_Month",0)/1000 );
my $pvy  = sprintf("%05d / %05d",ReadingsVal("$name","SW_Statistic_EnergyHomePv_Year",0)/1000, ReadingsVal("$YearBefore","Statistic_EnergyHomePv_Year",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 $gfid = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_EnergyHomeFeedInGrid_Day",0)/1000 );
my $gfim = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_EnergyHomeFeedInGrid_Month",0)/1000 );
my $gfiy = sprintf("%05d / %05d",ReadingsVal("$name","SW_Statistic_EnergyHomeFeedInGrid_Year",0)/1000, ReadingsVal("$YearBefore","Statistic_EnergyFeedInGrid_Year",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 $ebd  = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_EnergyHomeGrid_Day",0)/1000 );
my $ebm  = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_EnergyHomeGrid_Month",0)/1000 );
my $eby  = sprintf("%05d / %05d",ReadingsVal("$name","SW_Statistic_EnergyHomeGrid_Year",0)/1000, ReadingsVal("$YearBefore","Statistic_EnergyHomeGrid_Year",0) );

my $pvb   = sprintf("%04d W",ReadingsVal($WR,"SW_Home_own_consumption_from_Battery",0));
my $pvbd  = sprintf("%04d kWh",ReadingsVal("$name","Statistic_EnergyHomeBat_Day",0)/1000 );
my $pvbm  = sprintf("%04d kWh",ReadingsVal("$name","Statistic_EnergyHomeBat_Month",0)/1000 );
my $pvby  = sprintf("%05d / %05d",ReadingsVal("$name","Statistic_EnergyHomeBat_Year",0)/1000, ReadingsVal("$YearBefore","Statistic_EnergyHomeBat_Year",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 $etd  = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_TotalConsumption_Day",0)/1000 );
my $etm  = sprintf("%04d kWh",ReadingsVal("$name","SW_Statistic_TotalConsumption_Month",0)/1000 );
my $ety  = sprintf("%05d / %05d",ReadingsVal("$name","SW_Statistic_TotalConsumption_Year",0)/1000, ReadingsVal("$YearBefore","Statistic_TotalConsumption_Year",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("%4d %%",(($calcVal > 100) ? 100 : $calcVal) );

my $aqd  = sprintf("%4d %%",ReadingsVal("$name","SW_Statistic_Autarky_Day",0) );
my $aqm  = sprintf("%4d %%",ReadingsVal("$name","SW_Statistic_Autarky_Month",0) );
my $aqy  = sprintf("%4d %%",ReadingsVal("$name","SW_Statistic_Autarky_Year",0) );

my $valS = ReadingsVal($WR,"SW_Total_AC_Active_P",0);
    $calcVal = ($valS > 0) ? round((ReadingsVal($WR,"SW_Home_own_consumption_from_PV",0) + ReadingsVal($WR,"SW_Home_own_consumption_from_Battery",0)) / $valS * 100 ,0) : 0;
my $sq   =  sprintf("%4d %%",(($calcVal > 100) ? 100 : $calcVal) );

my $sqd  = sprintf("%4d %%",ReadingsVal("$name","SW_Statistic_OwnConsumptionRate_Day",0) );
my $sqm  = sprintf("%4d %%",ReadingsVal("$name","SW_Statistic_OwnConsumptionRate_Month",0) );
my $sqy  = sprintf("%4d %%",ReadingsVal("$name","SW_Statistic_OwnConsumptionRate_Year",0) );

my $date = POSIX::strftime("%Y-%m-%d",localtime(time_str2num(ReadingsTimestamp($name, "auth_me_authenticated",0))));
my $md = POSIX::strftime("%H:%M",localtime(time_str2num(ReadingsTimestamp($name, "auth_me_authenticated",0))));
my $cd   = POSIX::strftime("%H:%M",localtime(time_str2num(ReadingsTimestamp($name, "SW_Statistic_Autarky_Day",0))));
my $cm   = POSIX::strftime("%H:%M",localtime(time_str2num(ReadingsTimestamp($name, "SW_Statistic_Autarky_Month",0))));
my $cy   = POSIX::strftime("%H:%M",localtime(time_str2num(ReadingsTimestamp($name, "SW_Statistic_Autarky_Year",0))));

"<html><table border=2 bordercolor='darkgreen' cellspacing=0 style='width: 100%'>
<colgroup>
   <col span='1' style='width: 52%;'>
   <col span='1' style='width: 12%;'>
   <col span='1' style='width: 12%;'>
   <col span='1' style='width: 12%;'>
   <col span='1' style='width: 12%;'>
</colgroup>
<tr><td style='padding-right:5px;padding-left:5px;font-weight:bold'>Statistik vom $date</td><td style='padding-right:5px;padding-left:5px;font-weight:bold;text-align:center'>aktuell</td><td style='padding-right:5px;padding-left:5px;font-weight:bold;text-align:center'>Heute</td><td style='padding-right:5px;padding-left:5px;font-weight:bold;text-align:center'>Monat</td><td style='padding-right:5px;padding-left:5px;font-weight:bold;text-align:center'>Jahr / Vorjahr</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Erzeugung PV-Total</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvt."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvtd."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvtm."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvty."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Bezug von PV</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pv."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvd."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvm."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvy."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Bezug von Batterie</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvb."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvbd."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvbm."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$pvby."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Bezug ins Haus (Energieverbrauch)</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$et."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$etd."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$etm."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$ety."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Bezug vom Netz</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$eb."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$ebd."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$ebm."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$eby."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Einspeisung ins Netz</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$gfi."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$gfid."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$gfim."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$gfiy."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Autarkiequote</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$aq."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$aqd."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$aqm."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$aqy."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Eigenverbrauchsquote</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$sq."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$sqd."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$sqm."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$sqy."</td></tr>
<tr><td style='padding-right:5px;padding-left:5px;text-align:left;font-weight:bold'>Berechnet um</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$md."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$cd."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$cm."</td><td style='padding-right:5px;padding-left:5px;text-align:center'>".$cy."</td></tr>
</table></html>"
}


Ich habe noch festgestellt, das ich in der Datenbank noch alte readings Namen habe, da ich Anfang diesen Jahres zur Schwarm Installation umgebaut habe.
Dadurch könnten die readings von Euren abweichen, je nach dem wann Ihr eingestiegen seid und wie gut Ihr die Aufräumaktionen mitgemacht habt.
Ich werde das natürlich noch in der Datenbank bereinigen und dann die readings in den Definitionen vereinheitlichen.
Wie man aufräumt wurde hier im Thread bereits mehrfach mit Beispielen beschrieben und ist auch im Wiki zu finden.

Generell habt Ihr sicher gemerkt, dass ich alles auf SW_* umgebaut habe, was auch funktioniert wenn man nur einen WR hat. Aber das hat sich bei mir ja auch schnell geändert, solange man noch platz auf dem Dach hat :-)

Einen Schwarm hat man übrigens auch, wenn man eine Kraft-Wärme-Kopplung, ein altes Balkon Modul oder eine andere AC Quelle betreibt. Also immer schön wach die Veränderungen beobachten.

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

Moin,
ich habe noch einen kleinen Darstellungsfehler im WR_1_Speicher_1_ExternControl gefunden. Da wurde der Füllstand des Speichers nicht richtig graphisch dargestellt.

Im uiTable diese Funktion korrigieren.

sub FUNC_batt {
    my($val)=@_;
    my $ret="position:absolute;left:".(90*$val/100)."px;width:90px;height:20px;background:linear-gradient( to right,#F8F8E0 ".(90-(90*$val/100))."px,rgba(0,0,0,0) ".(90-(90*$val/100))."px);";
    return $ret;
  }

Das Wiki ist schon aktualisiert.

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

Irgend Jemand hat mal geschrieben, ich solle mehr Eigenwerbung machen :-) :-)

Hier mal etwas Eigenlob zur Speicher Steuerung

- Es wurde kein Mittaghoch gefunden, also direkt morgens einfach voll Laden.
- Durch die gute Prognose >30000 wh ist MaxSOC Limitierung aktiv gewesen

- Dann habe ich jetzt geplant den Pool heute Abend zu nutzen und einfach durch das neue ExternControl GUI die MaxSOC Limitierung mit einem Klick abgeschaltet.
   Im Diagramm sieht man dann auch die reaktion, dass der Speicher ab 13:00 Uhr wieder weiter geladen wurde.

- Jetzt ist die 100% Limitierung aktiv, damit er nicht permanent weiter geladen wird, das erfolgt mit MaxSOC 95%. Ist der SOC < 98% oder es sind nur noch 2h bis zum Sonnenuntergang,
  dann wird wieder einmal bis 100% geladen. Hier kann es jedoch passieren, dass dann doch die Sonne zu schwach ist und die 100% nicht erreicht werden, was bei mir meist > 100 wh ausmacht.

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

EDIT: Ich habe noch din Graphen mit angehängt.

Hallo zusammen,

hier habe ich mal ein Beispiel der Speicher Steuerung, wenn es heute ziemlich schön wird, aber für morgen die Prognose schlecht ist.

- Ein Mittagshoch wurde für heute erkannt
- MaxSOC Limitierung findet nicht stett weil fc1 < 30000 ist
- vor 9:00 Uhr wurde nichtgeladen
- jetzt ist der Speicher noch mit 41 % geladen, also > 30% , weshalb immer noch gewartet wird.
- es wird jetzt noch bis 11:00 Uhr gewartet und da MaxSOC nicht limitiert wird erfolgt dann auch der Ladebeginn.
  Ansonsten würde nochmals bis 12:00 Uhr verschoben werden, da ja dann nicht so viel rein passt.
- mit "Power mittags 0 W" ist die dynamische Ladeleistung aktiviert

- Die Ladebalken werden nun auch richtig dargestellt

VG
   Christian
(ich habe nächste Woche mal eine Sabbat Woche ;-) )
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 Christian,
ja, DbRep habe ich eingerichtet, Solar_forecast() scheint auch zu funktionieren, ich arbeite dran auch die WR_1_Speicher_1_ExternControl zu verstehen und auch verwenden.
Sieht gut aus.
Bei dem geänderte stateFormat im WR_1_API hat sich einen Buchstabendreher eingeschlichen, bei "$YearBefor"e," siehe in der Zeile unten.
my $eby  = sprintf("%05d / %05d",ReadingsVal("$name","SW_Statistic_EnergyHomeGrid_Year",0)/1000, ReadingsVal("$YearBefor"e,"Statistic_EnergyHomeGrid_Year",0) );
Wünsche dir eine schöne Sabbatwoche. :-)

Gruß Wolfgang




ch.eick

Zitat von: zwölfgang am 25 September 2021, 20:17:44
Hallo Christian,
ja, DbRep habe ich eingerichtet, Solar_forecast() scheint auch zu funktionieren, ich arbeite dran auch die WR_1_Speicher_1_ExternControl zu verstehen und auch verwenden.
Sieht gut aus.
Bei dem geänderte stateFormat im WR_1_API hat sich einen Buchstabendreher eingeschlichen, bei "$YearBefor"e," siehe in der Zeile unten.
my $eby  = sprintf("%05d / %05d",ReadingsVal("$name","SW_Statistic_EnergyHomeGrid_Year",0)/1000, ReadingsVal("$YearBefor"e,"Statistic_EnergyHomeGrid_Year",0) );
Wünsche dir eine schöne Sabbatwoche. :-)

Gruß Wolfgang
Das liegt an meiner voll Legasthenie :-) das e muss natürlich an den Variablen namen ran, ich habe es im Post geändert.
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,
der herbst kommt mit großen Schritten und ich habe mal wieder was mit Schattenmanagement gelesen.
Solltet Ihr von Schatten betroffen sein, so könnt Ihr den sogar zeitgesteuert aktivieren und somit das Maximum aus dem WR heraus holen. Wieviel das ausmacht kann ich Euch nicht sagen, aber ich mache ja manchmal auch Dinge, weil ich es kann :-) :-)


## Schattenmanagement
   if ($hour == 8)   {
     CommandSet(undef, "WR_1_API 40_02_Generator_ShadowMgmt 0");                ## Komplett aus          <<< um 8 Uhr ist es nicht mehr notwendig
   };
   if ($hour == 18) {
     CommandSet(undef, "WR_1_API 40_02_Generator_ShadowMgmt 2");                ## Im Westen unten einschalten      <<< Da kommt der Schatten vom Nachbarhaus, wenn die Sonne untergeht
   };
   if ($hour == 21) {
     CommandSet(undef, "WR_1_API 40_02_Generator_ShadowMgmt 1");                ## Schattenmanagement für den Osten vorbereiten     <<< abends wird dann schon für den nächsten Tag vorbereitet
   };


Die Nummern [0-n] richten sich nach Euren Strings und deren Position auf dem Dach. Dazu muss man natürlich mal den Schattenwurf auf dem Dach beobachten.

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

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