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

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

Vorheriges Thema - Nächstes Thema

kaiman

Zitat von: ch.eick am 07 Januar 2022, 14:01:56
Nein, dass passt so noch nicht

Im LogDBRep_Statistic_previous_Year  wird mit diesem Aufruf die Funktion splitReading aus der 99_myUtils aufgerufen, die wohl bei Dir noch fehlt.
userExitFn splitReading .*:.*

Dadurch werden die SqlResultRow_* in lesbare readings verwandelt.


Zusätzlich scheinst Du den Wechsel zu den SW_* userreadings nicht nachvollzogen zu haben, was jetzt und in Zukunft mehrarbeit bedeuten würde.
Im LogDBRep_Statistic_previous_Year Device wird im SQL SELECT nach 'SW_Statistic_%Year' gefiltert und nicht nach 'Statistic_%Year' . Bitte prüf das auch mal.

Generell sollten alle SW_* readings auch bei Betreibern mit nur einem WR funktionieren, dies erleichtert die Pflege der Devices insbesondere des stateFormat ernorm.

Danke für die schnelle Hilfe. Stimmt ich hatte "nur" das Wiki abgearbeitet. Jetzt werden die Werte angezeigt.
Das mit den Readings muss ich noch prüfen, aber ich glaube die Werte passen schon mal ...

ch.eick

Zitat von: kaiman am 07 Januar 2022, 15:51:55
Danke für die schnelle Hilfe. Stimmt ich hatte "nur" das Wiki abgearbeitet. Jetzt werden die Werte angezeigt.
Das mit den Readings muss ich noch prüfen, aber ich glaube die Werte passen schon mal ...
Die Werte sind okay, jedoch die Namen sind ohne SW_* , wenn Du nur einen WR hast, solltest Du besser die SW_* belassen, da alles was jetzt kommen wird darauf aufbaut.
Mit nur einem WR sollten die SW_* gleich den Namen ohne SW_* sein.

In Zukunft werden sicherlich immer mehr Wünsche nach Reports kommen und da müsste man ansonsten jedes mal wieder umbauen, oder es kommt zu Missverständnissen.
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

Klingt pervers, sieht pervers aus und ist auch pervers! Sehr geil! 8) ;D
Bin gespannt...

Hatte bis jetzt keine Zeit weiter zu machen, habe nun heute meine Umsatzsteuervoranmeldung für 21Q4 gemacht und weiß jetzt wo cih meine Werte her bekomme... mehr habe ich nicht, aber die könnte cih dann ins Fhem eintragen sodass ich es sehen kann ob meine Rechnung auch passt...

Vielen Dank schon mal!

ch.eick

Zitat von: misux am 07 Januar 2022, 17:19:40
Klingt pervers, sieht pervers aus und ist auch pervers! Sehr geil! 8) ;D
Bin gespannt...

Hatte bis jetzt keine Zeit weiter zu machen, habe nun heute meine Umsatzsteuervoranmeldung für 21Q4 gemacht und weiß jetzt wo ich meine Werte her bekomme... mehr habe ich nicht, aber die könnte ich dann ins Fhem eintragen sodass ich es sehen kann ob meine Rechnung auch passt...
Du hast ja den Kontakt ;-)

Die Funktion splitReading() musst Du auch schon man einbauen. Die Solar_* Funktionen nur wenn Du in die Richtung mit möchtest.
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 schon kommt eine grafische Vorschau, bei der Ihr gerne noch Wünsche äußern könnt.
Ich habe es auch etwas variabel gestaltet, sodaß die Quartals- und die Vorjahres Ergänzung nur erscheint, wenn die entsprechenden DbRep auch vorhanden sind.
Wer also keine Quartals Werte sehen möchte könnte den Report einfach weg lassen.
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 das stateFormat für WR_1_API, es sollte die Jahres Werte jetzt mit Jahreszahl in der unterst Zeile Anzeigen.
Die Quartalsergenzung wird erst angezeigt, wenn auch das LogDBRep_Statistic_previous_Quarter Device eingerichtet ist. Da bin ich mit Heiko noch an einem DbRep Patch beschäftigt, der die SQL Umsetzung noch etwas flexibler gestatet.

