0, gridP, 0) - IF(battP>0, battP, 0) > 0, -totalConsumption - IF(gridP>0, gridP, 0) - IF(battP>0, battP, 0), 0) AS Direktverbrauch, IF(battP>0, battP, 0) AS Batteriebezug, gridPcons AS Netzbezug, -totalConsumption AS Verbrauch,". //IF(battP<0, -battP, 0) AS Batterieladung, "soc AS Ladestand FROM solarLog.EnergyFlow WHERE EnergyFlow.datetime BETWEEN DATE_ADD(NOW(),INTERVAL ".($_GET["FROM"])." HOUR) and DATE_ADD(NOW(),INTERVAL ".$_GET["TO"]." HOUR) ORDER BY EnergyFlow.datetime"; $simQuery = "SELECT UNIX_TIMESTAMP(simPower.period_end) AS time, power*1000 AS 'Vorhersage' FROM solarLog.simPower WHERE simPower.period_end BETWEEN DATE_ADD(NOW(),INTERVAL ".($_GET["FROM"])." HOUR) and DATE_ADD(NOW(),INTERVAL ".$_GET["TO"]." HOUR) ORDER BY simPower.period_end"; $linecolors["Solarleistung"] = "#FFFF00"; $linecolors["Direktverbrauch"] = "#FFcc00"; $linecolors["Verbrauch"] = "#FFaa44"; $linecolors["Auto UG"] = "#00aaFF"; $linecolors["Auto OG"] = "#0044FF"; $linecolors["Netzbezug"] = "#FF0000"; $linecolors["Batteriebezug"] = "#00aa00"; $linecolors["Batterieladung"] = "#0033aa"; $linecolors["Einspeisung"] = "#b0b0b0"; $linecolors["Ladestand"] = "#00aa00"; $linecolors["Vorhersage"] = "#2222FF"; if (checkLogin()) { $mysql = new mysqli($mysql_server, $mysql_solarUser, $mysql_solarPass, $mysql_solarDB); $result = mysqli_query($mysql, $consQuery); $simRes = mysqli_query($mysql,$simQuery); if(!$result){ echo "Error:
".mysqli_error($mysql)."
"; } $obj = (object)[]; // Cast empty array to object $obj->labels = []; $obj->datasets = []; $i = 0; $filled = 0; if ($simRes->num_rows > 1) { $dataset = (object)[]; $row1 = $simRes->fetch_assoc(); $dataset->borderColor = $linecolors["Vorhersage"]; $dataset->backgroundColor = $linecolors["Vorhersage"]."55"; $dataset->borderWidth=1.5; $dataset->pointRadius= 0; $dataset->pointHoverRadius= 5; $dataset->tension=0.2; $dataset->stack = "sim"; $dataset->fill = "none"; $dataset->yAxisID = 'y'; $dataset->label = "Vorhersage"; /*$pt = (object)[]; $pt->x = $row["time"]*1000; $pt->y = $row["Vorhersage"]; $dataset->data[] = clone $pt; while ($row = $simRes->fetch_assoc()) { $pt = (object)[]; $pt->x = $row["time"]*1000 + 30*60*1000; $pt->y = $row["Vorhersage"]; $dataset->data[] = clone $pt; }*/ $obj->datasets[] = clone $dataset; $rownext = $simRes->fetch_assoc(); $nextSimTimestamp = $rownext["time"]*1000 + 30*60*1000; } if ($result->num_rows > 1) { $ii = 1; $row = $result->fetch_assoc(); foreach ($row as $name => $value) { $dataset = (object)[]; if ($name != "time") { $dataset->borderColor = $linecolors[$name]; $dataset->backgroundColor = $linecolors[$name]."22"; $dataset->borderWidth=1; $dataset->pointRadius= 0; $dataset->pointHoverRadius= 5; $dataset->tension=0.2; if ($name == "Solarleistung") { $dataset->stack = "SolarPwr"; $dataset->fill = "none"; $dataset->yAxisID = 'y'; }else if ($name == "Verbrauch") { $dataset->stack = "ConsPwr"; $dataset->fill = "1"; $dataset->yAxisID = 'y'; }else if ($name == "Batterieladung") { $dataset->stack = "ConsPwr"; $dataset->fill = "-1"; $dataset->backgroundColor = $linecolors[$name]."77"; $dataset->yAxisID = 'y'; } else if ($name == "Ladestand") { $dataset->stack = "Charge"; $dataset->fill = "none"; $dataset->yAxisID = 'y1'; } else { $dataset->stack = "Consumers"; if ($filled == 0) { $filled = 1; $dataset->fill = "origin"; } else { $dataset->fill = "-1"; } $dataset->yAxisID = 'y'; } $dataset->label = $name; $dataset->data[] = $value; $obj->datasets[] = clone $dataset; $ii++; } else { $obj->labels[] = $value * 1000; } } while ($row = $result->fetch_assoc()) { $ii = 1; foreach ($row as $name => $value) { if ($name != "time") { $obj->datasets[$ii]->data[] = $value; $ii++; } else { if(($value * 1000) < $nextSimTimestamp){ $obj->datasets[0]->data[] = $row1["Vorhersage"]; }else{ $row1 = $rownext; $rownext = $simRes->fetch_assoc(); $nextSimTimestamp = $rownext["time"]*1000 + 30*60*1000; $obj->datasets[0]->data[] = $row1["Vorhersage"]; } $obj->labels[] = $value * 1000; } } } } $obj->labels[] = $nextSimTimestamp; //Draw future forecast $obj->datasets[0]->data[] = $rownext["Vorhersage"]; while($rownext = $simRes->fetch_assoc()){ $obj->labels[] = $rownext["time"]*1000 + 30*60*1000; $obj->datasets[0]->data[] = $rownext["Vorhersage"]; } } //header('Content-Type: application/json'); echo json_encode($obj); //echo '{"labels":[1761322682000,1761322782000,1761322882000,1761322982000,1761323082000,1761323182000,1761323282000],"datasets":[{"stack": "Stack 0","cubicInterpolationMode":"monotone","fill":"origin","label":"Acquisitions by year","data":[10,20,50,20,10,5,70]},{"fill": "false","stack": "Stack 1","cubicInterpolationMode": "monotone","label": "Acquisitions by year","data": [10,20,50,20,10,5,70]}]}'; ?>