Hi Timo,
vielen Dank erneut für Deine Antwort. Ich habe mich gestern noch daran gemacht und von dem "neuen PV Überschussladen Vorschlag von Ulrich" zurückgeschaltet auf das "alte Verfahren". Scheint jetzt soweit auch ganz gut zu laufen.
Wie Du gesagt hast, ich zähle zu dem Eigenverbrauch jetzt auch die Batterieleistung. Über die Funktion abs habe ich sichergestellt, dass sowohl laden als auch entladen gleichermaßen berücksichtigt werden. Wenn ich über PV lade, dann hat bei mir der Akku immer Vorrang. Siehe meine Spaghetti Code hier ...
Code: Alles auswählen
<?php
/******************************************************************************
// Hie können eigene Berechnungen gemacht werden, wenn das nötig ist.
// Es stehen alle Felder folgender Measurements zur Verfügung:
// $INI ==> Werte der INI Datei -> Array
// $wbSteuerung ==> Measurement 'Wallbox' der Datenbank 'steuerung' -> Array
// $DB1 ==> Measurement 'PV' der Datenbank des Wechselrichters -> Array
// $DB2 ==> Measurement 'Batterie' der Datenbank des BMS -> Array
// $DB3 ==> Measurement 'Summen' der Datenbank der Wallbox -> Array
// $DB4 ==> Measurement 'Service' der Datenbank der Wallbox -> Array
// $DB5 ==> Measurement 'Pack1' der Datenbank des BMS -> Array
// $DB6 ==> Measurement 'Ladung' der Datenbank 'steuerung' -> Array
// $DB7 ==> Measurement 'AC' der Datenbank der Wallbox -> Array
//
// Die Steuerung benötigt folgende Variablen, die man hier noch beeinflussen
// kann. Bitte hier nur benutzen, wenn man sie auch anders berechnen möchte.
// Ansonsten hier nicht benutzen.
//
//
// $Eigenverbrauch = geschätzter Eigenverbrauch
//
//
******************************************************************************/
$wbDatenbankname = "solaranzeige";
$wbMeasurement = "AC";
$wbMeasurement2 = "Batterie_1";
// $UserDB = Datenbank solaranzeige Measurement: AC
$ch = curl_init('http://localhost/query?db='.$wbDatenbankname.'&precision=s&q='.urlencode('select * from '.$wbMeasurement.' order by time desc limit 1'));
$rc = datenbank($ch);
if (!isset($rc["JSON_Ausgabe"]["results"][0]["series"])) {
log_schreiben("Es fehlt die Datenbank '".$wbDatenbankname."' mit dem Measurement Service oder sie ist leer.","|- ",1);
}
for ($z = 1; $z < count($rc["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $z++) {
$UserDB[$rc["JSON_Ausgabe"]["results"][0]["series"][0]["columns"][$z]] = $rc["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$z];
}
// $UserDB2 = Datenbank solaranzeige Measurement: Batterie_1
$ch2 = curl_init('http://localhost/query?db='.$wbDatenbankname.'&precision=s&q='.urlencode('select * from '.$wbMeasurement2.' order by time desc limit 1'));
$rc2 = datenbank($ch2);
if (!isset($rc2["JSON_Ausgabe"]["results"][0]["series"])) {
log_schreiben("Es fehlt die Datenbank '".$wbDatenbankname."' mit dem Measurement Service oder sie ist leer.","|- ",1);
}
for ($y = 1; $y < count($rc2["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $y++) {
$UserDB2[$rc2["JSON_Ausgabe"]["results"][0]["series"][0]["columns"][$y]] = $rc2["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$y];
}
log_schreiben("Aktueller Hausverbrauch ohne Akku aber inkl. Wallbox: ".$UserDB["Verbrauch"]." Watt", "", 3);
log_schreiben("Aktuelle Ladeleistung der Wallbox: ".$DB7["Leistung_gesamt"]." Watt", "", 3);
log_schreiben("Aktuelle Lade- Entladeleistung der Batterie 1: ".$UserDB2["Leistung"]." Watt", "", 3);
$Batterieleistung = abs($UserDB2["Leistung"]);
log_schreiben("Aktuelle abs Lade- Entladeleistung der Batterie 1: ".$Batterieleistung." Watt", "", 3);
$Eigenverbrauch = $UserDB["Verbrauch"] - $DB7["Leistung_gesamt"] + $Batterieleistung + 300;
log_schreiben( "Errechneter Eigenverbrauch = Hausverbrauch ohne Akku aber inkl. Wallbox - Wallbox + Ladeleistung Batterie + 300 Watt Puffer: ".$Eigenverbrauch." Watt", "", 3 );
return;
?>
Hoffe es hilft jemand anderes?
Danke