ich habe mir in den letzten Tagen eine wall-math.php i.V.m. vzlogger zusammen geklöppelt. Mangels php Kenntnissen wahrscheinlich mehr schlecht als recht, aber sie funktioniert:
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
//
//
******************************************************************************/
log_schreiben("<> <math> <>");
$vzDatenbank = "vzlogger";
$vzMeasurement = "Wirkleistung";
$Puffer = "200";
log_schreiben("<> Puffer: $Puffer");
$sql = urlencode('select * from '.$vzMeasurement.' order by time desc limit 1');
$vzch = curl_init('http://localhost/query?db='.$vzDatenbank.'&precision=s&q='.$sql);
curl_setopt($vzch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($vzch, CURLOPT_TIMEOUT, 15);
curl_setopt($vzch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($vzch, CURLOPT_PORT, 8086);
curl_setopt($vzch, CURLOPT_RETURNTRANSFER, true);
$vzErgebnis["result"] = curl_exec($vzch);
$vzErgebnis["rc_info"] = curl_getinfo ($vzch);
$vzErgebnis["JSON_Ausgabe"] = json_decode($vzErgebnis["result"],true,10);
$vzErgebnis["errorno"] = curl_errno($vzch);
if ($vzErgebnis["rc_info"]["http_code"] == 200 or $vzErgebnis["rc_info"]["http_code"] == 204)
{
$vzErgebnis["Ausgabe"] = true;
}
curl_close($vzch);
unset($vzch);
if (!isset($vzErgebnis["JSON_Ausgabe"]["results"][0]["series"])) {
log_schreiben("<> Es fehlt die Datenbank mit dem Measurement oder sie ist
leer.","|- ",3);
}
else {
for ($h = 1; $h < count($vzErgebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $h++) {
$Wirkleistung = $vzErgebnis["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$h];
}
//log_schreiben("Datenbank ".print_r($vzDatenbank,1).print_r($vzMeasurement,1) .print_r($DB2,1)," ",3);
log_schreiben("<> aktuelle Wirkleistung (negativ = Einspeisung): ".print_r($Wirkleistung,1)," ",3);
}
$LG = $DB7["Leistung_gesamt"];
log_schreiben("<> Lade-Leistung_gesamt: $LG");
$Solarleistung = $LG - $Wirkleistung - $Puffer;
log_schreiben("<> Überschuss = (Lade-)Leistung_gesamt - Puffer - Wirkleistung ( " . $Solarleistung ." = " . $LG . " - " . $Puffer . " - " . $Wirkleistung . " )");
log_schreiben("<> </math> <>");
return;
?>
Die Tabelle Wirkleistung
Beides müsst ihr natürlich ggf. anpassen.
Vielleicht hilft sie dem einen oder anderen.
Sonnige Grüße
Fedi