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 30 Dezember 2021, 00:57:44
OKay, DOIF habe ich angelegt. in deinem Code ist n kleiner Fehler... Hat ein bisschen gedauert, aber ich habs gefunden... ;D
im
Hab n Error bekommen das DOELSEIF nicht kennt oder so...
Hab ich korrigiert...

Zitat
Das KSEM habe ich angelegt und im Log bekomme ich:
2021.12.30 00:42:32 3: WR_0_KSEM: defined master with id 1, protocol TCP and interval 60, connection to 192.168.1.41:502
2021.12.30 00:42:32 3: Opening WR_0_KSEM device 192.168.1.41:502
2021.12.30 00:42:32 1: WR_0_KSEM: Can't connect to 192.168.1.41:502: 192.168.1.41: Verbindungsaufbau abgelehnt (111)
2021.12.30 00:42:33 3: WR_0_KSEM: attr disable removed


Da muss doch bestimmt noch irgendwo die Zugangsdaten hinterlegt werden... Finde aber in der Wiki nirgends eine Info drüber...
Im KSEM muss man natürlich ModBus auch aktivieren :-) Siehe Bild unten, das wären dann alle Optionen und ich meine es wäre die Slave Aktivierung ganz unten im Bild.
Die Plenticore IP-Adressen (bei mir zwei Stück) brauchst Du in Deiner einfachen Konfiguration nicht, da der Plenticore ja wegen des Speichers mit rs485 verbunden ist.

Zitat
UNd püktlich um 00:57 hab ich einen Logfile Eintrag bekommen:
2021.12.30 00:57:00 1: PERL WARNING: Argument "Error evaluating WR_1_API userReading SW_Statistic_Autar..." isn't numeric in sprintf at (eval 349668) line 40.
2021.12.30 00:57:00 3: eval:
<...>
[/quote]
Komisch, da kommt bei mir nichts, eventuell weil es das erste mal gelaufen ist. Beobachte es mal, dann schau ich nächstes Jahr mal danach.
Das ist jedoch auch nur eine Warning, ich denke weil FHEM auch Zahlen als String ablegt und ich es als Zahl formatiere. Die Ausgabe sollte aber trotzdem korrekt sein.
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

 ;D JAU! Soweit sogut Alles eingerichtet und WR_0 ist connected.

Die Perlwarnung bekomme ich alle 5 Minuten und das Losfile wird mega zugebombt...
2021.12.30 09:30:00 1: PERL WARNING: Argument "Error evaluating WR_1_API userReading SW_Statistic_Autar..." isn't numeric in sprintf at (eval 456462) line 40.
2021.12.30 09:30:00 3: eval:
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>"



Natürlich kommt was neues dazu:
Heute seit 10uhr stündlich im Log:
2021.12.30 10:00:00 1: ERROR evaluating {Solar_forecast("LogDB","LogDBRep_PV_Forecast_SQL","WR_1","Solar_Calculation_fc","DWD_Forecast",0)}: Undefined subroutine &main::Solar_forecast called at (eval 463761) line 1.

