Seite 1 von 1

Beispiel wall-math.php für vzlogger

Verfasst: Mi 23. Nov 2022, 13:19
von Fedi
Hallo zusammen,

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 DB von vzlogger heißt in der Influx vzlogger
Die Tabelle Wirkleistung
Beides müsst ihr natürlich ggf. anpassen.

Vielleicht hilft sie dem einen oder anderen.

Sonnige Grüße
Fedi