"Nicht angemeldet."]); exit; } $was = $_GET["was"] ?? "verlauf"; try { $db = solarDb(); if ($was === "verlauf") { $stunden = max(1, min(24 * 90, intval($_GET["stunden"] ?? 24))); $stuendlich = $stunden > 24 * 3; $gruppe = $stuendlich ? "FLOOR(UNIX_TIMESTAMP(datetime) / 3600) * 3600" : "UNIX_TIMESTAMP(datetime)"; $soc = []; $res = $db->query("SELECT $gruppe AS t, AVG(soc) AS soc, AVG(battP) AS p FROM EnergyFlow WHERE datetime >= NOW() - INTERVAL $stunden HOUR GROUP BY t ORDER BY t"); while ($res && $z = $res->fetch_assoc()) { // battP > 0 heißt entladen; hinaus geht "positiv = laden", wie bei der BMU. $soc[] = [(int)$z["t"], round((float)$z["soc"], 1), round(-(float)$z["p"])]; } $bmu = []; $res = $db->query("SELECT $gruppe AS t, AVG(spreizung) AS spr, MIN(t_min) AS tmin, MAX(t_max) AS tmax, AVG(soh) AS soh FROM byd WHERE datetime >= NOW() - INTERVAL $stunden HOUR GROUP BY t ORDER BY t"); while ($res && $z = $res->fetch_assoc()) { $bmu[] = [(int)$z["t"], round((float)$z["spr"], 1), (int)$z["tmin"], (int)$z["tmax"], round((float)$z["soh"], 1)]; } echo json_encode([ "von" => time() - $stunden * 3600, "bis" => time(), "soc" => $soc, "bmu" => $bmu, ]); exit; } if ($was === "gesundheit") { $tage = []; $res = $db->query("SELECT DATE(datetime) AS tag, AVG(soh) AS soh, MAX(spreizung) AS spr, MAX(geladen_kwh) AS geladen, MAX(entladen_kwh) AS entladen FROM byd GROUP BY tag ORDER BY tag"); while ($res && $z = $res->fetch_assoc()) { $tage[] = [$z["tag"], round((float)$z["soh"], 1), (int)$z["spr"], (float)$z["geladen"], (float)$z["entladen"]]; } echo json_encode(["tage" => $tage]); exit; } http_response_code(400); echo json_encode(["error" => "Unbekannter Abschnitt."]); } catch (Throwable $e) { http_response_code(500); echo json_encode(["error" => "Verlauf nicht abrufbar: " . $e->getMessage()]); }