Code: Alles auswählen
// Info: Hier wird der Strompreis gepflegt (siehe unten)
#!/usr/bin/php
<?php
//Wenn der Wert auch in die LOG Datei geschrieben werden soll.
//$funktionen->log_schreiben("Rasperry Temperatur: ".round($RaspiTemp,1)." °C",">",5); //wenn RaspiTemp in solaranzeige.log angezeigt werden soll
//vor $funktionen entfernen
$Datenbank[1] = "solaranzeige";
$Measurements[1][1] = "AC";
$Measurements[1][2] = "Service";
$Measurements[1][3] = "Summen";
//06.06.2022 Strompreis von 0,282 auf 0,3045 angepasst
// $Strompreis ="0.3045"; // Euro pro Kilowatt
// $PreisperiodeWhEigenverbrauchAnfang ="988575"; //Startpunkt eigenverbrauchszähler für aktuelle PReisperiode in Wh
// $PreisperiodeEigenverbrauchEuAnfang ="202.76"; //Startpunkt Eigenverbrauchszähler für aktuelle Preisperiode in EURO
//01.07.2022 Strompreis von 0,3045 auf 0,2673 angepasst (EEG Umlage entfallen)
$Strompreis ="0.2673"; // Euro pro Kilowatt
$PreisperiodeWhEigenverbrauchAnfang ="1111807"; //Startpunkt eigenverbrauchszähler für aktuelle PReisperiode in Wh
$PreisperiodeEigenverbrauchEuAnfang ="231.00"; //Startpunkt Eigenverbrauchszähler für aktuelle Preisperiode in EURO
$Einspeiseverguetung ="0.0769"; // Euro pro Kilowatt
//$Datenbank[2] = "energymeter";
// Verbrauchsberechnung abhängig entweder Energymeterdaten oder Wechselrichterdaten verwenden. Tags -> Wechselrichter -> nachts -> Energymeter. Grund: Wechselrichter und Energymeter werden nie zeitgleich ausgelesen, das führt bei Wolkenflug macnhmal zu neagtiven Werten für Verbrauch.
// Verbrauchsberechnung Anfang
for ($i=1; $i <= count($Datenbank); $i++) {
for($j=1; $j <= count($Measurements[$i]); $j++){
$ch[$i][$j] = curl_init('http://localhost/query?db='.$Datenbank[$i].'&precision=s&q='.urlencode('select * from '.$Measurements[$i][$j].' order by time desc limit 1'));
include "mathe.php";
}
}
if($DB[1][2]["Betriebszustand"] != 0){ //Tagsüber Werte aus dem Wechselrichter verwenden
log_schreiben(" Leistung WR : ".$DB[1][1]["Leistung"],"",8);
log_schreiben(" Betriebszustand WR : ".$DB[1][2]["Betriebszustand"],"",8);
log_schreiben(" Einspeisung WR : ".$DB[1][1]["Einspeisung"],"",8);
log_schreiben(" Bezug WR : ".$DB[1][1]["Bezug"],"",8);
log_schreiben(" Verbrauch WR : ".($DB[1][1]["Leistung"] + $DB[1][1]["Bezug"] - $DB[1][1]["Einspeisung"]),"",8);
$aktuelleDaten["ZusatzQuery"] = "Dashboard Gesamt_Leistung=".($DB[1][1]["Leistung"] + $DB[1][1]["Bezug"] - $DB[1][1]["Einspeisung"]);
}
else // Nachts Werte aus dem Energymeter verwenden
{
log_schreiben(" Import/Export (EM): ".$aktuelleDaten["AC_Leistung"],"",8); // nehme aus der zuletzt verwendenten PHP = hier ist das Energymeter den Wert aus der Tabelle 'AC' für 'Leistung'
log_schreiben(" Verbrauch (EM): ".($aktuelleDaten["AC_Leistung"] + $DB[1][1]["Leistung"]),"",8);
$aktuelleDaten["ZusatzQuery"] = "Dashboard Gesamt_Leistung=".($DB[1][1]["Leistung"] + $aktuelleDaten["AC_Leistung"]);
}
// Verbrauchsberechnung Ende
// Wh Zähler Bezug Anfang
/*****************************************************************************
// Die Status Datei wird dazu benutzt, um den Bezug in Wh Pro Tag zu berechnen
// Um 00:00 wird der aktuelle Zählerstand des Energymeters in der Datei hinterlegt.
// In jedem Auslesezyklus wird der aktuelle Zählerstand vom Energymeter gelesen
// und der Wert aus der Datei subtrahiert. Das Ergebnis wird in die Datenbank gespeichert.
*****************************************************************************/
$StatusFile = $Pfad."/database/".$GeraeteNummer.".WattstundenZaehlerBezugAnfangswert.txt";
if (file_exists($StatusFile)) {
/***************************************************************************
// Wenn Statusdatei existiert, dann Datei einlesen ...
***************************************************************************/
$WattstundenZaehlerBezugAnfangswert = file_get_contents($StatusFile);
if (empty($WattstundenZaehlerBezugAnfangswert)){ // Ist die gelesene Datei leer, dann ...
$WattstundenZaehlerBezugAnfangswert = $aktuelleDaten["Wh_Bezug"]; //...schreibe den aktuellen Zählerstand in die Datei
}
if (date("H:i") == "00:00") { // Jede Nacht 0 Uhr
$WattstundenZaehlerBezugAnfangswert = $aktuelleDaten["Wh_Bezug"]; // Zäherstand am Anfang des Tages merken
$rc = file_put_contents($StatusFile,$aktuelleDaten["Wh_Bezug"]); // und in die statusdatei schreiben
$funktionen->log_schreiben("WattstundenZaehlerBezugAnfangswert gesetzt".$aktuelleDaten["Wh_Bezug"],8);
}
}
else {
/***************************************************************************
// Inhalt der Status Datei anlegen, wenn Datei noch nicht vorhanden ist.
***************************************************************************/
$rc = file_put_contents($StatusFile,$aktuelleDaten["Wh_Bezug"]);
if ($rc === false) {
$funktionen->log_schreiben("Konnte die Datei WattstundenZaehlerBezugAnfangswert.txt. nicht anlegen"," ",5);
}
}
/*****************************************************************************
// Die Status Datei wird dazu benutzt, um den Bezug in Wh Pro Tag zu berechnen
// In jedem Auslesezyklus wird der aktuelle Zählerstand vom Energymeter gelesen
// und der Wert aus der Datei subtrahiert. Das Ergebnis wird in die Datenbank gespeichert.
*****************************************************************************/
if (file_exists($StatusFile) and isset($aktuelleDaten["Wh_Bezug"])) {
/***************************************************************************
// Daten einlesen ...
***************************************************************************/
$WattstundenZaehlerBezugAnfangswert = file_get_contents($StatusFile);
$aktuelleDaten["whBezugHeute"] = $aktuelleDaten["Wh_Bezug"] - $WattstundenZaehlerBezugAnfangswert; // // Berechne aktuellen Bezugs - BezugAnfangswert von heute
$aktuelleDaten["whBezugHeute"] = round($aktuelleDaten["whBezugHeute"],0);
$funktionen->log_schreiben("Bezug Wh Heute ".$aktuelleDaten["whBezugHeute"]," Wh",8);
$aktuelleDaten["ZusatzQuery"] .= ",WhBezugHeute=".$aktuelleDaten["whBezugHeute"]; // Alle Werte der ZUsatzquarry landen in der Tabelle Dashboard WICHTIG: ,
}
// Wh Zähler Bezug Ende
// Wh Zähler Einspeisung Anfang
/*****************************************************************************
// Die Status Datei wird dazu benutzt, um den Einspeisung in Wh Pro Tag zu berechnen
// Um 00:00 wird der aktuelle Zählerstand des Energymeters in der Datei hinterlegt.
// In jedem Auslesezyklus wird der aktuelle Zählerstand vom Energymeter gelesen
// und der Wert aus der Datei subtrahiert. Das Ergebnis wird in die Datenbank gespeichert.
*****************************************************************************/
$StatusFile = $Pfad."/database/".$GeraeteNummer.".WattstundenZaehlerEinspeisungAnfangswert.txt";
if (file_exists($StatusFile)) {
/***************************************************************************
// Wenn Statusdatei existiert, dann Datei einlesen ...
***************************************************************************/
$WattstundenZaehlerEinspeisungAnfangswert = file_get_contents($StatusFile);
if (empty($WattstundenZaehlerEinspeisungAnfangswert)){ // Ist die gelesene Datei leer, dann ...
$WattstundenZaehlerEinspeisungAnfangswert = $aktuelleDaten["Wh_Einspeisung"]; //...schreibe den aktuellen Zählerstand in die Datei
}
if (date("H:i") == "00:00") { // Jede Nacht 0 Uhr
$WattstundenZaehlerEinspeisungAnfangswert = $aktuelleDaten["Wh_Einspeisung"]; // Zäherstand am Anfang des Tages merken
$rc = file_put_contents($StatusFile,$aktuelleDaten["Wh_Einspeisung"]); // und in die statusdatei schreiben
$funktionen->log_schreiben("WattstundenZaehlerEinspeisungAnfangswert gesetzt".$aktuelleDaten["Wh_Einspeisung"],8);
}
}
else {
/***************************************************************************
// Inhalt der Status Datei anlegen, wenn Datei noch nicht vorhanden ist.
***************************************************************************/
$rc = file_put_contents($StatusFile,$aktuelleDaten["Wh_Einspeisung"]);
if ($rc === false) {
$funktionen->log_schreiben("Konnte die Datei WattstundenZaehlerEinspeisungAnfangswert.txt. nicht anlegen"," ",8);
}
}
/*****************************************************************************
// Die Status Datei wird dazu benutzt, um den Einspeisung an kWh Pro Tag zu berechnen
// In jedem Auslesezyklus wird der aktuelle Zählerstand vom Energymeter gelesen und der Wert aus der Datei subtrahiert. Das Ergebnis wird in die Datenbank gespeichert.
*****************************************************************************/
if (file_exists($StatusFile) and isset($aktuelleDaten["Wh_Einspeisung"])) {
/***************************************************************************
// Daten einlesen ...
***************************************************************************/
$WattstundenZaehlerEinspeisungAnfangswert = file_get_contents($StatusFile);
$aktuelleDaten["whEinspeisungHeute"] = $aktuelleDaten["Wh_Einspeisung"] - $WattstundenZaehlerEinspeisungAnfangswert; // // Berechne aktuellen Einspeisungs - EinspeisungAnfangswert von heute
$aktuelleDaten["whEinspeisungHeute"] = round($aktuelleDaten["whEinspeisungHeute"],0);
$funktionen->log_schreiben("Einspeisung Wh Heute ".$aktuelleDaten["whEinspeisungHeute"]," Wh",8);
$aktuelleDaten["ZusatzQuery"] .= ",WhEinspeisungHeute=".$aktuelleDaten["whEinspeisungHeute"]; // Alle Werte der ZUsatzquarry landen in der Tabelle Dashboard WICHTIG: ,
}
// Wh Zähler Einspeisung Ende
if($DB[1][2]["Betriebszustand"] != 0){ //nur Tagsueber berechen. Sonst durch woechentlichen Wechselrichterneustart nachts falsche Werte.
/****************************************************************************
// Verkaufter Strom im Wert von xxx Euro
*****************************************************************************/
$aktuelleDaten["Eu_GesamtEinspeisung"] = ($aktuelleDaten["Wh_Einspeisung"] / 1000) * $Einspeiseverguetung;
$aktuelleDaten["Eu_GesamtEinspeisung"] = round($aktuelleDaten["Eu_GesamtEinspeisung"] ,2);
$funktionen->log_schreiben("Eingespeist Eu Gesamt ".$aktuelleDaten["Eu_GesamtEinspeisung"]," Euro",8);
$aktuelleDaten["ZusatzQuery"] .= ",Eu_GesamtEinspeisung=".$aktuelleDaten["Eu_GesamtEinspeisung"]; // Alle Werte der Zusatzquery landen in der Tabelle Dashboard WICHTIG ist hier $
/****************************************************************************/
/*****************************************************************************
// Eigenverbrauch Gesamt in Wh
// Wh (PV Ertrag Gesamt) - Wh (Eingespeist) ergibt den selbst verbrauchten PV Strom aus Gesamtzähler Energymeter und Wechselrichter
*****************************************************************************/
$aktuelleDaten["Wh_GesamtEigenverbrauch"] = $DB[1][3]["Wh_Gesamt"] - $aktuelleDaten["Wh_Einspeisung"];
$aktuelleDaten["Wh_GesamtEigenverbrauch"] = round($aktuelleDaten["Wh_GesamtEigenverbrauch"],0);
$funktionen->log_schreiben("Eigenverbrauch Wh Gesamt ".$aktuelleDaten["Wh_GesamtEigenverbrauch"]," Wh",8);
// $aktuelleDaten["ZusatzQuery"] .= ",Wh_GesamtEigenverbrauch=".$aktuelleDaten["Wh_GesamtEigenverbrauch"]; // Alle Werte der Zusatzquery landen in der Tabelle Dashboard WICHTIG ist hier das Komma am Anfang ,
/****************************************************************************
/****************************************************************************
// Eigenverbrauchter Strom im Wert von xxx Euro (Strompreis Minus Einspeisevergütung) aus Gesamtzähler Energymeter
*****************************************************************************/
// $aktuelleDaten["Eu_GesamtEigenverbrauch"] = ($aktuelleDaten["Wh_GesamtEigenverbrauch"] / 1000) * ($Strompreis - $Einspeiseverguetung);
// $aktuelleDaten["Eu_GesamtEigenverbrauch"] = round($aktuelleDaten["Eu_GesamtEigenverbrauch"] ,2);
// $funktionen->log_schreiben("Eigenverbrauch Eu Gesamt ".$aktuelleDaten["Eu_GesamtEigenverbrauch"]," Euro",8);
// $aktuelleDaten["ZusatzQuery"] .= ",Eu_GesamtEigenverbrauch=".$aktuelleDaten["Eu_GesamtEigenverbrauch"]; // Alle Werte der Zusatzquery landen in der Tabelle Dashboard WICHTIG ist hier das Komma am Anfang
/****************************************************************************/
/****************************************************************************
// Eigenverbrauchter Strom im Wert von xxx Euro (Strompreis Minus Einspeisevergütung) aus Gesamtzähler Energymeter P
*****************************************************************************/
$aktuelleDaten["Eu_PreisperiodeEigenverbrauch"] = (($aktuelleDaten["Wh_GesamtEigenverbrauch"]- $PreisperiodeWhEigenverbrauchAnfang) / 1000) * ($Strompreis - $Einspeiseverguetung);
$aktuelleDaten["Eu_GesamtEigenverbrauch"] = $aktuelleDaten["Eu_PreisperiodeEigenverbrauch"] + $PreisperiodeEigenverbrauchEuAnfang ;
$aktuelleDaten["Eu_GesamtEigenverbrauch"] = round($aktuelleDaten["Eu_GesamtEigenverbrauch"] ,2);
$funktionen->log_schreiben("PreisperiodeEingenverbrauchsEuAnfang ".$PreisperiodeEigenverbrauchEuAnfang," Euro",8);
$funktionen->log_schreiben("Eu_PreisperiodeEigenverbrauch ".$aktuelleDaten["Eu_PreisperiodeEigenverbrauch"]," Euro",8);
$funktionen->log_schreiben("Eu_GesamtEigenverbrauch ".$aktuelleDaten["Eu_GesamtEigenverbrauch"]," Euro",8);
$aktuelleDaten["ZusatzQuery"] .= ",Eu_GesamtEigenverbrauch=".$aktuelleDaten["Eu_GesamtEigenverbrauch"]; // Alle Werte der Zusatzquery landen in der Tabelle Dashboard WICHTIG ist$
/****************************************************************************/
}
?>
Allerdings kann ich nicht garantieren, das das bei deinem System auch funktioniert. Ein paar Kommentare sind in dem Programmcode drin.