[Format der Beschriftung, Filter auf datetime] $ranges = [ "month" => ["'%d.%b.'", "DATE_FORMAT(datetime,'%Y%m%d') >= DATE_FORMAT(DATE_SUB(now(),INTERVAL 1 MONTH),'%Y%m%d')"], "year" => ["'%b. %y'", "DATE_FORMAT(datetime,'%Y%m') >= DATE_FORMAT(DATE_SUB(now(),INTERVAL 13 MONTH),'%Y%m')"], "decade" => ["'%Y'", "DATE_FORMAT(datetime,'%Y') >= DATE_FORMAT(DATE_SUB(now(),INTERVAL 10 YEAR),'%Y')"], ]; // Datenreihen je Diagramm. Beide teilen sich Solarertrag und Heizstab und // unterscheiden sich nur darin, wohin die Energie fließt (prod) bzw. woher // sie kommt (cons). $series = [ "prod" => "SUM(pvP/12 - IF(gridP < 0, -gridP/12,0) - IF(battP < 0, -battP/12,0) - heaterPwr/12) AS Direktverbrauch, SUM(heaterPwr/12) AS Heizstab, SUM(IF(battP < 0, -battP/12,0)) AS Batterieladung, SUM(gridPfeed/12) AS Einspeisung", "cons" => "SUM(pvP/12 - IF(gridP < 0, -gridP/12,0) - IF(battP < 0, -battP/12,0) - heaterPwr/12) AS Solarverbrauch, SUM(heaterPwr/12) AS Heizstab, SUM(IF(battP > 0, battP/12,0)) AS Batteriebezug, SUM(gridPcons/12) AS Netzbezug", ]; $linecolors["Direktverbrauch"] = "#FFFF00"; $linecolors["Solarverbrauch"] = "#FFFF00"; $linecolors["UG"] = "#FFaa00"; $linecolors["OG"] = "#FF4400"; $linecolors["Auto UG"] = "#00aaFF"; $linecolors["Auto OG"] = "#0044FF"; $linecolors["Heizstab"] = "#FF6600"; $linecolors["Batterieladung"] = "#00aa00"; $linecolors["Batteriebezug"] = "#00aa00"; $linecolors["Einspeisung"] = "#FF0000"; $linecolors["Netzbezug"] = "#FF0000"; $linecolors["Ladestand"] = "#00aa00"; $linecolors["Vorhersage"] = "#2222FF"; header('Content-Type: application/json; charset=utf-8'); $rangeKey = isset($_GET["range"]) ? $_GET["range"] : ""; $seriesKey = isset($_GET["series"]) ? $_GET["series"] : ""; if (!isset($ranges[$rangeKey]) || !isset($series[$seriesKey])) { http_response_code(400); echo json_encode(["error" => "Unbekannter Zeitraum oder Datenreihe."]); exit; } list($labelFormat, $filter) = $ranges[$rangeKey]; $obj = (object)[]; $obj->labels = []; $obj->datasets = []; if (checkLogin()) { $mysql = new mysqli($mysql_server, $mysql_solarUser, $mysql_solarPass, $mysql_solarDB); $query = "SELECT DATE_FORMAT(datetime, $labelFormat) AS 'time', " . $series[$seriesKey] . " FROM EnergyFlow WHERE $filter GROUP BY DATE_FORMAT(datetime, $labelFormat) ORDER BY datetime ; "; $obj = buildChartData($mysql, $query, $linecolors); } echo json_encode($obj);