Files
Smart-Dashboard/solarLog_costs.sql
adminandClaude Opus 5 d285ec27a0 Einstellungsseite, Skoda-Seite und Karte
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>
2026-09-02 21:21:27 +02:00

64 lines
3.0 KiB
SQL

-- Preistabellen der Statistik: feste Zahlen rein, Redundanz raus.
--
-- 1) gasCosts und fuelCosts lagen unbenutzt herum; ajax/getStats.php rechnete
-- stattdessen mit drei fest eingetragenen Zahlen:
--
-- 140 Grundpreis Strom pro Jahr -> gridCosts.base
-- 0.063 Gaspreis je kWh -> gasCosts.cost / gasCosts.kwhPerLitre
-- 24.5 12 * kWh je Liter Benzin -> fuelCosts.lPer100km / kwhPer100km
--
-- Beim Gas stand der Energieinhalt bisher nur als Kommentar an der Spalte
-- ("6.58kWh/l"), beim Benzin steckte er unsichtbar im Teiler 24.5. Beides
-- ist keine Physik, die sich nie aendert, sondern haengt am Brennstoff und
-- am Ersatzfahrzeug - und gehoert deshalb neben den Preis.
--
-- Beim Auto nicht als "kWh je Liter": diese Zahl steht auf keinem Datenblatt
-- und niemand hat sie im Kopf. Eingetragen werden die beiden Verbraeuche,
-- die man kennt - Liter je 100 km beim Verbrenner, kWh je 100 km beim
-- Stromer. Wieviele Liter eine geladene kWh ersetzt, rechnet die Abfrage
-- daraus aus.
--
-- 2) end_date faellt weg. Die Spalte war reine Redundanz: sie sagte nie etwas
-- anderes als "Tag vor dem naechsten Stichtag" - konnte aber, weil sie
-- eigenstaendig gepflegt wurde, etwas anderes sagen. Genau das war
-- passiert: gridCosts liess zwei Zeilen ueber das erste Quartal 2023
-- laufen, der JOIN in getStats.php fand fuer jeden Messwert zwei Preise,
-- und der Stromverbrauch 2023 stand mit 2527 statt 1674 kWh in der
-- Statistik - 51 % zu hoch.
--
-- Ohne die Spalte laesst sich eine Ueberlappung nicht mehr hinschreiben,
-- und eine Luecke auch nicht. Das Ende einer Zeile holt sich die Abfrage
-- mit LEAD(active_date) beim naechsten Stichtag; die juengste Zeile hat
-- kein Ende und gilt weiter, bis ein neuer Preis eingetragen wird. So
-- verhaelt sich ein Tarif ja auch.
--
-- Nebenbei ist die Statistik dadurch rund viermal so schnell (2,9 s -> 0,7 s
-- je Jahr): der Optimierer schlaegt die drei kleinen Preistabellen einmal
-- auf, statt fuer jeden der 100.000 Messwerte einen Bereich zu durchsuchen.
--
-- Anwenden: mysql -h <host> -P 3310 -u solarLog -p solarLog < solarLog_costs.sql
ALTER TABLE `gridCosts`
ADD COLUMN `base` float NOT NULL DEFAULT 0
COMMENT 'Grundpreis pro Jahr in Euro' AFTER `gain`,
DROP KEY `end_date`,
DROP COLUMN `end_date`;
-- Bis hierher stand die 140 fest im SQL - fuer alle Jahre gleich.
UPDATE `gridCosts` SET `base` = 140;
-- Die Zeile ab 2022-12-13 lief bis 2023-03-31 und ueberlappte damit die
-- naechste. Ohne end_date endet sie automatisch am 31.12.2022.
ALTER TABLE `gasCosts`
ADD COLUMN `kwhPerLitre` float NOT NULL DEFAULT 6.58
COMMENT 'Energieinhalt: kWh je Liter';
ALTER TABLE `fuelCosts`
ADD COLUMN `lPer100km` float NOT NULL DEFAULT 9.8
COMMENT 'Verbrauch des Verbrenners in Liter je 100 km',
ADD COLUMN `kwhPer100km` float NOT NULL DEFAULT 20
COMMENT 'Verbrauch des Elektroautos in kWh je 100 km',
DROP KEY `end_date`,
DROP COLUMN `end_date`;