So ich hab jetzt eine Lösung gefunden.
Ich lasse das nicht mehr in einem Query, sondern mach es über mehrere Abfragen und dann mit Arrays.
Das Abarbeiten der Funktion dauert jetzt je nach Zeitraum ca. 8 Sekunden.
So sieht das im Moment aus:
PHP-Code:
function hzg_pvbetrieb_einzel($von=NULL, $bis=NULL, $betriebsart=NULL){
include('sql_connect.php');
//*** Betriebsarten***
// 0 = Heizen
// 5 = Warmwasser
// 12 = Photovoltaik
// 17 = ZWE (Zweitwärmeerzäuger -> Heizstab)
$verbrauch = NULL;
$ausgabe = NULL;
$i=0;
// Datum der Form dd.mm.yyyy umwandeln in YYYY-mm-dd
if($von !== NULL && $bis !== NULL){
$vondatum_split = explode(".",$von);
$vondatum = $vondatum_split[2]."-".$vondatum_split[1]."-".$vondatum_split[0];
$bisdatum_split = explode(".",$bis);
$bisdatum = $bisdatum_split[2]."-".$bisdatum_split[1]."-".$bisdatum_split[0];
$zeitraum = " BETWEEN '".$vondatum."' AND '".$bisdatum."'";
}
//===== WEBSERVER-Daten der Heizung ===============
$sql_webquery = "SELECT wp_status, CONVERT(DATE_FORMAT(timestamp,'%Y-%m-%d-%H:%i:00'), DATETIME) AS w_timestamp, TBWsoll
FROM heizung_webdaten
WHERE timestamp ".$zeitraum."
AND wp_status = ".$betriebsart."
ORDER BY w_timestamp";
$result = $mysqli->query($sql_webquery);
echo $mysqli->error;
while($daten = $result->fetch_array(MYSQLI_ASSOC)){
$webdaten[$i] = array('timestamp' => $daten['w_timestamp'],
'wp_status' => $daten['wp_status'],
'TBWsoll' => $daten['TBWsoll']);
$i++;
}
//======= DATEN Stromzähler für Heizung ==============
$sql_hzquery = "SELECT WirkenergieSigmaL_imp, WirkleistungSigmaL, CONVERT(DATE_FORMAT(timestamp,'%Y-%m-%d-%H:%i:00'), DATETIME) AS timestamp
FROM strom_heizungsdaten
WHERE timestamp ".$zeitraum."
ORDER BY timestamp";
$result = $mysqli->query($sql_hzquery);
echo $mysqli->error;
while($hzdaten = $result->fetch_array(MYSQLI_ASSOC)){
$hzstrom[$hzdaten['timestamp']] = array('WirkenergieSigmaL_imp' => $hzdaten['WirkenergieSigmaL_imp'],
'WirkleistungSigmaL' => $hzdaten['WirkleistungSigmaL']);
}
//======= DATEN Stromzähler Haus-Gesamt ===================
$sql_hausstrom = "SELECT CONVERT(DATE_FORMAT(timestamp,'%Y-%m-%d-%H:%i:00'), DATETIME) AS timestamp, WirkleistungSigmaL
FROM strom_hausdaten
WHERE timestamp ".$zeitraum."
ORDER BY timestamp";
$result = $mysqli->query($sql_hausstrom);
echo $mysqli->error;
while($hausdaten = $result->fetch_array(MYSQLI_ASSOC)){
$hausstrom[$hausdaten['timestamp']] = array('WirkleistungSigmaL' => $hausdaten['WirkleistungSigmaL']);
}
//======== DATEN Heizung ================================
$sql_hzgquery = "SELECT datum, uhrzeit, TRLsoll, TRLext, TBW
FROM heizung_daten
WHERE datum ".$zeitraum."
ORDER BY datum, uhrzeit";
$result = $mysqli->query($sql_hzgquery);
echo $mysqli->error;
while($hzgdaten = $result->fetch_array(MYSQLI_ASSOC)){
$zeit_split = explode(":", $hzgdaten['uhrzeit']);
$tstamp = $hzgdaten['datum']." ".$zeit_split[0].":".$zeit_split[1].":00";
$heizungsdaten[$tstamp] = array('TRLsoll' => $hzgdaten['TRLsoll'],
'TRList' => $hzgdaten['TRLext'],
'TBW' => $hzgdaten['TBW']);
}
//======== Zusammenführen der einzelnen Daten in ein Array ========
foreach($webdaten AS $k => $webvalues){
if(!isset($heizungsdaten[$webvalues['timestamp']]['TRLsoll'])){
$heizungsdaten[$webvalues['timestamp']]['TRLsoll'] = NULL;
}
if(!isset($heizungsdaten[$webvalues['timestamp']]['TRList'])){
$heizungsdaten[$webvalues['timestamp']]['TRList'] = NULL;
}
if(!isset($heizungsdaten[$webvalues['timestamp']]['TBW'])){
$heizungsdaten[$webvalues['timestamp']]['TBW'] = NULL;
}
$pv_heizdaten[] = array('timestamp' => $webvalues['timestamp'],
'wp_status' => $webvalues['wp_status'],
'WirkenergieSigmaL_imp' => $hzstrom[$webvalues['timestamp']]['WirkenergieSigmaL_imp'],
'Wirkleistung_hzg' => $hzstrom[$webvalues['timestamp']]['WirkleistungSigmaL'],
'Wirkleistung_haus' => $hausstrom[$webvalues['timestamp']]['WirkleistungSigmaL'],
'TRLsoll' => $heizungsdaten[$webvalues['timestamp']]['TRLsoll'],
'TRList' => $heizungsdaten[$webvalues['timestamp']]['TRList'],
'TBWist' => $heizungsdaten[$webvalues['timestamp']]['TBW'],
'TBWsoll' => $webvalues['TBWsoll']);
}
//=== zusammenhängende Datensätze im Array gruppieren ==
$i=0;
foreach($pv_heizdaten AS $k => $data){
if($k == 0){
$group_data[$i][$k] = array('timestamp' => $data['timestamp'],
'wp_status' => $data['wp_status'],
'WirkenergieSigmaL_imp' => $data['WirkenergieSigmaL_imp'],
'Wirkleistung_hzg' => $data['Wirkleistung_hzg'],
'Wirkleistung_haus' => $data['Wirkleistung_haus'],
'TRLsoll' => $data['TRLsoll'],
'TRList' => $data['TRList'],
'TBWist' => $data['TBWist'],
'TBWsoll' => $data['TBWsoll']);
} else {
$vk = $k-1;
$diff = strtotime($data['timestamp']) - strtotime($pv_heizdaten[$vk]['timestamp']);
if($diff == 60){
$group_data[$i][$k] = array('timestamp' => $data['timestamp'],
'wp_status' => $data['wp_status'],
'WirkenergieSigmaL_imp' => $data['WirkenergieSigmaL_imp'],
'Wirkleistung_hzg' => $data['Wirkleistung_hzg'],
'Wirkleistung_haus' => $data['Wirkleistung_haus'],
'TRLsoll' => $data['TRLsoll'],
'TRList' => $data['TRList'],
'TBWist' => $data['TBWist'],
'TBWsoll' => $data['TBWsoll']);
} else {
$i++;
$group_data[$i][$k] = array('timestamp' => $data['timestamp'],
'wp_status' => $data['wp_status'],
'WirkenergieSigmaL_imp' => $data['WirkenergieSigmaL_imp'],
'Wirkleistung_hzg' => $data['Wirkleistung_hzg'],
'Wirkleistung_haus' => $data['Wirkleistung_haus'],
'TRLsoll' => $data['TRLsoll'],
'TRList' => $data['TRList'],
'TBWist' => $data['TBWist'],
'TBWsoll' => $data['TBWsoll']);
}
}
}
//============== Berechnung des Verbrauchs =================================
return $group_data;
}
//========= Gibt dieses Array aus =============
Abfrage dauerte: 3 Sek.
Array
(
[0] => Array
(
[0] => Array
(
[timestamp] => 2018-05-01 11:40:00
[wp_status] => 12
[WirkenergieSigmaL_imp] => 5624.8008
[Wirkleistung_hzg] => 3.2618
[Wirkleistung_haus] => -2.4285
[TRLsoll] => 56.0
[TRList] => 34.8
[TBWist] => 49.2
[TBWsoll] =>
)
[1] => Array
(
[timestamp] => 2018-05-01 11:41:00
[wp_status] => 12
[WirkenergieSigmaL_imp] => 5624.8379
[Wirkleistung_hzg] => 3.2658
[Wirkleistung_haus] => 1.3247
[TRLsoll] => 56.0
[TRList] => 35.1
[TBWist] => 49.1
[TBWsoll] =>
)
[2] => Array
(
[timestamp] => 2018-05-01 11:42:00
[wp_status] => 12
[WirkenergieSigmaL_imp] => 5624.9043
[Wirkleistung_hzg] => 1.1184
[Wirkleistung_haus] => 0.8235
[TRLsoll] => 56.0
[TRList] => 36.0
[TBWist] => 49.2
[TBWsoll] =>
)
)
[1] => Array
(
[3] => Array
(
[timestamp] => 2018-05-01 14:38:00
[wp_status] => 12
.