{
my $calcVal = 0;
my $WR      = "WR_1";
my $YearBefore      = "LogDBRep_Statistic_previous_Year";
my $YearPrevious    = POSIX::strftime("%Y",localtime(time_str2num(ReadingsTimestamp("$YearBefore","SW_Statistic_Yield_Year","null"))));
my $QuarterBefore   = "LogDBRep_Statistic_previous_Quarter";
my $QuarterPrevious = "null";
foreach my $i (1,2,3,4) {if (ReadingsVal("$QuarterBefore","Q".$i,0) eq "previous"){ $QuarterPrevious = "Q".$i }};

my $pvt   = sprintf("%04d W",ReadingsVal($WR,"SW_Total_AC_Active_P",0) );
my $pvtd  = sprintf("%04d",ReadingsVal("$name","SW_Statistic_Yield_Day",0)/1000 );
my $pvtm  = sprintf("%04d",ReadingsVal("$name","SW_Statistic_Yield_Month",0)/1000 );
    $pvtm .= ($QuarterPrevious ne "null") ? sprintf(" / %04d", ReadingsVal("$QuarterBefore",$QuarterPrevious."_SW_Statistic_Yield",0) ) : "";
my $pvty  = sprintf("%05d",ReadingsVal("$name","SW_Statistic_Yield_Year",0)/1000 );
    $pvty .= ($YearPrevious ne "0") ? sprintf(" / %05d", ReadingsVal("$YearBefore","SW_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",ReadingsVal("$name","SW_Statistic_EnergyHomePv_Day",0)/1000 );
my $pvm   = sprintf("%04d",ReadingsVal("$name","SW_Statistic_EnergyHomePv_Month",0)/1000 );
    $pvm  .= ($QuarterPrevious ne "null") ? sprintf(" / %04d", ReadingsVal("$QuarterBefore",$QuarterPrevious."_SW_Statistic_EnergyHomePv",0) ) : "";
my $pvy   = sprintf("%05d",ReadingsVal("$name","SW_Statistic_EnergyHomePv_Year",0)/1000 );
    $pvy  .= ($YearPrevious ne "0") ? sprintf(" / %05d", ReadingsVal("$YearBefore","SW_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",ReadingsVal("$name","SW_Statistic_EnergyHomeFeedInGrid_Day",0)/1000 );
my $gfim  = sprintf("%04d",ReadingsVal("$name","SW_Statistic_EnergyHomeFeedInGrid_Month",0)/1000 );
    $gfim .= ($QuarterPrevious ne "null") ? sprintf(" / %04d", ReadingsVal("$QuarterBefore",$QuarterPrevious."_SW_Statistic_EnergyHomeFeedInGrid",0) ) : "";
my $gfiy  = sprintf("%05d",ReadingsVal("$name","SW_Statistic_EnergyHomeFeedInGrid_Year",0)/1000 );
    $gfiy .= ($YearPrevious ne "0") ? sprintf(" / %05d", ReadingsVal("$YearBefore","SW_Statistic_EnergyHomeFeedInGrid_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",ReadingsVal("$name","SW_Statistic_EnergyHomeGrid_Day",0)/1000 );
my $ebm   = sprintf("%04d",ReadingsVal("$name","SW_Statistic_EnergyHomeGrid_Month",0)/1000 );
    $ebm  .= ($QuarterPrevious ne "null") ? sprintf(" / %04d", ReadingsVal("$QuarterBefore",$QuarterPrevious."_SW_Statistic_EnergyHomeGrid",0) ) : "";
my $eby   = sprintf("%05d",ReadingsVal("$name","SW_Statistic_EnergyHomeGrid_Year",0)/1000 );
    $eby  .= ($YearPrevious ne "0") ? sprintf(" / %05d", ReadingsVal("$YearBefore","SW_Statistic_EnergyHomeGrid_Year",0) ) : "";

my $pvb   = sprintf("%04d W",ReadingsVal($WR,"SW_Home_own_consumption_from_Battery",0));
my $pvbd  = sprintf("%04d",ReadingsVal("$name","Statistic_EnergyHomeBat_Day",0)/1000 );
my $pvbm  = sprintf("%04d",ReadingsVal("$name","Statistic_EnergyHomeBat_Month",0)/1000 );
    $pvbm .= ($QuarterPrevious ne "null") ? sprintf(" / %04d", ReadingsVal("$QuarterBefore",$QuarterPrevious."_Statistic_EnergyHomeBat",0) ) : "";
my $pvby  = sprintf("%05d",ReadingsVal("$name","Statistic_EnergyHomeBat_Year",0)/1000 );
    $pvby .= ($YearPrevious ne "0") ? sprintf(" / %05d", 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",ReadingsVal("$name","SW_Statistic_TotalConsumption_Day",0)/1000 );
my $etm   = sprintf("%04d",ReadingsVal("$name","SW_Statistic_TotalConsumption_Month",0)/1000 );
    $etm  .= ($QuarterPrevious ne "null") ? sprintf(" / %04d", ReadingsVal("$QuarterBefore",$QuarterPrevious."_SW_Statistic_TotalConsumption",0) ) : "";
my $ety   = sprintf("%05d",ReadingsVal("$name","SW_Statistic_TotalConsumption_Year",0)/1000 );
    $ety  .= ($YearPrevious ne "0") ? sprintf(" / %05d", ReadingsVal("$YearBefore","SW_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("%3d %%",ReadingsVal("$name","SW_Statistic_Autarky_Day",0) );
my $aqm   = sprintf("%3d %%",ReadingsVal("$name","SW_Statistic_Autarky_Month",0) );
my $aqy   = sprintf("%3d %%",ReadingsVal("$name","SW_Statistic_Autarky_Year",0) );
    $aqy  .= ($YearPrevious ne "0") ? sprintf(" / %3d %%", ReadingsVal("$YearBefore","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) );
    $sqy  .= ($YearPrevious ne "0") ? sprintf(" / %3d %%", ReadingsVal("$YearBefore","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))));
    $cm   .= ($QuarterPrevious ne "null") ? " / ".POSIX::strftime("%d.%m",localtime(time_str2num(ReadingsTimestamp("$QuarterBefore","$QuarterPrevious",0) ))) : "";
my $cy    = POSIX::strftime("%H:%M",localtime(time_str2num(ReadingsTimestamp($name, "SW_Statistic_Autarky_Year",0))));
    $cy   .= ($YearPrevious ne "0") ? " / ".$YearPrevious : "";

"<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 in kWh</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".(($QuarterPrevious ne "null") ? " / ".$QuarterPrevious : "")."</td><td style='padding-right:5px;padding-left:5px;font-weight:bold;text-align:center'>Jahr".(($YearPrevious ne "0") ? " / 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>"
}


Für das DbRep Device solltet Ihr mindestens die FVERSION 93_DbRep.pm:v8.43.0-s24929/2021-09-06 haben, was Ihr schon mal nachschauen könntet.

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

Hi Christian,
habe grad mal das stateformat für das WR_1_API eingebaut. Die Vorjahreszahlen sind jetzt verschwunden, unten steht auch 2022.
Als DbRep Version habe ich "93_DbRep.pm 25414 2022-01-03 21:05:38Z DS_Starter" vorgefunden, sollte aktuell sein.
Habe ich da noch was übersehen was ich noch nachziehen muss? Oder bin ich mal wieder zu ungeduldig.

Grüßle Wolfgang


ch.eick

Zitat von: zwölfgang am 09 Januar 2022, 17:57:40
Hi Christian,
habe grad mal das stateformat für das WR_1_API eingebaut. Die Vorjahreszahlen sind jetzt verschwunden, unten steht auch 2022.
Als DbRep Version habe ich "93_DbRep.pm 25414 2022-01-03 21:05:38Z DS_Starter" vorgefunden, sollte aktuell sein.
Habe ich da noch was übersehen was ich noch nachziehen muss? Oder bin ich mal wieder zu ungeduldig.

Grüßle Wolfgang
Hallo Wolfgang,

stehen denn die Daten von 2021 im LogDBRep_Statistic_previous_Year Device?
Dort müssen sie mir WR_* drin stehen, nur Statistic_EnergyHomeBat_Year hat kein WR_ davor, da es das im Schwarm nicht gibt.

Bei der DbRep Version hat Heiko bereits aufgeräumt, wie im DbRep Thread geschrieben, somit ist die schon neuer wie bei mir.
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,
Heiko wird morgen eine neue Version des DbRep einstellen, was dann die Attrikute device und reading in den sqlcmd unterstützen wird. Das verwende ich bei mir bereits seit längerem als eigenen Patch, weshalb es bei unseren Statistik Reports zu etwas durcheinander gekommen ist.

LogDBRep_Statistic_previous_Year ohne das SELECT !
Das SELECT tragt Ihr bitte beim ersten sqlcmd händisch ein, damit Ihr es auch als Sicherung, formatiert in eine Text Datei wegschreiben könnt. Dadurch ist es dann auch lesbarer, denn nach dem Aufruf vom LogDBRep_Statistic_previous_Year ist es nur noch ein Bandwurm ;-)

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 2022.01.11 11:00
attr LogDBRep_Statistic_previous_Year device WR_1_API
attr LogDBRep_Statistic_previous_Year reading SW_Statistic%_Year,Statistic_EnergyHomeBat_Year EXCLUDE=%NoBat%,%EnergyPv%
attr LogDBRep_Statistic_previous_Year room System
attr LogDBRep_Statistic_previous_Year userExitFn splitReading .*:.*
attr LogDBRep_Statistic_previous_Year verbose 0


Bitte aktualisiert auch die splitReading() Funktion, wenn Ihr das noch nicht gemacht habt.

Hier jetzt das SQL SELECT für LogDBRep_Statistic_previous_Year mit den neuen Attribut Variablen

SELECT
  h.TIMESTAMP,
  h.READING,
  IF   (h.READING LIKE '%Rate%'
    OR h.READING LIKE '%Autarky%',h.VALUE ,
    cast(h.VALUE/1000 AS decimal(6)) ) AS VALUE
FROM history h
INNER JOIN
(
SELECT max(TIMESTAMP) AS TIMESTAMP,READING 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')
  GROUP BY READING
) x1
  ON    h.TIMESTAMP = x1.TIMESTAMP
    AND h.READING   = x1.READING
;


EDIT: Ab heute 2022.01.11 ist das DbRep im normalen FHEM update enthalten
Für die ganz eiligen kann man bei Heiko auch direkt das Test DbRep runter laden

"wget -qO ./FHEM/93_DbRep.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbRep.pm"
[/u]

Noch eine wichtige Info wäre, dass sich die SQL SELECT und auch das WR_1_API stateFormat auf die SW_* readings beziehen. Falls Ihr also nicht immer wieder alles manuell anpassen möchtet wäre es notwendig, dass Ihr Eure Datenbank entsprechend anpasst. Dazu gibt es im Plenticore Wiki bereits Muster für Umbenennungen in der DbLog.

Solltest Ihr noch weitere Jahres Werte in diesem Report haben wollen, so kann man das recht einfach direkt mit abfragen. Ich hole mir z.B. auch die Jahres Leistung, die über die WallBox ins Auto ging und zeige mir das in einem ander stateFormat als Vorjahr mit an.

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

Hi nochmal,
ich steh gerade etwas auf dem Schlauch mit dem Umbauen auf SW_*

Zitat von: ch.eick am 07 Januar 2022, 17:05:51
Die Werte sind okay, jedoch die Namen sind ohne SW_* , wenn Du nur einen WR hast, solltest Du besser die SW_* belassen, da alles was jetzt kommen wird darauf aufbaut.
Mit nur einem WR sollten die SW_* gleich den Namen ohne SW_* sein.

In Zukunft werden sicherlich immer mehr Wünsche nach Reports kommen und da müsste man ansonsten jedes mal wieder umbauen, oder es kommt zu Missverständnissen.

Meine LogDBRep_Statistic_previous_Year ergab ja folgende Ergebnisse:
Statistic_EnergyFeedInGrid_Year  35  2021-12-31 23:57:03
Statistic_EnergyHomeBat_Year  0  2021-12-31 23:57:03
Statistic_EnergyHomeGrid_Year 529  2021-12-31 23:57:03
Statistic_EnergyHomePvSum_Year  137  2021-12-31 23:57:03
Statistic_EnergyHomePv_Year  137  2021-12-31 23:57:03
Statistic_EnergyHome_Year  667 2021-12-31 23:57:03
Statistic_EnergyPv1_Year  139 2021-12-31 23:57:03
Statistic_EnergyPv2_Year  46 2021-12-31 23:57:03
Statistic_TotalConsumption_Year  667  2021-12-31 23:57:03
Statistic_Yield_NoBat_Year  172  2021-12-31 23:57:03
Statistic_Yield_Year  172  2021-12-31 23:57:03

Was müsste ich in der DB anpassen?

Wäre das der Eintrag im Wiki: Ein altes READING einem neuen READING Namen zuordnen?
Ich hab im Thread noch den Eintrag gefunden https://forum.fhem.de/index.php/topic,114849.msg1176165.html#msg1176165
Steh aber irgendwie gerade echt auf dem Schlauch ...

Wäre das bei mir folgendes Code als Beispiel? Müsste ich alle YEAR einträge von oben so umbauen?
UPDATE history
  SET
    TIMESTAMP = TIMESTAMP,
    READING   = 'Statistic_EnergyFeedInGrid_Year'
  WHERE
        DEVICE    = 'WR_1_API'
    AND READING   = 'SW_Statistic_EnergyFeedInGrid_Year';


ch.eick

Zitat von: kaiman am 10 Januar 2022, 15:04:00
Hi nochmal,
ich steh gerade etwas auf dem Schlauch mit dem Umbauen auf SW_*

Meine LogDBRep_Statistic_previous_Year ergab ja folgende Ergebnisse:
Statistic_EnergyFeedInGrid_Year  35  2021-12-31 23:57:03
Statistic_EnergyHomeBat_Year  0  2021-12-31 23:57:03
Statistic_EnergyHomeGrid_Year 529  2021-12-31 23:57:03
Statistic_EnergyHomePvSum_Year  137  2021-12-31 23:57:03
Statistic_EnergyHomePv_Year  137  2021-12-31 23:57:03
Statistic_EnergyHome_Year  667 2021-12-31 23:57:03
Statistic_EnergyPv1_Year  139 2021-12-31 23:57:03
Statistic_EnergyPv2_Year  46 2021-12-31 23:57:03
Statistic_TotalConsumption_Year  667  2021-12-31 23:57:03
Statistic_Yield_NoBat_Year  172  2021-12-31 23:57:03
Statistic_Yield_Year  172  2021-12-31 23:57:03

Schau bitte mal in Dein WR_1_API Device, ob die SW_* readings vorhanden sind. Damit würden sie auch in die Datenbank geschrieben.
Wenn das der Fall ist, dann verwende bitte das SELECT mit den §device§ und §reading§ aus dem vorigen Post. Aber entweder bis morgen mit dem 93_DbRep update warten, oder das wget verwenden.

Bei den SW_* readings sind diese bei nur einem Wechselrichter von den Werten her gleich mit den readings ohne SW_* ., aber Du müsstest den DbRep und auch das stateFormat umbauen. Mein Bestreben ist es alle auf einen einheitlichen Stand zu haben, damit der Support einfacher ist.

Wenn das obige so okay für Dich ist, braucht man nächste hier nicht zu machen.
Nur wenn Du noch Daten aus einer Zeit vor der SW_* Zeit hast, dann kann man diese mit dem update der Datenbank nachziehen. Jeder ist ja zu einer anderen Zeit hier eingestiegen, oder wollte unter umständen seine eigenen device Namen verwenden. Ich kann aber auch gerne beim migrieren von alt Daten helfen, wenn es nicht zeitkritisch ist ;-)
Im Wiki steht zur Datenpflege und Umzügen glaube ich auch etwas drin "Wenn man mal umziehen will" oder so änlich :-)
Zitat
Was müsste ich in der DB anpassen?

Wäre das der Eintrag im Wiki: Ein altes READING einem neuen READING Namen zuordnen?
Ich hab im Thread noch den Eintrag gefunden https://forum.fhem.de/index.php/topic,114849.msg1176165.html#msg1176165
Steh aber irgendwie gerade echt auf dem Schlauch ...

Wäre das bei mir folgendes Code als Beispiel? Müsste ich alle YEAR einträge von oben so umbauen?
UPDATE history
  SET
    TIMESTAMP = TIMESTAMP,
    READING   = 'Statistic_EnergyFeedInGrid_Year'
  WHERE
        DEVICE    = 'WR_1_API'
    AND READING   = 'SW_Statistic_EnergyFeedInGrid_Year';


In Hinblich auf weitere Reports würde ich das Umziehen beforzugen. Das Quartals SQL hat rund 550 Zeilen, wenn es lesbar Formatiert ist. Ansonsten sieht es auf dem Bildschirm als Bandwurm wie die Matrix aus :-) :-)
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,

danke für die Erklärung und die angebotene Unterstützung.

Ich hab im WR_1_API sowohl SW* alsoauch Readings ohne SW_

die Werte unterscheiden sich aber teilweise etwas, was mich etwas verwirrt.

Beispiel:
Statistic_EnergyHomeGrid_Month 205245.01 2022-01-11 06:57:00
SW_Statistic_EnergyHomeGrid_Month 205426.8 2022-01-11 06:57:00

Statistic_EnergyHomeGrid_Year 205245.01 2022-01-11 06:57:00
SW_Statistic_EnergyHomeGrid_Year 205890.2 2022-01-11 06:57:00

LG

ch.eick

Zitat von: kaiman am 11 Januar 2022, 07:55:50
Hallo,

danke für die Erklärung und die angebotene Unterstützung.

Ich hab im WR_1_API sowohl SW* alsoauch Readings ohne SW_

die Werte unterscheiden sich aber teilweise etwas, was mich etwas verwirrt.

Beispiel:
Statistic_EnergyHomeGrid_Month 205245.01 2022-01-11 06:57:00
SW_Statistic_EnergyHomeGrid_Month 205426.8 2022-01-11 06:57:00

Statistic_EnergyHomeGrid_Year 205245.01 2022-01-11 06:57:00
SW_Statistic_EnergyHomeGrid_Year 205890.2 2022-01-11 06:57:00

LG
Diese Abweichungen sind im Bereich von "wenigen" wh, was mit der Zeit der Berechnung zu tun hat. Der Plenticore holt sich von KSEM und sich selber die Messwerte und mach bei den Statistiken nur in Zeitintervallen einen Update. Dann holt das WR_1_API Device die Werte ab und nur wenn es eine Änderung im Wert gibt (event-on-change) wird das reading geschrieben.
Die SW_* userreadings haben einen Trigger und machen erst eine Berechnung wenn dieser auslöst. Das geschieht aber auch nur bei enem event-on-change und in der Zwischenzeit hat sich ja wieder der Verbrauch geändert, da die Devices ja auch nur im Minuten Takt oder über die gesendeten register des ModBus arbeiten.
Bei einer Statistik reicht es, wenn man diese auf kWk Basis betrachtet, da ist es müßig sich 100 w schritte anzuschauen. Ich runde da ja eh ohne Nachkommastellen in der Anzeige.

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

Ok danke für die Erklärung, da hast du Recht.

Nachdem ich beide Werte in Device WR_1_API habe, soll ich noch eine Anpassung in der DB machen, oder kann das so bleiben?

Gruß

ch.eick

Zitat von: kaiman am 11 Januar 2022, 09:02:58
Ok danke für die Erklärung, da hast du Recht.

Nachdem ich beide Werte in Device WR_1_API habe, soll ich noch eine Anpassung in der DB machen, oder kann das so bleiben?
Ich war mir bisher noch nicht sooo sicher, ob ich die äqivalente zu SW_* nicht doch noch brauchen würde, deshalb habe ich diese im DbLogInclude noch drin gelassen.
Es sind ja warscheinlich auch noch nicht alle auf die Schwarm Implementierung umgezogen.
Wenn Du platz Probleme bekommen würdest könnte man natürlich einiges doppeltes löschen, aber das geht ja ratzigarfazi.
Die Events dieser readings werden aber trotzdem für die Erstellung der SW_* benötigt.

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