::) :-[

ch.eick

Zitat von: misux am 30 Dezember 2021, 17:22:54
;D JAU! Soweit sogut Alles eingerichtet und WR_0 ist connected.

Die Perlwarnung bekomme ich alle 5 Minuten und das Losfile wird mega zugebombt...
2021.12.30 09:30:00 1: PERL WARNING: Argument "Error evaluating WR_1_API userReading SW_Statistic_Autar..." isn't numeric in sprintf at (eval 456462) line 40.
2021.12.30 09:30:00 3: eval:
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>"



Natürlich kommt was neues dazu:
Heute seit 10uhr stündlich im Log:
2021.12.30 10:00:00 1: ERROR evaluating {Solar_forecast("LogDB","LogDBRep_PV_Forecast_SQL","WR_1","Solar_Calculation_fc","DWD_Forecast",0)}: Undefined subroutine &main::Solar_forecast called at (eval 463761) line 1.

::) :-[
Dann nimm im PV_Schedule doch mal den Solar_forcast raus. Das machst Du doch noch nicht.

Bei der anderen Warning check mal den verbose Level in dem Device. Die Problemsuche kann ich erst nächste Woche machen .
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

kaiman

Hallo zusammen,

mir ist heute zum Jahreswechsel folgendes aufgefallen
Die Vorjahreswerte fehlen irgendwie und die Berechnung scheint nicht zu passen.
Dabei habe ich auch gesehen, dass im Wiki unten bei Bilanz ein Bild angezeigt wird (https://wiki.fhem.de/w/images/1/10/Plenticore_Bilanz.png) welches anders aussieht als die obere Bilanz (https://wiki.fhem.de/w/images/c/cc/WR_1.PNG)
Ich habe die obere, wie bekomme ich die untere. Was müsste ich anpassen, habe ich etwas übersehen? Welche Daten müsste ich liefern, damit ihr mir helfen könnt?


Statistik vom 2022-01-01   aktuell   Heute   Monat   Jahr / Vorjahr
Erzeugung PV-Total   0582 W   0003 kWh   0003 kWh   00003 / 00000
Bezug von PV   0577 W   0002 kWh   0002 kWh   -0032 / 00000
Bezug ins Haus (Energieverbrauch)   0753 W   0010 kWh   0010 kWh   00818 / 00000
Bezug vom Netz   0171 W   0007 kWh   0007 kWh   00850 / 00000
Einspeisung ins Netz   0000 W   0000 kWh   0000 kWh   00035 / 00000
Autarkiequote   70 %   28 %   28 %   -4 %
Eigenverbrauchsquote   99 %   83 %   83 %   -943 %
Berechnet um   14:55   13:57   13:57   13:57

LG

ch.eick

Zitat von: kaiman am 01 Januar 2022, 14:57:26
Hallo zusammen,

mir ist heute zum Jahreswechsel folgendes aufgefallen
Die Vorjahreswerte fehlen irgendwie und die Berechnung scheint nicht zu passen.
Das alte Jahr ist keine Berechnung, sondern eine Ausgabe aus einem DbRep Device.
Die Berechnungen schaue ich mir nächste Tage mal an.

Zitat
Dabei habe ich auch gesehen, dass im Wiki unten bei Bilanz ein Bild angezeigt wird (https://wiki.fhem.de/w/images/1/10/Plenticore_Bilanz.png) welches anders aussieht als die obere Bilanz (https://wiki.fhem.de/w/images/c/cc/WR_1.PNG)
Ich habe die obere, wie bekomme ich die untere. Was müsste ich anpassen, habe ich etwas übersehen? Welche Daten müsste ich liefern, damit ihr mir helfen könnt?
Das untere ohne die Vorjahres Zahlen ist das alte Bild, das entferne ich dann mal aus dem Wiki.
Dir fehlt nur das DbRep für das Vorjahr.

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 5

setstate LogDBRep_Statistic_previous_Year 2021-09-25 17:47:23 sqlCmd SELECT * FROM (SELECT TIMESTAMP,READING,cast(VALUE/1000 AS decimal(6)) AS VALUE FROM history WHERE §device§ AND §reading§ 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
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,
die Werte von 2021 sind nicht im WR_1_API abgebildet worden. Scheint mir so als ob "LogDBRep_Statistic_previous_Year" nicht richtig ausgeführt wurde. Hab jetzt für die Jahreszahle ganz schräge Werte.
Kann ich das mit den Initialwerten für Day/Month/Year wieder reparieren? Nur - welche Werte soll ich da einsetzen?

Grüßle Wolfgang

ch.eick

Zitat von: zwölfgang am 02 Januar 2022, 22:45:24
Hallo Christian,
die Werte von 2021 sind nicht im WR_1_API abgebildet worden. Scheint mir so als ob "LogDBRep_Statistic_previous_Year" nicht richtig ausgeführt wurde. Hab jetzt für die Jahreszahle ganz schräge Werte.
Kann ich das mit den Initialwerten für Day/Month/Year wieder reparieren? Nur - welche Werte soll ich da einsetzen?
Hallo Wolfgang,
wie im vorherigen Post bereits geschrieben, setze ich mich da diese Woche mal ran. Sorry für die Unannehmlichkeiten, das ist durch meine Aufrüstung zum Schwarm im März rein gekommen.

Das "LogDBRep_Statistic_previous_Year" wird bisher nicht automatisch gestartet. Es reicht das einmal im laufenden Jahr zu machen.
Wenn Ihr da in das Device geht könntet Ihr bitte mal ein "set LogDBRep_Statistic_previous_Year sqlCmd" über die pull down Menüs machen. Das SELECT sollte dabei selber erscheinen, wenn das nicht passiert tragt bitte folgendes SELECT neu ein

SELECT * FROM (SELECT TIMESTAMP,READING,cast(VALUE/1000 AS decimal(6)) AS VALUE FROM history WHERE §device§ AND §reading§ 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

Da Ihr wahrscheinlich noch auf MariaDB seit und noch nicht eine Oracle MySQL Datenbank im Docker Container verwendet sollte das dann im Device  "LogDBRep_Statistic_previous_Year" die fehlenden readings erzeugen. Für die Oracle MySQL Datenbank gibt es aufgrund der massiven Weiterentwicklung noch eine Unstimmigkeit im SELECT , die ich noch nicht beseitigt habe.

Wer die Vorjahres Werte nicht im stateFormat haben möchte müsste in der HTML Tabelle die Anzeige entsprechend entfernen, solange ich an der korrekten Anzeige arbeite :-)

Das zweite Problem sind die "schrägen Werte", die ich mich jetzt mal genauer anschaue. Bitte etwas Geduld, ich laufe gerade erst noch warm ;-)

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

Mumpitz

Zitat von: ch.eick am 03 Januar 2022, 10:08:47

Das "LogDBRep_Statistic_previous_Year" wird bisher nicht automatisch gestartet. Es reicht das einmal im laufenden Jahr zu machen.
Wenn Ihr da in das Device geht könntet Ihr bitte mal ein "set LogDBRep_Statistic_previous_Year sqlCmd" über die pull down Menüs machen. Das SELECT sollte dabei selber erscheinen, wenn das nicht passiert tragt bitte folgendes SELECT neu ein

SELECT * FROM (SELECT TIMESTAMP,READING,cast(VALUE/1000 AS decimal(6)) AS VALUE FROM history WHERE §device§ AND §reading§ 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


Hallo meine Mitstreiter
Zuerst wünsche ich allen ein Frohes Neues Jahr und alles Gute. Auf viele angeregte Diskussionen!

Ich habe diesen Teil gestern automatisiert und ins DB_Service_Schedule mit einem neuen Zweig eingefügt:


## Jährliche Einträge
DOELSEIF
($md eq "01-01" and [08:05])
(set LogDBRep_Statistic_previous_Year 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)

ch.eick

Zitat von: Mumpitz am 03 Januar 2022, 11:01:32
Ich habe diesen Teil gestern automatisiert und ins DB_Service_Schedule mit einem neuen Zweig eingefügt:


## Jährliche Einträge
DOELSEIF
($md eq "01-01" and [08:05])
(set LogDBRep_Statistic_previous_Year 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)

Dir auch ein besonderes Hallo

Danke für die Mithilfe, das ganze ich mir wohl etwas zu schnell ins Wiki gerutscht, da ich zuerst noch testen wollte.
Das SELECT wird sich noch ändern, damit es mit den neuen MySQL Anforderungen zusammen passt.
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

Mumpitz

Zitat von: ch.eick am 03 Januar 2022, 11:11:47
Dir auch ein besonderes Hallo

Danke für die Mithilfe, das ganze ich mir wohl etwas zu schnell ins Wiki gerutscht, da ich zuerst noch testen wollte.
Das SELECT wird sich noch ändern, damit es mit den neuen MySQL Anforderungen zusammen passt.

aber rückwärtskompatibel auf mariadb, oder?

ch.eick

Zitat von: Mumpitz am 03 Januar 2022, 11:21:10
aber rückwärtskompatibel auf mariadb, oder?
Ja, so soll es sein, oder halt eine Auswahl im Wiki dokumentiert.
Die MySQL Version bekommt man beim Anmelden an die Datenbank angezeigt und ist bei mir "Server version: 8.0.27 MySQL Community Server - GPL"

Oder im DbRep mit einem get auf svrinfo

SQL_DBMS_NAME MySQL
SQL_DBMS_VERSION 8.0.27

Der große Versionsunterschied zwischen MariaDB und dem MySQL Community Server sollte zum Nachdenken anregen, ob da mal ein Upgrade notwendig wäre.

Ich habe FHEM auf einem RPI4 mit 4Gb Ram in Docker laufen.
Das Upgrade lief sehr einfach, da ich mich quasi für eine Neuinstallation der Datenbank entschieden hatte.
Ich hatte eine MariaDB als 32 Bit auf arm laufen und dort einen export der Daten gemacht.
Vorher hatte ich einen zweiten Container erstellt und dort die MySQL Community Server Edition gestartet.
Dann natürlich die Initialisierung der Datenbank nach dem FHEM Wiki und den Import der Datensichung geladen. Zu dieser Zeit liefen bereits neue Daten parallel in die Datenbank.
Ein ganz wichtiger Vorteil ist, dass der Docker Container direkt vom Hersteller kommt und durch die Community gepflegt wird. Somit kommen auch wieder Sicherheitsupdates in die Datenbank.

Der geneigte Leser hat sicher bereits bemerkt, dass ich gleichzeitig beim Betriebsystem von 32 Bit auf 64 Bit gewechselt habe, was einen subjektiv besseren Performanceschub gebracht hat.
Das sollte man jedoch vorher noch etwas besser planen :-)

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,
hier kommt schon mal ein kleiner work around, der ja bereits auch angefragt wurde.

Die ursache der falschen Jahres Werte liegt an den nicht geschriebenen readings für *_init_*Year , die Ihr jetzt einfach mit dem Wert vom Monat setzen könnt, da ja gerade Januar ist.

setreading WR_1_API SW_Meter_init_Grid_Year 6134
setreading WR_1_API SW_Meter_init_FeedInGrid_Year 16535


Eigentlich sollte es durch das PV_Schedule um [00:01] gesetzt worden sein.
EDIT: Hier schon korrigiert, damit nicht die fehler so oft geposted werden.

################################################################################################################
## 5 Jeden Morgen die Zählerstände aktualisieren, damit im Schwarm die Statistiken berechnet werden können
##
DOELSEIF
([00:01])

  (setreading WR_1_API SW_Meter_init_FeedInGrid_Day [WR_0_KSEM:Active_energy-])   ## 6172
  (setreading WR_1_API SW_Meter_init_Grid_Day [WR_0_KSEM:Active_energy+])         ## 4727

({if ($mday eq 1)
     {
      fhem("setreading WR_1_API SW_Meter_init_FeedInGrid_Month [WR_0_KSEM:Active_energy-]");   ## 5707
      fhem("setreading WR_1_API SW_Meter_init_Grid_Month [WR_0_KSEM:Active_energy+]");         ## 4717

      if ($yday eq 0)
        {
         fhem("setreading WR_1_API SW_Meter_init_FeedInGrid_Year [WR_0_KSEM:Active_energy-]");   ## 5241
         fhem("setreading WR_1_API SW_Meter_init_Grid_Year [WR_0_KSEM:Active_energy+]");         ## 3517
        }
     }
  }
)

Bis zum "$mday eq 1" wurde es auch durchlaufen, jedoch hat das "$yday eq 1" nicht ausgelöst, wodurch diese beiden Werte nicht gesetzt wurden.
Ein kurzes Suchen im FHEM Forum und schon findet man Ottos Erklärung, danke dafür.
Der 1.1. ist in $yday 0

Bitte korrigiert also das "$yday eq 1" in "$yday eq 0" . Das testen wir dann in einem Jahr nochmal :-) :-) :-)

