Files
Smart-Dashboard/ajax/carSteuerung.php
T
adminandClaude Opus 5 2ef946c732 Akkugroessen der beiden Autos stimmen und stehen in der Konfiguration
Der Schieberegler "Zusaetzlich benoetigte Ladung" rechnet Prozent in
Wattstunden um. Dafuer standen bisher drei verschiedene Zahlen im Code:
140 Wh/% beim Schreiben der EG-Wallbox, 90 Wh/% beim go-e und feste
14000 Wh beim Zurueckrechnen im Browser - fuer beide Autos dieselbe. Eine
Einstellung von 50 % am go-e schrieb 4500 Wh und las sich beim naechsten
Oeffnen als 32 % zurueck.

Jetzt kommt die Zahl aus einer Quelle: restricted/config.php nennt Auto
und nutzbare Akkukapazitaet je Wallbox, carForm.php gibt die Wattstunden
je Prozent als data-Attribut an den Schieberegler weiter, und das
JavaScript rechnet damit zurueck statt mit einer festen Konstanten.

EG: Skoda Enyaq RS, Modelljahr 2026, 84 kWh brutto / 79 kWh nutzbar
OG: Jeep Compass 4xe, 11,4 kWh

Das Lademodal zeigt Auto und Kapazitaet jetzt unter dem Regler an - damit
sichtbar ist, worauf sich die Prozente beziehen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 08:53:03 +02:00

88 lines
3.1 KiB
PHP

<?php
/**
* Ladesteuerung beider Wallboxen.
*
* carEG.php und carOG.php setzen nur $wallbox und $formId und binden diese
* Datei ein - vorher standen hier zwei fast gleiche Dateien, die sich nur im
* Transportweg unterschieden. Was die beiden Wallboxen wirklich trennt,
* steht in restricted/wallboxen.php.
*
* Ohne POST wird das Formular ausgeliefert (carForm.php), mit POST wird
* geschaltet und nichts zurueckgegeben - so war es vorher auch, das
* JavaScript im Modal erwartet es so.
*/
require_once(__DIR__ . "/../helper.php");
require_once(__DIR__ . "/../restricted/wallboxen.php");
// lmo, der Betriebsmodus der Wallbox. Die Namen links kommen aus den
// Radiobuttons in carForm.php.
const CAR_MODI = [
"default" => 3, // Immer laden
"eco" => 4, // Ueberschuss (Awattar)
"NextTrip" => 5, // Ladeplanung (AutomaticStop)
];
$close = 0;
if (checkLogin()) {
$konf = wallboxen()[$wallbox];
if (isset($_POST["evStart/Stop"])) {
// frc: 2 gibt das Laden frei, 1 sperrt es, 0 waere "die Wallbox
// entscheidet".
if ($_POST["evStart/Stop"] === "Laden starten") {
wallboxSetzen($wallbox, ["frc" => 2]);
} elseif ($_POST["evStart/Stop"] === "Laden stoppen") {
wallboxSetzen($wallbox, ["frc" => 1]);
}
$close = 1;
} elseif (isset($_POST["evMode"])) {
$modus = CAR_MODI[$_POST["evMode"]] ?? null;
if ($modus !== null) {
// Der Schieberegler liefert Prozent zusaetzlich benoetigter
// Ladung; die Wallbox will Wattstunden. Der Faktor haengt am
// Auto und steht deshalb in restricted/config.php.
$prozent = min(100, max(0, intval($_POST["fte"] ?? 0)));
$energie = $prozent * wallboxWhProProzent($wallbox);
$strom = min(16, max(6, intval($_POST["evAmp"] ?? 6)));
// Das Formularfeld ist ein <input type="time">, liefert also
// HH:MM. Alles andere gilt als "keine Ladeplanung" und laesst
// Zielzeit und Zielenergie unangetastet. Geprueft wird hier
// weiterhin streng: der Wert ging frueher in eine Kommandozeile
// und liess sich mit "12:00; befehl" missbrauchen.
$sekunden = null;
if (isset($_POST["ftt"])
&& preg_match('/^([01][0-9]|2[0-3]):([0-5][0-9])$/', $_POST["ftt"], $teile)) {
$sekunden = intval($teile[1]) * 3600 + intval($teile[2]) * 60;
}
// Reihenfolge zaehlt: Ziel zuerst, Modus zuletzt.
$werte = [];
if (!empty($konf["uhrStellen"])) {
$werte["utc"] = gmdate("Y-m-d\TH:i:s") . ".000";
}
if ($sekunden !== null && $energie > 0) {
$werte["fte"] = $energie;
$werte["ftt"] = $sekunden;
}
$werte["amp"] = $strom;
$werte["fup"] = true;
$werte["lmo"] = $modus;
wallboxSetzen($wallbox, $werte);
}
$close = 1;
}
} else {
$close = 1;
}
if (!$close) {
include __DIR__ . "/carForm.php";
}