Ich habe mit dem wenigen php-Wissen versucht eine openWB_math (siehe Anhang) für meine Bedürfnisse zu schreiben. Bestimmt kann man die Datei verschlanken und professioneller schreiben, aber zumindest kommen die nötigen Daten bei der openWB an.
Allerdings bekomme ich im php.log folgende Fehlermeldungen:
Hier meine openWB_math:
Code: Alles auswählen
<?php
/*****************************************************************************
// Daten an die openWB Wallbox per MQTT senden.
*****************************************************************************/
$openWB_DB = "master"; // Datenbankname des Wechselrichters
$openWB_MQTT = array();
$timeFilter = " time >= ".strtotime(date("Y-m-d"))."000ms and time <= ".strtotime(date("Y-m-d")." + 1day")."000ms ";
//PV
$Measurement = "PV";
$sql = urlencode('select * from '.$Measurement.' order by time desc limit 1');
$ch = curl_init('http://localhost/query?db='.$openWB_DB.'&precision=s&q='.$sql);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 15); //timeout in second s
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_PORT, 8086);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Ergebnis["result"] = curl_exec($ch);
$Ergebnis["rc_info"] = curl_getinfo ($ch);
$Ergebnis["JSON_Ausgabe"] = json_decode($Ergebnis["result"],true,10);
$Ergebnis["errorno"] = curl_errno($ch);
if ($Ergebnis["rc_info"]["http_code"] == 200 or $Ergebnis["rc_info"]["http_code"] == 204) {
$Ergebnis["Ausgabe"] = true;
}
curl_close($ch);
unset($ch);
if (!isset($Ergebnis["JSON_Ausgabe"]["results"][0]["series"])) {
log_schreiben("Es fehlt die Datenbank master mit dem Measurement PV oder sie ist leer.","|- ",3);
log_schreiben("Fehler: ".$Ergebnis["JSON_Ausgabe"]["results"][0]["error"],"|- ",4);
}
else {
for ($h = 1; $h < count($Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $h++) {
$DB[$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"][$h]] =
$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$h];
}
log_schreiben("Datenbank: solaranzeige DB ".print_r($DB,1)," ",10);
}
$Ergebnis = array();
// Summe
$Measurement = "Summen";
$sql = urlencode('select * from '.$Measurement.' order by time desc limit 1');
$ch = curl_init('http://localhost/query?db='.$openWB_DB.'&precision=s&q='.$sql);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 15); //timeout in second s
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_PORT, 8086);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Ergebnis["result"] = curl_exec($ch);
$Ergebnis["rc_info"] = curl_getinfo ($ch);
$Ergebnis["JSON_Ausgabe"] = json_decode($Ergebnis["result"],true,10);
$Ergebnis["errorno"] = curl_errno($ch);
if ($Ergebnis["rc_info"]["http_code"] == 200 or $Ergebnis["rc_info"]["http_code"] == 204) {
$Ergebnis["Ausgabe"] = true;
}
curl_close($ch);
unset($ch);
if (!isset($Ergebnis["JSON_Ausgabe"]["results"][0]["series"])) {
log_schreiben("Es fehlt die Datenbank master mit dem Measurement Summen oder sie ist leer.","|- ",3);
log_schreiben("Fehler: ".$Ergebnis["JSON_Ausgabe"]["results"][0]["error"],"|- ",4);
}
else {
for ($h = 1; $h < count($Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $h++) {
$DB[$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"][$h]] =
$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$h];
}
log_schreiben("Datenbank: solaranzeige DB ".print_r($DB,1)," ",10);
}
$Ergebnis = array();
// AC
$Measurement = "AC";
$sql = urlencode('select * from '.$Measurement.' order by time desc limit 1');
$ch = curl_init('http://localhost/query?db='.$openWB_DB.'&precision=s&q='.$sql);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 15); //timeout in second s
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_PORT, 8086);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Ergebnis["result"] = curl_exec($ch);
$Ergebnis["rc_info"] = curl_getinfo ($ch);
$Ergebnis["JSON_Ausgabe"] = json_decode($Ergebnis["result"],true,10);
$Ergebnis["errorno"] = curl_errno($ch);
if ($Ergebnis["rc_info"]["http_code"] == 200 or $Ergebnis["rc_info"]["http_code"] == 204) {
$Ergebnis["Ausgabe"] = true;
}
curl_close($ch);
unset($ch);
if (!isset($Ergebnis["JSON_Ausgabe"]["results"][0]["series"])) {
log_schreiben("Es fehlt die Datenbank master mit dem Measurement AC oder sie ist leer.","|- ",3);
log_schreiben("Fehler: ".$Ergebnis["JSON_Ausgabe"]["results"][0]["error"],"|- ",4);
}
else {
for ($h = 1; $h < count($Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $h++) {
$DB[$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"][$h]] =
$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$h];
}
log_schreiben("Datenbank: solaranzeige DB ".print_r($DB,1)," ",10);
}
$Ergebnis = array();
// Batterie
$Measurement = "BAT";
$sql = urlencode('select * from '.$Measurement.' order by time desc limit 1');
$ch = curl_init('http://localhost/query?db='.$openWB_DB.'&precision=s&q='.$sql);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_TIMEOUT, 15); //timeout in second s
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 12);
curl_setopt($ch, CURLOPT_PORT, 8086);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$Ergebnis["result"] = curl_exec($ch);
$Ergebnis["rc_info"] = curl_getinfo ($ch);
$Ergebnis["JSON_Ausgabe"] = json_decode($Ergebnis["result"],true,10);
$Ergebnis["errorno"] = curl_errno($ch);
if ($Ergebnis["rc_info"]["http_code"] == 200 or $Ergebnis["rc_info"]["http_code"] == 204) {
$Ergebnis["Ausgabe"] = true;
}
curl_close($ch);
unset($ch);
if (!isset($Ergebnis["JSON_Ausgabe"]["results"][0]["series"])) {
log_schreiben("Es fehlt die Datenbank master mit dem Measurement BAT oder sie ist leer.","|- ",3);
log_schreiben("Fehler: ".$Ergebnis["JSON_Ausgabe"]["results"][0]["error"],"|- ",4);
}
else {
for ($h = 1; $h < count($Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"]); $h++) {
$DB[$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["columns"][$h]] =
$Ergebnis["JSON_Ausgabe"]["results"][0]["series"][0]["values"][0][$h];
}
log_schreiben("Datenbank: solaranzeige DB ".print_r($DB,1)," ",10);
}
$Ergebnis = array();
//Für das PV Modul:
$openWB_MQTT["openWB/set/pv/1/W"] = "-".round($DB["PVLeistungTotal"]);
$openWB_MQTT["openWB/set/pv/1/WhCounter"] = $DB["PVHeute"];
//Für das EVU Modul:
$openWB_MQTT["openWB/set/evu/W"] = $DB["EinspeisungBezug"];
$openWB_MQTT["openWB/set/evu/WhImported"] = $DB["BezugHeute"];
$openWB_MQTT["openWB/set/evu/WhExported"] = $DB["EinspeisungHeute"];
$openWB_MQTT["openWB/set/evu/HzFrequenz"] = $DB["Frequenz"];
$openWB_MQTT["openWB/set/evu/VPhase1"] = $DB["SpannungL1"];
$openWB_MQTT["openWB/set/evu/VPhase2"] = $DB["SpannungL2"];
$openWB_MQTT["openWB/set/evu/VPhase3"] = $DB["SpannungL3"];
$openWB_MQTT["openWB/set/evu/APhase1"] = $DB["NETZStromL1"];
$openWB_MQTT["openWB/set/evu/APhase2"] = $DB["NETZStromL2"];
$openWB_MQTT["openWB/set/evu/APhase3"] = $DB["NETZStromL3"];
$openWB_MQTT["openWB/set/evu/WPhase1"] = $DB["NETZLeistungL1"];
$openWB_MQTT["openWB/set/evu/WPhase2"] = $DB["NETZLeistungL2"];
$openWB_MQTT["openWB/set/evu/WPhase3"] = $DB["NETZLeistungL3"];
//Für das Speicher Modul:
$openWB_MQTT["openWB/set/houseBattery/W"] = $DB["Leistung"];
$openWB_MQTT["openWB/set/houseBattery/%Soc"] = $DB["SOC"];
$openWB_MQTT["openWB/set/houseBattery/WhImported"] = $DB["BatterieLadungHeute"];
$openWB_MQTT["openWB/set/houseBattery/WhExported"] = $DB["BatterieEntladungHeute"];
// Die Pipe wird geöffnet
// Ab hier werden die MQTT Topics in die Pipe geschrieben
$fifoPath = "/var/www/pipe/pipe";
if (! file_exists($fifoPath)) {
$funktionen->log_schreiben("Pipe wird neu erstellt."," ",5);
posix_mkfifo($fifoPath, 0644);
}
$fifo = fopen($fifoPath, "w+");
if (is_resource($fifo)) {
foreach($openWB_MQTT as $key=>$wert) {
$rc = fwrite($fifo, $key." ".$wert."\r\n");
$funktionen->log_schreiben($key." ".$wert." rc: ".$rc," ",10);
}
$rc = fwrite($fifo,"|");
fclose($fifo);
}
?>
Vielen Dank