Sobald der Plenticore dann die Statistiken fortgeschrieben hat sollte alles wieder gut sein.
Das Vorjahr ist bei mir noch leer, da das SELECT auf die aktuelle MySQL Version noch umgeschrieben werden 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

kaiman

Hallo zusammen,

ich habe gerade mal die Vorjahreswerte mit

setreading WR_1_API SW_Meter_init_Grid_Year xxx
setreading WR_1_API SW_Meter_init_FeedInGrid_Year yyy


eingetragen, somit passen die aktuellen Werte schon wieder ;)

DANKE euch!

ch.eick

Zitat von: kaiman am 03 Januar 2022, 14:17:03
Hallo zusammen,

ich habe gerade mal die Vorjahreswerte mit

setreading WR_1_API SW_Meter_init_Grid_Year xxx
setreading WR_1_API SW_Meter_init_FeedInGrid_Year yyy


eingetragen, somit passen die aktuellen Werte schon wieder ;)
Wie ich gerade geschrieben habe müsstest Du auch bitte das PV-Schedule korrigieren.
Ich denke die Vorjahres Zähler Werte sind gleich mit denen um 00:01 und somit passt das, ohne in der Datenbank nachzuschauen.
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

kaiman

Zitat von: ch.eick am 03 Januar 2022, 14:56:31
Wie ich gerade geschrieben habe müsstest Du auch bitte das PV-Schedule korrigieren.
Ich denke die Vorjahres Zähler Werte sind gleich mit denen um 00:01 und somit passt das, ohne in der Datenbank nachzuschauen.

ja den PV Schedule hab ich auch korrigiert.