Langsam bin ich ratlos, ich kann dir nicht sagen wo die Fehlermeldung herkommt.
Ich habe mal darüber geschlafen und deinen Post gelesen.
Heute habe ich Folgendes gemacht:
Beide Einträge für BYD aus der crontab entfernt. -> Fehler bleibt weiter. Uuups...
Also lag es nicht an deiner tollen Arbeit.
Mal ein Update machen? Ich bin hier immer auf dem Trip gewesen, never change a running System. Also ein Update von Solaranzeige gemacht und der Fehler ist,.... Tadaaaa -> weg.
Mist, dann muss ich mal meine Strategien überdenken. Entschuldige vielmals! Ich dachte mir, was läuft das läuft.
Sicherheitshalber könntest Du auch mal Deine aktuelle "byd_steuerung.php" hier anhängen. Die Prognose ist inzwischen vorhanden, oder wie ist das Problem mit den fehlenden Datenfeldern für die Abfragen in der byd_steuerung.php aktuell gelöst?
Das mache ich gerne.
Für die Prognose hatte ich bisher noch keine Zeit. Ich klaue mir immer mal hier 5 Minuten, mal dort. Dazu, um die Prognose einzurichten, brauche ich Zeit zu lesen, wie ihr das eingestellt habt. Ich will ja nicht wieder alles falsch machen. Accounts bei OpenWeathermap und Wounderground nutze ich ja auch schon länger (HomeMatic und Solaranzeige).
Code: Alles auswählen
#!/usr/bin/php
<?php
/*****************************************************************************
// Solaranzeige Projekt Copyright (C) [2015-2020] [Ulrich Kunz]
//
// Dieses Programm ist freie Software. Sie können es unter den Bedingungen
// der GNU General Public License, wie von der Free Software Foundation
// veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß
// Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
//
// Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es
// Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne
// die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN
// BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
//
// Ein original Exemplar der GNU General Public License finden Sie hier:
// http://www.gnu.org/licenses/
//
// Dies ist ein Programmteil des Programms "Solaranzeige"
//
// Es dient der Steuerung einer BYD HVS/HVM mit Kostal Plenticore WR
//
*****************************************************************************/
setlocale(LC_TIME,"de_DE.utf8");
$path_parts = pathinfo($argv[0]);
$Pfad = $path_parts['dirname'];
if (is_file($Pfad."/1.user.config.php")) {
// Handelt es sich um ein Multi Regler System?
require($Pfad."/1.user.config.php");
}
else {
require($Pfad."/user.config.php");
}
require_once($Pfad."/phpinc/funktionen.inc.php");
if (!isset($funktionen)) {
$funktionen = new funktionen();
}
// Im Fall, dass man die Device manuell eingeben muss
if (isset($USBDevice) and !empty($USBDevice)) {
$USBRegler = $USBDevice;
}
// Ist der Standort in der user.config.php angegeben?
// Wenn nicht dann Standort Frankfurt nehmen
if (isset($Breitengrad)) {
$breite = $Breitengrad;
} else {
$breite = 53.3807019;
}
if (isset($Laengengrad)) {
$laenge = $Laengengrad;
} else {
$laenge = 10.0300811;
}
// Wann ist Mitternacht?
$HeuteMitternacht = strtotime('today midnight');
// Sonnenaufgang und Sonnenuntergang berechnen (default Standort ist Frankfurt)
$now = time();
$gmt_offset = 1 + date("I");
$zenith = 50 / 60;
$zenith = $zenith + 90;
$Sonnenuntergang = date_sunset($now, SUNFUNCS_RET_TIMESTAMP, $breite, $laenge, $zenith, $gmt_offset);
$Sonnenaufgang = date_sunrise($now, SUNFUNCS_RET_TIMESTAMP, $breite, $laenge, $zenith, $gmt_offset);
$Tracelevel = 10; // 1 bis 10 10 = Debug
$RemoteDaten = true;
$Device = "WR"; // WR = Wechselrichter
$aktuelleDaten = array();
$Version = "";
$Start = time(); // Timestamp festhalten
$aktuelleDaten["Regler"] = $Regler;
$aktuelleDaten["Objekt"] = $Objekt;
$aktuelleDaten["Firmware"] = 1.3;
//$aktuelleDaten["Produkt"] = $aktuelleDaten["Seriennummer"];
/****************************************************************************
// InfluxDB Zugangsdaten ...stehen in der user.config.php
// falls nicht, sind das hier die default Werte.
****************************************************************************/
$aktuelleDaten["InfluxAdresse"] = $InfluxAdresse;
$aktuelleDaten["InfluxPort"] = $InfluxPort;
$aktuelleDaten["InfluxUser"] = $InfluxUser;
$aktuelleDaten["InfluxPassword"] = $InfluxPassword;
$aktuelleDaten["InfluxDBName"] = $InfluxDBName;
$aktuelleDaten["InfluxDaylight"] = $InfluxDaylight;
$aktuelleDaten["InfluxDBLokal"] = $InfluxDBLokal;
$aktuelleDaten["InfluxSSL"] = $InfluxSSL;
$aktuelleDaten["Demodaten"] = false;
$aktuelleDaten["Timestamp"] = $Start;
$aktuelleDaten["InfluxAdresse"] = "localhost";
$aktuelleDaten["InfluxPort"] = "8086";
$aktuelleDaten["InfluxDBName"] = $aktuelleDaten["InfluxDBLokal"];
$aktuelleDaten["InfluxSSL"] = false;
sleep(20);
$funktionen->log_schreiben("------------- Start byd_steuerung.php --------------- ","|--",6);
$COM1 = fsockopen($WR_IP, $WR_Port, $errno, $errstr, 5); // 5 = Timeout in Sekunden
if (!is_resource($COM1)) {
$funktionen->log_schreiben("Kein Kontakt zum Wechselrichter ".$WR_IP." Port: ".$WR_Port,"XX ",3);
$funktionen->log_schreiben("Exit.... ","XX ",9);
goto Ausgang;
}
$i = 1;
{
/****************************************************************************
// CvT Anpassungen Auslesen BYD, Voltage, Temperatur, SOH
****************************************************************************/
$shell_befehl = "perl /var/www/html/readBYD.pl";
#print_r ($shell_befehl);
$temp = shell_exec($shell_befehl);
$Einzelwerte = preg_split("/[\s,\n ]+/", $temp);
if ($Einzelwerte[0] == 0) {
goto Ausgang;
}
$aktuelleDaten["CellTempHigh"] = $Einzelwerte[4];
$aktuelleDaten["CellTempLow"] = $Einzelwerte[5];
$aktuelleDaten["CellVoltHigh"] = $Einzelwerte[6];
$aktuelleDaten["CellVoltLow"] = $Einzelwerte[7];
$aktuelleDaten["SOH"] = $Einzelwerte[11];
/****************************************************************************
// CvT Anpassungen Plenticore auslesen, Batterieinformationen, Stati
****************************************************************************/
// Neue Register Firmware 1.44
$rc = $funktionen->kostal_register_lesen($COM1,"040E","0002","Float");
$aktuelleDaten["Max_Charge_Limit"] = $rc["Wert"];
$rc = $funktionen->kostal_register_lesen($COM1,"0410","0002","Float");
$aktuelleDaten["Max_Discharge_Limit"] = $rc["Wert"];
$rc = $funktionen->kostal_register_lesen($COM1,"0438","0001","U16-1");
$aktuelleDaten["ExternalControl"] = $rc["Wert"];
$rc = $funktionen->kostal_register_lesen($COM1,"0412","0002","Float");
$aktuelleDaten["Min_SOC_Rel"] = $rc["Wert"];
$rc = $funktionen->kostal_register_lesen($COM1,"0414","0002","Float");
$aktuelleDaten["Max_SOC_Rel"] = $rc["Wert"];
$rc = $funktionen->kostal_register_lesen($COM1,"0202","0001","U16-1");
$aktuelleDaten["Bat_Act_SOC"] = $rc["Wert"];
$rc = $funktionen->kostal_register_lesen($COM1,"0068","0002","U32");
$aktuelleDaten["Energiemanager_Status"] = $rc["Wert"];
$SMTest = $rc["Wert"];
if ($SMTest == 0) {
$aktuelleDaten["BatterieStatus"] = "Normal";
}
if ($SMTest == 64) {
$aktuelleDaten["BatterieStatus"] = "Tiefentladeschutz";
}
if ($SMTest == 32) {
$aktuelleDaten["BatterieStatus"] = "Ausgleichsladung";
}
if ($SMTest == 16) {
$aktuelleDaten["BatterieStatus"] = "Ruhe2";
}
if ($SMTest == 8) {
$aktuelleDaten["BatterieStatus"] = "Ruhe1";
}
if ($SMTest == 2) {
$aktuelleDaten["BatterieStatus"] = "Notladung";
}
/****************************************************************************
// Einfache Steuerungen anhand der ausgelesenen Daten für Ladung und SOC
****************************************************************************/
$CellVoltHigh = $aktuelleDaten["CellVoltHigh"];
if ($aktuelleDaten["Max_SOC_Rel"] < 100) {
if ($aktuelleDaten["Bat_Act_SOC"] > 80) {
$shell_befehl = "python3 /solaranzeige/Kostal_BatMaxSOC.py -s ".$aktuelleDaten["Max_SOC_Rel"];
$temp = shell_exec($shell_befehl);
$funktionen->log_schreiben("MaxSOC wiederholen bei ungleich 100 Prozent ".$aktuelleDaten["Max_SOC_Rel"]," ",5);
}
}
elseif ((($aktuelleDaten["Bat_Act_SOC"] == 100) or ($CellVoltHigh > 3.6)) and ($aktuelleDaten["ExternalControl"] > 0)) {
$shell_befehl = "python3 /solaranzeige/Kostal_BatMaxSOC.py -s 90";
$temp = shell_exec($shell_befehl);
$funktionen->log_schreiben("MaxSOC auf 90 setzen wegen 100 Prozent SOC oder CellVoltHigh ".$aktuelleDaten["Bat_Act_SOC"]." ".$CellVoltHigh," ",5);
}
if ($aktuelleDaten["ExternalControl"] > 1) {
if (($aktuelleDaten["Bat_Act_SOC"] > 92) and ($aktuelleDaten["Bat_Act_SOC"] < 97)) {
$shell_befehl = "python3 /solaranzeige/Kostal_BatMaxChargePower.py -s 3000";
$temp = shell_exec($shell_befehl);
}
if ($aktuelleDaten["Bat_Act_SOC"] > 96) {
$shell_befehl = "python3 /solaranzeige/Kostal_BatMaxChargePower.py -s 2000";
$temp = shell_exec($shell_befehl);
}
if (($aktuelleDaten["Bat_Act_SOC"] < 93) and ($aktuelleDaten["Max_Charge_Limit"] < 3005)) {
$shell_befehl = "python3 /solaranzeige/Kostal_BatMaxChargePower.py -s 5500";
$temp = shell_exec($shell_befehl);
}
}
$CellVoltLow = $aktuelleDaten["CellVoltLow"];
if ($CellVoltLow < 2.9){
$shell_befehl = "python3 /solaranzeige/Kostal_Bat15000.py";
$temp = shell_exec($shell_befehl);
$funktionen->log_schreiben("Batterieentladung gestoppt wegen CellVoltLow ".$aktuelleDaten["Bat_Act_SOC"]." ".$CellVoltLow," ",5);
}
/****************************************************************************
// Einfache Steuerungen für Batterie Modus (intelligent oder normal)
****************************************************************************/
// Abfrage, wie hoch sind die prognostizierten Sonnenstunden
// Abhaengig davon wird die Intelligente Batteriesteuerung ein-/ausgeschaltet
$Sonne = "2"; // Hier die benoetigten Sonnenstundeneintragen fuer Nachmittag!
$MinPrognose = "22000"; // Hier die Mindesprognose eintragen
$MinSOC = "40"; // Hier den Minimum-SOC eintragen
$Heute = $HeuteMitternacht + (60 * 60 * 23);
$HeuteNachmittag = $HeuteMitternacht + (60 * 60 * 12);
$aktuelleDaten["Query"] = "db=" . $InfluxDBLokal . "&q=" . urlencode("select last(SOC) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$SOC = $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $InfluxDBLokal . "&q=" . urlencode("select (sum(eigenePrognose) + sum(eigenePrognoseL)) / 2 FROM WetterPrognose where time > " . $HeuteMitternacht . "000000000 and time <= " . $Heute . "000000000");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$Prognose = $rc["results"][0]["series"][0]["values"][0][1];
$aktuelleDaten["Query"] = "db=" . $InfluxDBLokal . "&q=" . urlencode("select sum(Sonnenscheindauer1h) FROM WetterPrognose where time > " . $HeuteNachmittag . "000000000 and time <= " . $Heute . "000000000");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$Sonnenschein = $rc["results"][0]["series"][0]["values"][0][1];
$funktionen->log_schreiben(var_export($rc, 1), "* ", 10);
if ($SOC < $MinSOC) {
// Wert ist nicht erreicht.
$Nachricht = "Intelligente Batteriesteuerung aus, SOC: " . $SOC . " %";
$aktuelleDaten["BatterieSteuerung"] = "I-St aus -> SOC";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_BatN.py";
$temp = shell_exec($shell_befehl);
} elseif ($Prognose < $MinPrognose) {
// Wert ist nicht erreicht.
$Nachricht = "Intelligente Batteriesteuerung aus, Prognose: " . $Prognose . " W";
$aktuelleDaten["BatterieSteuerung"] = "I-St aus -> Prognose";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_BatN.py";
$temp = shell_exec($shell_befehl);
} elseif ($Sonnenschein < $Sonne) {
// Wert ist nicht erreicht.
$Nachricht = "Intelligente Batteriesteuerung aus, SonnenStd: " . $Sonnenschein . " Std";
$aktuelleDaten["BatterieSteuerung"] = "I-St aus -> Sonne";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_BatN.py";
$temp = shell_exec($shell_befehl);
} else {
// Wert ist erreicht.
$Nachricht = "Intelligente Batteriesteuerung ein, Prognose: " . $Prognose . " W";
$aktuelleDaten["BatterieSteuerung"] = "Intel.-St ein";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_BatI.py";
$temp = shell_exec($shell_befehl);
}
/****************************************************************************
// Einfache Steuerungen für Batterie Nutzung
****************************************************************************/
// Abfrage, wie hoch sind die prognostizierten Ertraege
// Abhaengig davon wird die Batterienutzung ein-/ausgeschaltet
$MinPrognose = "18000"; // Hier die Mindestprognose eintragen
$MinSOC = "10"; // Hier den Minimum-SOC eintragen
$NightSOC = "75"; // Hier den Minimum-SOC fuer die Nacht eintragen, damit eingeschaltet wird
$DaySOC = "90"; // Hier den Minimum-SOC fuer den Tag zur sofortigen Umschaltung eintragen
$aktuelleDaten["BatterieNutzung"] = "";
$aktuelleDaten["Query"] = "db=" . $InfluxDBLokal . "&q=" . urlencode("select last(BatterieNutzung) from Batterie");
$rc = $funktionen->po_influxdb_lesen($aktuelleDaten);
$LBatNutzung = $rc["results"][0]["series"][0]["values"][0][1];
if (empty($LBatNutzung)) {
$LBatNutzung = "Noch nicht gesetzt";
}
if ($SOC < 1 or $SOC > 100) {
goto NoValue;
}
if ($SOC < $MinSOC) {
// Wert ist nicht erreicht.
if ($Prognose < $MinPrognose) {
// Wert ist nicht erreicht.
$Nachricht = "Batterienutzung aus, Prognose: " . $Prognose . " W";
$aktuelleDaten["BatterieNutzung"] = "Nutzung aus -> SOC";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_Bat15000.py";
$temp = shell_exec($shell_befehl);
}
}
// Nur im Winter !!!
if ($SOC < 25) {
// Wert ist erreicht.
if (date("n") > 10 or date("n") < 2) {
// November inkl. Januar)
if (date("G") > 07 and date("G") < 20) {
// nach 07:00 Uhr am Tage
$Nachricht = "Batterienutzung aus, Winter" . $Prognose . " W";
$aktuelleDaten["BatterieNutzung"] = "Nutzung aus -> Winter";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_BatTC1.py";
$temp = shell_exec($shell_befehl);
$shell_befehl = "python3 /solaranzeige/Kostal_Bat15000.py";
$temp = shell_exec($shell_befehl);
}
}
}
if ($SOC > $DaySOC) {
// Wert ist erreicht.
$Nachricht = "Batterienutzung ein, SOC: " . $SOC . " %";
$aktuelleDaten["BatterieNutzung"] = "Nutzung ein -> SOC";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_Bat50.py";
$temp = shell_exec($shell_befehl);
// Nicht Winter, dann TimeControl sofort aus !!!
if (date("n") < 11 and date("n") > 1) {
$shell_befehl = "python3 /solaranzeige/Kostal_BatTC0.py";
$temp = shell_exec($shell_befehl);
}
}
if ($SOC > $MinSOC) {
// Wert ist erreicht
if ($Prognose > $MinPrognose) {
// Wert ist erreicht.
$Nachricht = "Batterienutzung ein, Prognose: " . $Prognose . " W";
$aktuelleDaten["BatterieNutzung"] = "Nutzung ein -> Prognose";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_Bat50.py";
$temp = shell_exec($shell_befehl);
$shell_befehl = "python3 /solaranzeige/Kostal_BatTC0.py";
$temp = shell_exec($shell_befehl);
}
}
if ($SOC > $NightSOC) {
// Wert ist erreicht.
if (date("G") > 19) {
// nach 20:00 Uhr am Tage
$Nachricht = "Batterienutzung f�r die Nacht ein, SOC: " . $SOC . " %";
$aktuelleDaten["BatterieNutzung"] = "Nutzung ein -> NightSOC";
$funktionen->log_schreiben($Nachricht, "* ", 8);
$shell_befehl = "python3 /solaranzeige/Kostal_Bat50.py";
$temp = shell_exec($shell_befehl);
$shell_befehl = "python3 /solaranzeige/Kostal_BatTC0.py";
$temp = shell_exec($shell_befehl);
}
}
NoValue:;
if (empty($aktuelleDaten["BatterieNutzung"])) {
$aktuelleDaten["BatterieNutzung"] = $LBatNutzung;
}
/****************************************************************************
// Weitere Statusabfragen Batterie / Schaltausgang
****************************************************************************/
$shell_befehl = "python3 /solaranzeige/Kostal_NEQ.py";
$temp = shell_exec($shell_befehl);
$Einzelwerte = preg_split("/[\s,\n :}{''\]]+/", $temp);
$aktuelleDaten["Netzbezug"] = $Einzelwerte[5];
if ($aktuelleDaten["Netzbezug"] > 0) {
} else {
$aktuelleDaten["Netzbezug"] = 0;
}
$shell_befehl = "python3 /solaranzeige/Kostal_BatTCQ.py";
$Ergebnis = shell_exec($shell_befehl);
if ($Ergebnis == 0) {
$aktuelleDaten["TimeControl"] = "TC aus";
} else if ($Ergebnis == 1) {
$aktuelleDaten["TimeControl"] = "TC ein";
}
if (empty($aktuelleDaten["TimeControl"])) {
$aktuelleDaten["TimeControl"] = "TC undefiniert";
}
$shell_befehl = "python3 /solaranzeige/Kostal_SMQ.py";
$temp = shell_exec($shell_befehl);
$Einzelwerte = preg_split("/[\s,\n :}{''\]]+/", $temp);
$SMTest = $Einzelwerte[6];
if ($SMTest == 0) {
$aktuelleDaten["Schattenmanagement"] = "SM aus";
}
if ($SMTest == 1) {
$aktuelleDaten["Schattenmanagement"] = "SM West";
}
if ($SMTest == 2) {
$aktuelleDaten["Schattenmanagement"] = "SM Ost";
}
if ($SMTest == 3) {
$aktuelleDaten["Schattenmanagement"] = "SM Ost+West";
}
if (empty($aktuelleDaten["Schattenmanagement"])) {
$aktuelleDaten["Schattenmanagement"] = "SM undefiniert";
}
/****************************************************************************
// ENDE byd_steuerung setzen
****************************************************************************/
/****************************************************************************
// Die Daten werden für die Speicherung vorbereitet.
****************************************************************************/
$aktuelleDaten["Regler"] = $Regler;
$aktuelleDaten["Objekt"] = $Objekt;
$aktuelleDaten["Firmware"] = 1.3;
//$aktuelleDaten["Produkt"] = $aktuelleDaten["Seriennummer"];
/****************************************************************************
// InfluxDB Zugangsdaten ...stehen in der user.config.php
// falls nicht, sind das hier die default Werte.
****************************************************************************/
$aktuelleDaten["InfluxAdresse"] = $InfluxAdresse;
$aktuelleDaten["InfluxPort"] = $InfluxPort;
$aktuelleDaten["InfluxUser"] = $InfluxUser;
$aktuelleDaten["InfluxPassword"] = $InfluxPassword;
$aktuelleDaten["InfluxDBName"] = $InfluxDBName;
$aktuelleDaten["InfluxDaylight"] = $InfluxDaylight;
$aktuelleDaten["InfluxDBLokal"] = $InfluxDBLokal;
$aktuelleDaten["InfluxSSL"] = $InfluxSSL;
/*********************************************************************
// Daten werden in die Influx Datenbank gespeichert. Zuerst Remote
// falls vorhanden, danach lokal
*********************************************************************/
$aktuelleDaten["Timestamp"] = time();
if ($InfluxDB_remote) {
$rc = eigenedaten_speichern($aktuelleDaten);
$funktionen->log_schreiben("Remote: ".$rc,"|* ",7);
#print_r ("Remote Schreiben");
}
$aktuelleDaten["InfluxAdresse"] = "localhost";
$aktuelleDaten["InfluxPort"] = "8086";
$aktuelleDaten["InfluxDBName"] = $aktuelleDaten["InfluxDBLokal"];
$aktuelleDaten["InfluxSSL"] = false;
$rc = eigenedaten_speichern($aktuelleDaten);
$funktionen->log_schreiben("Lokal: ".$rc,"|* ",7);
#print_r ("Lokales Schreiben");
Ausgang:;
}
$funktionen->log_schreiben("------------- Stop eigene_werte.php --------------- ","|--",6);
return;
function eigenedaten_speichern($daten) {
$query = "";
$query .= "Service ";
$query .= "Schattenmanagement=\"" . $daten["Schattenmanagement"] . "\"";
$query .= " ".$daten["Timestamp"];
$query .= "\n";
$query .= "Batterie ";
$query .= "CellTempHigh=".$daten["CellTempHigh"];
$query .= ",CellTempLow=".$daten["CellTempLow"];
$query .= ",CellVoltHigh=".$daten["CellVoltHigh"];
$query .= ",CellVoltLow=".$daten["CellVoltLow"];
$query .= ",SOH=".$daten["SOH"];
$query .= ",Min_SOC_Rel=".$daten["Min_SOC_Rel"];
$query .= ",Max_SOC_Rel=".$daten["Max_SOC_Rel"];
$query .= ",Max_Charge_Limit=".$daten["Max_Charge_Limit"];
$query .= ",Max_Discharge_Limit=".$daten["Max_Discharge_Limit"];
$query .= ",Netzbezug=".$daten["Netzbezug"];
$query .= ",ExternalControl=".$daten["ExternalControl"];
$query .= ",TimeControl=\"" . $daten["TimeControl"] . "\"";
$query .= ",Energiemanager_Status=".$daten["Energiemanager_Status"];
$query .= ",BatterieStatus=\"".$daten["BatterieStatus"]."\"";
$query .= ",BatterieSteuerung=\"".$daten["BatterieSteuerung"]."\"";
$query .= ",BatterieNutzung=\"".$daten["BatterieNutzung"]."\"";
$query .= " ".$daten["Timestamp"];
print_r ($query);
if (isset($daten["InfluxSSL"]) and $daten["InfluxSSL"] == true) {
$ch = curl_init('https://'.$daten["InfluxAdresse"].'/write?db='.$daten["InfluxDBName"].'&precision=s');
}
else {
$ch = curl_init('http://'.$daten["InfluxAdresse"].'/write?db='.$daten["InfluxDBName"].'&precision=s');
}
#print_r ('http://'.$daten["InfluxAdresse"].'/write?db='.$daten["InfluxDBName"].'&precision=s');
$i = 1;
do {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 3); //timeout in second s
curl_setopt($ch, CURLOPT_PORT, $daten["InfluxPort"]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
if (!empty($daten["InfluxUser"]) and !empty($daten["InfluxPassword"])) {
curl_setopt($ch, CURLOPT_USERPWD, $daten["InfluxUser"].":".$daten["InfluxPassword"]);
}
if (isset($daten["InfluxSSL"]) and $daten["InfluxSSL"] == true) {
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
$rc_info = curl_getinfo ($ch);
$Ausgabe = json_decode($result,true);
if (curl_errno($ch)) {
$Meldung = "Curl Fehler! Daten nicht zur InfluxDB gesendet! Curl ErrNo. ".curl_errno($ch);
}
elseif ($rc_info["http_code"] == 200 or $rc_info["http_code"] == 204) {
$Meldung = "OK. Daten zur InfluxDB gesendet.";
break;
}
elseif(empty($Ausgabe["error"])) {
$i++;
continue;
}
else {
$Meldung = "Daten nicht zur InfluxDB gesendet! info: ".print_r($rc_info,1);
}
$i++;
sleep(2);
print_r ($Meldung);
} while ($i < 3);
curl_close($ch);
unset($ch);
return $Meldung;
}
?>
Diese Fehler sind jetzt in der php.log enthalten, wobei die der Keba daraus resultiert, dass diese zur Zeit komplett abgeschaltet ist. Ich hoffe, dass die anderen Fehler nicht dadurch entstehen.
Code: Alles auswählen
[25-May-2022 08:17:22 Europe/Berlin] PHP Notice: Undefined index: series in /var/www/html/byd_steuerung.php on line 223
[25-May-2022 08:17:22 Europe/Berlin] PHP Notice: Undefined index: series in /var/www/html/byd_steuerung.php on line 226
[25-May-2022 08:17:29 Europe/Berlin] PHP Notice: Undefined index: Model in /var/www/html/keba_wallbox.php on line 235
Meine solaranzeige.log sieht (nach dem Hochsetzen der Tracelevel) so aus.
Code: Alles auswählen
25.05. 08:17:01 -Multi Regler Auslesen [Start].
25.05. 08:17:01 -Verarbeitung von: '1.user.config.php' Regler: 17
25.05. 08:17:01 |---------------- Start kostal_plenticore.php ---------------
25.05. 08:17:02 |---------------- Start kostal_plenticore_math.php ---------------
25.05. 08:17:02 -WR1 ohne Berechnung der Summen...
25.05. 08:17:02 -Array
(
[zentralerTimestamp] => 1653459431
[Seriennummer] => 90523UG1
[AnzahlPhasen] => 3
[AnzahlStrings] => 3
[Softwarestand] => 01.65
[Status] => 6
[PV_Leistung] => 5430.66
[Energiemanager_Status] => 0
[BatterieStatus] => Normal
[Verbrauch_Batterie] => 0
[Verbrauch_Netz] => 0
[Gesamtverbrauch_Batterie] => 1041240.56
[Gesamtverbrauch_Netz] => 1598995.13
[Gesamtverbrauch_PV] => 312426.66
[Verbrauch_PV] => 551
[Gesamtverbrauch] => 2943293.25
[AC_Frequenz] => 50.02
[Ausgangslast] => 38.34
[AC_Spannung_R] => 231.73
[AC_Spannung_S] => 233.81
[AC_Spannung_T] => 235.04
[AC_Leistung] => 3204
[AC_Wirkleistung] => 1789.44
[AC_Scheinleistung] => 3668.51
[Bat_Cycles] => 148
[Batteriestrom] => 6.19
[SOC] => 62
[Batteriestatus] => 5.1042355038141E+38
[Batterie_Temperatur] => 22
[Batteriespannung] => 324.17
[WattstundenGesamt] => 3530704.25
[WattstundenGesamtHeute] => 6086.44
[WattstundenGesamtMonat] => 722310.19
[WattstundenGesamtJahr] => 2393652
[PV1_Strom] => 8.56
[PV1_Leistung] => 2725.13
[PV1_Spannung] => 318.14
[PV2_Strom] => 8.5
[PV2_Leistung] => 2705.53
[PV2_Spannung] => 318.46
[PV3_Strom] => 0
[PV3_Leistung] => 0
[PV3_Spannung] => 0
[AC_Solarleistung] => 3204
[Bat_Act_SOC] => 62
[Total_DC_Power] => 5430.66
[Bat_Charge_Power] => -2006
[Laufzeit] => 16981258
[Temp_WR_Cab] => 53
[Temp_WR_Sink] => 57.1
[Temp_WR_Trans] => 47.7
[Max_Charge_Limit] => 1999.83
[Max_Discharge_Limit] => 4214.44
[Min_SOC_Rel] => 5
[Max_SOC_Rel] => 98
[ExternalControl] => 1
[Bat_Work_Capacity] => 8760
[Bat_Seriennummer] => 06362112
[Verbrauch] => 551
[Einspeisung] => 2653
[Ueberschuss] => 2653
[WirkungsgradWR] => 0.58998353791252
[Regler] => 17
[Objekt] => WR1-Plenti
[Firmware] => 01.65
[Produkt] => 90523UG1
[InfluxAdresse] => localhost
[InfluxPort] => 8086
[InfluxUser] =>
[InfluxPassword] =>
[InfluxDBName] => solaranzeige
[InfluxDaylight] =>
[InfluxDBLokal] => solaranzeige
[InfluxSSL] =>
[Demodaten] =>
[AC_Strompreis] => 0.3061
[AC_EEG] => 0.0694
[AC_Einspeiselimit] => 100
[Verbrauch_PV_k] => 551
[Verbrauch_Netz_k] => 0
[Verbrauch_Batterie_k] => 0
[Verbrauch_k] => 551
[Batterie_SOC_Wh] => 4993.2
[Batterie_Ladeleistung] => 2006
[Batterie_Entladeleistung] => 0
[AC_WR_Verbrauch] => 0
[AC_WR_Lieferung] => 3204
[Service_VerlusteWR] => 220.66
[PV_DC_Gesamtleistung2] => 3424.66
[Service_DC_Gesamtinput] => 5430.66
[Service_WirkungsgradWR2] => 0.95936773799133
[Ueberschuss_Batterie] => 0
[AC_EV_Erz] => 2557
[AC_Erz_Summe] => 5210
[AC_EV_Grad] => 0.49078694817658
[AC_EV_Nutzung] => 551
[AC_Autarkiegrad] => 1
[Gesamtleistung] => 0
[Solarleistung] => 0
[ZusatzQuery] => AC Einspeiselimit=100,EV_Erz=2557,Erz_Summe=5210,EV_Grad=0.49078694817658,EV_Nutzung=551,Autarkiegrad=1,WR_Lieferung=3204,WR_Verbrauch=0,Strompreis=0.3061,EEG=0.0694,Verbrauch_PV_k=551,Verbrauch_Netz_k=0,Verbrauch_Batterie_k=0,Verbrauch_k=551,Ueberschuss_Batterie=0 1653459431
Batterie SOC_Wh=4993.2,Ladeleistung=2006,Entladeleistung=0 1653459431
Service VerlusteWR=220.66,DC_Gesamtinput=5430.66,WirkungsgradWR2=0.95936773799133 1653459431
PV DC_Gesamtleistung2=3424.66 1653459431
)
25.05. 08:17:02 * -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
25.05. 08:17:02 -Multi-Regler-Ausgang. 7
25.05. 08:17:09 -OK. Datenübertragung erfolgreich.
25.05. 08:17:09 |---------------- Stop kostal_plenticore.php ---------------
25.05. 08:17:09 -Verarbeitung von: '2.user.config.php' Regler: 17
25.05. 08:17:09 |---------------- Start kostal_plenticore.php ---------------
25.05. 08:17:10 |---------------- Start kostal_plenticore_math.php ---------------
25.05. 08:17:10 -zum Piko: Gesamtberechnungen der Summen wurden durchgeführt
25.05. 08:17:10 -Array
(
[zentralerTimestamp] => 1653459431
[Seriennummer] => 92092TC5
[AnzahlPhasen] => 3
[AnzahlStrings] => 2
[Softwarestand] => 01.65
[Status] => 6
[PV_Leistung] => 308.28
[Energiemanager_Status] => 0
[BatterieStatus] => Normal
[Verbrauch_Batterie] => 0
[Verbrauch_Netz] => 0
[Gesamtverbrauch_Batterie] => 0
[Gesamtverbrauch_Netz] => 0
[Gesamtverbrauch_PV] => 0
[Verbrauch_PV] => 0
[Gesamtverbrauch] => 0.07
[AC_Frequenz] => 50.02
[Ausgangslast] => 0
[AC_Spannung_R] => 231.17
[AC_Spannung_S] => 232.96
[AC_Spannung_T] => 234.09
[AC_Leistung] => 269
[AC_Wirkleistung] => 454.26
[AC_Scheinleistung] => 527.65
[Bat_Cycles] => 0
[Batteriestrom] => -0
[SOC] => 0
[Batteriestatus] => 5.1042355038141E+38
[Batterie_Temperatur] => 0
[Batteriespannung] => 0
[WattstundenGesamt] => 2771609
[WattstundenGesamtHeute] => 379.38
[WattstundenGesamtMonat] => 570170.44
[WattstundenGesamtJahr] => 1843125.38
[PV1_Strom] => 0.58
[PV1_Leistung] => 209.76
[PV1_Spannung] => 363.12
[PV2_Strom] => 0.48
[PV2_Leistung] => 98.52
[PV2_Spannung] => 205.85
[PV3_Strom] => 0
[PV3_Leistung] => 0
[PV3_Spannung] => 0
[AC_Solarleistung] => 269
[Bat_Act_SOC] => 0
[Total_DC_Power] => 308.29
[Bat_Charge_Power] => 0
[Laufzeit] => 11445875
[Temp_WR_Cab] => 41.5
[Temp_WR_Sink] => 36.2
[Temp_WR_Trans] => 35.6
[Max_Charge_Limit] => 0
[Max_Discharge_Limit] => 0
[Min_SOC_Rel] => 0
[Max_SOC_Rel] => 0
[ExternalControl] => 0
[Bat_Work_Capacity] => 0
[Bat_Seriennummer] => 00000000
[Verbrauch] => 0
[Einspeisung] => 269
[Ueberschuss] => 269
[WirkungsgradWR] => 0.87255506179247
[Regler] => 17
[Objekt] => WR2-Piko
[Firmware] => 01.65
[Produkt] => 92092TC5
[InfluxAdresse] =>
[InfluxPort] => 8086
[InfluxUser] =>
[InfluxPassword] =>
[InfluxDBName] => solaranzeige2
[InfluxDaylight] =>
[InfluxDBLokal] => solaranzeige2
[InfluxSSL] =>
[Demodaten] =>
[AC_Strompreis] => 0.3061
[AC_EEG] => 0.0694
[AC_Einspeiselimit] => 100
[Verbrauch_PV_k] => 0
[Verbrauch_Netz_k] => 0
[Verbrauch_Batterie_k] => 0
[Verbrauch_k] => 0
[Batterie_SOC_Wh] => 0
[Batterie_Ladeleistung] => 0
[Batterie_Entladeleistung] => 0
[AC_WR_Verbrauch] => 0
[AC_WR_Lieferung] => 269
[Service_VerlusteWR] => 39.28
[PV_DC_Gesamtleistung2] => 308.28
[Service_DC_Gesamtinput] => 308.28
[Service_WirkungsgradWR2] => 0.87258336577138
[Ueberschuss_Batterie] => 0
[AC_EV_Erz] => 0
[AC_Erz_Summe] => 269
[AC_EV_Grad] => 0
[AC_EV_Nutzung] => 0
[AC_Autarkiegrad] => 0
[Gesamtleistung] => 5738.94
[Solarleistung] => 3473
[Query] => db=solaranzeige&q=select+last%28Solarleistung%29+from+AC
[ZusatzQuery] => AC Einspeiselimit=100,EV_Erz=0,Erz_Summe=269,EV_Grad=0,EV_Nutzung=0,Autarkiegrad=0,WR_Lieferung=269,WR_Verbrauch=0,Strompreis=0.3061,EEG=0.0694,Verbrauch_PV_k=0,Verbrauch_Netz_k=0,Verbrauch_Batterie_k=0,Verbrauch_k=0,Ueberschuss_Batterie=0 1653459431
Batterie SOC_Wh=0,Ladeleistung=0,Entladeleistung=0 1653459431
Service VerlusteWR=39.28,DC_Gesamtinput=308.28,WirkungsgradWR2=0.87258336577138 1653459431
PV DC_Gesamtleistung2=308.28 1653459431
Gesamt Gesamtleistung=5738.94,Solarleistung=3473 1653459431
)
25.05. 08:17:10 * -Daten zur lokalen InfluxDB [ solaranzeige2 ] gesendet.
25.05. 08:17:10 -Multi-Regler-Ausgang. 7
25.05. 08:17:17 -OK. Datenübertragung erfolgreich.
25.05. 08:17:17 |---------------- Stop kostal_plenticore.php ---------------
25.05. 08:17:17 -Verarbeitung von: '3.user.config.php' Regler: 22
25.05. 08:17:17 |---------------- Start kostal_meter.php --------------------
25.05. 08:17:17 o -Hardware Version: 4B
25.05. 08:17:17 * -Daten zur lokalen InfluxDB [ solaranzeige3 ] gesendet.
25.05. 08:17:17 -Multi-Regler-Ausgang. 7
25.05. 08:17:21 |---------------- Start byd_steuerung.php ---------------
25.05. 08:17:22 o -Antwort = 000100000007470304f6d344f9
25.05. 08:17:22 o -Antwort = 000100000007470304b37b4583
25.05. 08:17:22 o -Antwort = 0001000000054703020001
25.05. 08:17:22 o -Antwort = 000100000007470304000040a0
25.05. 08:17:22 o -Antwort = 000100000007470304000042c4
25.05. 08:17:22 o -Antwort = 000100000005470302003e
25.05. 08:17:22 o -Antwort = 00010000000747030400000000
25.05. 08:17:22 * -Meldungsdaten von der InfluxDB gelesen.
25.05. 08:17:22 * -Meldungsdaten von der InfluxDB gelesen.
25.05. 08:17:22 * -Meldungsdaten von der InfluxDB gelesen.
25.05. 08:17:22 * -array (
'results' =>
array (
0 =>
array (
'statement_id' => 0,
),
),
)
25.05. 08:17:22 * -Intelligente Batteriesteuerung aus, Prognose: W
25.05. 08:17:23 * -Meldungsdaten von der InfluxDB gelesen.
25.05. 08:17:24 |---------------- Stop kostal_meter.php -------------------
25.05. 08:17:24 -Verarbeitung von: '4.user.config.php' Regler: 30
25.05. 08:17:24 |---------------- Start keba_wallbox.php ---------------------
25.05. 08:17:28 |* -Lokal: OK. Daten zur InfluxDB gesendet.
25.05. 08:17:28 |---------------- Stop eigene_werte.php ---------------
25.05. 08:17:29 -Modell:
25.05. 08:17:33 -OK. Datenübertragung erfolgreich.
25.05. 08:17:33 |---------------- Stop keba_wallbox.php ---------------------
25.05. 08:17:33 -Multi Regler Auslesen [Stop].
Sollte ich die intelligente Bateriesteuerung wieder im WR aktivieren?
Der WR fängt ja gleichmorgens an den Speicher zu laden, was ich ja gerne auf den Mittag verschoben hätte, lädt auf 100% und fällt dann ab auf 98%. Die ladezeit ist je nach Speicherfülle zwischen 3 1/2 und 4 1/2 Stunden.
So, das war wieder viel zu lang für einen Post. Ich sollte erstmal etwas arbeiten.
Jan