Sammelstand der offenen Arbeit im Dashboard. Einstellungen: eine Eingabemaske fuer die Energiepreise unter restricted/settings.php, dazu costs.php als Modell und ajax/settings.php als Endpunkt. Die Preise stehen jetzt in gridCosts, gasCosts und fuelCosts statt fest im Quelltext von getStats.php; die Jahresstatistik rechnet ueber LEAD() den jeweils gueltigen Zeitraum aus und schlaegt den anteiligen Grundpreis auf. Eingegeben wird in gewohnten Einheiten - l/100 km, kWh/100 km, Euro je Liter -, umgerechnet wird beim Speichern. solarLog_costs.sql beschreibt die Umstellung der Tabellen. Skoda: eigene Seite mit Live-Werten ueber MQTT und Historie ueber ajax/skoda.php, Kommandos ueber ajax/skodaCmd.php. Karte: Leaflet mit einem eigenen Kachel-Zwischenspeicher (ajax/tile.php), dessen Ablage unter tiles/ nicht ins Repository gehoert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
90 lines
3.0 KiB
PHP
90 lines
3.0 KiB
PHP
<?php
|
|
// Die sechs Diagramme unterscheiden sich nur in Zeitraum und Canvas-ID.
|
|
$periods = [
|
|
"month" => "Letzter Monat",
|
|
"year" => "Letzte 13 Monate",
|
|
"decade" => "Letzte 10 Jahre",
|
|
];
|
|
// Die Jahresstatistiken darunter folgen demselben Muster.
|
|
$statistics = [
|
|
"Stats-Year" => "Statistik dieses Jahr",
|
|
"Stats-Lastyear" => "Statistik letztes Jahr",
|
|
"Stats-Prelastyear" => "Statistik vorletztes Jahr",
|
|
];
|
|
?>
|
|
<!--begin::App Main-->
|
|
<main class="app-main">
|
|
<!--begin::App Content Header-->
|
|
<div class="app-content-header">
|
|
<!--begin::Container-->
|
|
<div class="container-fluid">
|
|
<!--begin::Row-->
|
|
<div class="row">
|
|
<div class="col-sm-12">
|
|
<h3 class="mb-0">Vergangenheit</h3>
|
|
</div>
|
|
</div>
|
|
<!--end::Row-->
|
|
</div>
|
|
<!--end::Container-->
|
|
</div>
|
|
<!--end::App Content Header-->
|
|
<!--begin::App Content-->
|
|
<div class="app-content">
|
|
<!--begin::Container-->
|
|
<div class="container-fluid">
|
|
<?php foreach ($periods as $period => $periodTitle): ?>
|
|
<div class="row row-info">
|
|
<?php foreach (["consumption" => "Power consumption", "production" => "Power production"] as $kind => $kindTitle): ?>
|
|
<div class="col-xl-6 col-m-12">
|
|
<div class="card mb-4 p-0">
|
|
<div class="card-header pb-0 pt-1">
|
|
<h3 class="card-title"><?= $kindTitle ?> – <?= $periodTitle ?></h3>
|
|
<div class="card-tools">
|
|
<button type="button" class="btn btn-tool" title="Zoom out">
|
|
<i class="bi bi-zoom-out"></i>
|
|
</button>
|
|
<button type="button" class="btn btn-tool" title="Zoom in">
|
|
<i class="bi bi-zoom-in"></i>
|
|
</button>
|
|
<button type="button" class="btn btn-tool" data-lte-toggle="card-remove">
|
|
<i class="bi bi-x-lg"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card-body pb-1">
|
|
<div class="chart-container">
|
|
<canvas id="<?= $kind ?>-chart<?= $period == "month" ? "" : "-" . $period ?>"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
<?php foreach ($statistics as $id => $title): ?>
|
|
<div class="col-xxl-12 col-xl-12 col-lg-12 col-md-12 d-flex align-items-stretch">
|
|
<div class="card p-0 mb-4" style="width:100%">
|
|
<div class="card-header pb-0 pt-1">
|
|
<h3 class="card-title"><?= $title ?></h3>
|
|
<div class="card-tools">
|
|
<button type="button" class="btn btn-tool" data-lte-toggle="card-remove">
|
|
<i class="bi bi-x-lg"></i>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="row-cols-1 row-cols-md-1 g-4 p-2" id="<?= $id ?>">
|
|
</div>
|
|
</div>
|
|
<!-- /.card -->
|
|
</div>
|
|
<?php endforeach; ?>
|
|
<!-- /.row (main row) -->
|
|
</div>
|
|
<!--end::Container-->
|
|
</div>
|
|
<!--end::App Content-->
|
|
</main>
|
|
<!--end::App Main-->
|