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>
This commit is contained in:
2026-09-04 08:53:03 +02:00
co-authored by Claude Opus 5
parent 61ea98db1d
commit 2ef946c732
5 changed files with 150 additions and 65 deletions
+16 -3
View File
@@ -1,9 +1,17 @@
<?php
/*
* Formular des Auto-Lademodals. carEG.php und carOG.php zeigen dasselbe
* Formular; nur die Ansteuerung der Wallbox dahinter unterscheidet sich.
* $formId trennt die beiden Formulare fuer das JavaScript.
* Formular; nur die Wallbox dahinter unterscheidet sich - eingebunden wird
* es aus carSteuerung.php, das $wallbox und $formId setzt. $formId trennt
* die beiden Formulare fuer das JavaScript.
*
* Der Schieberegler traegt die Wattstunden je Prozent als data-Attribut bei
* sich. Frueher stand die Umrechnung als feste 14000 im JavaScript und
* passte damit hoechstens zu einem der beiden Autos: eingestellte und
* angezeigte Prozente gingen auseinander.
*/
$auto = fahrzeuge()[$wallbox];
$whProProzent = wallboxWhProProzent($wallbox);
?>
<div class="d-grid gap-2 col-6 mx-auto my-4">
<button class="btn btn-primary" id="evStart/Stop">Laden starten</button>
@@ -62,7 +70,12 @@
<div class="form-check">
<label class="form-label" for="addedCharge">Zusätzlich benötigte Ladung (%): </label>
<div style="font-size: 15px;color: #297195;display: inline-block;" id="modal-slider-label">sdf</div>
<input type="range" id="modal-slider" name="fte" class="form-range range-color-track" min="1" max="100" />
<input type="range" id="modal-slider" name="fte" class="form-range range-color-track" min="1" max="100"
data-wh-pro-prozent="<?= $whProProzent ?>" />
<div class="small text-secondary">
<?= htmlspecialchars($auto["name"]) ?>,
<?= htmlspecialchars(rtrim(rtrim(number_format($auto["akkuKWh"], 1, ",", "."), "0"), ",")) ?> kWh nutzbar
</div>
<div class="d-flex justify-content-between">
<span class="max-amount f-16 font-weight-normal darkGray-color text-right mt-1">1%</span>
<span class="max-amount f-16 font-weight-normal darkGray-color text-right mt-1">100%</span>
+2 -2
View File
@@ -44,9 +44,9 @@ if (checkLogin()) {
if ($modus !== null) {
// Der Schieberegler liefert Prozent zusaetzlich benoetigter
// Ladung; die Wallbox will Wattstunden. Der Faktor haengt am
// Auto, deshalb steht er je Wallbox in der Tabelle.
// Auto und steht deshalb in restricted/config.php.
$prozent = min(100, max(0, intval($_POST["fte"] ?? 0)));
$energie = $prozent * $konf["whProProzent"];
$energie = $prozent * wallboxWhProProzent($wallbox);
$strom = min(16, max(6, intval($_POST["evAmp"] ?? 6)));
+19 -2
View File
@@ -602,6 +602,15 @@ var chartSettings = {
// Setzt den Schieberegler aus den Wattstunden, die die Wallbox meldet.
function setzeLadeRegler(wattstunden) {
const regler = document.getElementById("modal-slider");
const whProProzent = Number(regler.dataset.whProProzent);
if (whProProzent > 0) {
regler.value = Math.round(Number(String(wattstunden)) / whProProzent);
}
}
function openModal(type) {
document.getElementById("modalSaveBtn").style.display = type === "watering" ? "none" : "";
switch(type){
@@ -663,7 +672,11 @@ var chartSettings = {
else if (mode == "AutomaticStop") { document.getElementById("EV_NextTrip").click(); }
else { alert(mode); }
document.getElementById("EV_NextTripTime").value = time.toHHMM();
document.getElementById("modal-slider").value = Math.round(energy * 100 / 14000);
// Wattstunden je Prozent liefert das Formular mit (carForm.php);
// die Akkugroesse steht in restricted/config.php. Frueher standen
// hier feste 14000 Wh - fuer beide Autos dasselbe, und fuer keines
// von beiden richtig.
setzeLadeRegler(energy);
document.getElementById("modal-slider").dispatchEvent(new Event('input'));
if (amp == "16") { document.getElementById("EV_16A").click(); }
else if (amp == "10") { document.getElementById("EV_10A").click(); }
@@ -685,7 +698,11 @@ var chartSettings = {
else if (mode == "5") { document.getElementById("EV_NextTrip").click(); }
else { alert(mode); }
document.getElementById("EV_NextTripTime").value = time.toHHMM();
document.getElementById("modal-slider").value = Math.round(energy * 100 / 14000);
// Wattstunden je Prozent liefert das Formular mit (carForm.php);
// die Akkugroesse steht in restricted/config.php. Frueher standen
// hier feste 14000 Wh - fuer beide Autos dasselbe, und fuer keines
// von beiden richtig.
setzeLadeRegler(energy);
document.getElementById("modal-slider").dispatchEvent(new Event('input'));
if (amp == "16") { document.getElementById("EV_16A").click(); }
else if (amp == "10") { document.getElementById("EV_10A").click(); }
+41
View File
@@ -0,0 +1,41 @@
<?php
/**
* Einstellungen, die sich ohne Codeaenderung aendern duerfen.
*
* Hier stehen Zahlen, die an der Wirklichkeit haengen und nicht an der
* Programmlogik - was fuer ein Auto in welcher Garage steht zum Beispiel.
* Wechselt eines, wird hier eine Zeile geaendert und sonst nichts.
*
* Zugangsdaten gehoeren nicht hierher, die stehen in mysql.php und sind
* nicht im Git.
*/
/**
* Welches Auto an welcher Wallbox haengt.
*
* Die Schluessel sind dieselben wie in wallboxen.php: "eg" ist die
* Wattpilot in der Garage, "og" der go-e Charger.
*
* `akkuKWh` ist die **nutzbare** Kapazitaet, nicht die brutto verbaute. Der
* Ladestand in Prozent bezieht sich darauf, und der Schieberegler im
* Lademodal ("Zusaetzlich benoetigte Ladung") rechnet damit Prozent in
* Wattstunden um. Steht hier die falsche Zahl, laedt die Wallbox zu viel
* oder zu wenig nach - und die Anzeige beim naechsten Oeffnen zeigt einen
* anderen Wert an, als eingestellt wurde.
*/
function fahrzeuge()
{
return [
"eg" => [
"name" => "Škoda Enyaq RS",
// Modelljahr 2026: 84 kWh brutto, 79 kWh nutzbar.
"akkuKWh" => 79.0,
],
"og" => [
"name" => "Jeep Compass 4xe",
// Plug-in-Hybrid. Stellantis nennt 11,4 kWh fuer den Akku, ohne
// zwischen brutto und nutzbar zu unterscheiden.
"akkuKWh" => 11.4,
],
];
}
+18 -4
View File
@@ -26,6 +26,7 @@
*/
require_once(__DIR__ . "/../ajax/phpMQTT.php");
require_once(__DIR__ . "/config.php");
// Der Broker laeuft auf demselben Rechner wie der Webserver. Steht hier und
// nicht in commands.php, damit diese Datei nicht die halbe Raumsteuerung
@@ -48,9 +49,6 @@ function wallboxen()
"praefix" => "wattpilot/properties/",
// Die Bruecke haengt "/set" an den Eigenschaftsnamen an.
"namen" => [],
// Wattstunden je Prozent des Schiebereglers - Akku des Autos,
// das hier haengt.
"whProProzent" => 140,
// Zeichenketten gehen roh hinaus; die Bruecke gibt sie
// unveraendert an die Wallbox weiter.
"textInJson" => false,
@@ -66,7 +64,6 @@ function wallboxen()
// Zielzeit und Zielenergie heissen hier anders. Die Wattpilot
// kennt "ate"/"att" gar nicht, der go-e umgekehrt "fte"/"ftt".
"namen" => ["fte" => "ate", "ftt" => "att"],
"whProProzent" => 90,
// Der go-e liest jeden Wert als JSON. Zeichenketten muessen
// deshalb in Anfuehrungszeichen stehen, sonst antwortet er mit
// "tried to set api key with invalid json".
@@ -76,6 +73,23 @@ function wallboxen()
];
}
/**
* Wieviel Wattstunden ein Prozent des Schiebereglers bedeutet.
*
* Der Wert steht nicht in der Tabelle oben, weil er nichts mit der Wallbox
* zu tun hat, sondern mit dem Auto davor: er kommt aus der nutzbaren
* Akkukapazitaet in restricted/config.php. Wechselt das Auto, wird dort eine
* Zeile geaendert.
*/
function wallboxWhProProzent(string $box): int
{
$autos = fahrzeuge();
if (!isset($autos[$box])) {
throw new InvalidArgumentException("Kein Auto fuer Wallbox: " . $box);
}
return (int) round($autos[$box]["akkuKWh"] * 1000 / 100);
}
/**
* Einen Wert so schreiben, wie die jeweilige Wallbox ihn erwartet.
*/