From 4491e244fbbf635810886d3e5fdd24519516f91b Mon Sep 17 00:00:00 2001 From: DanielHaefliger Date: Tue, 25 Aug 2026 11:59:30 +0200 Subject: [PATCH] no message --- Ladestation/module.php | 47 ++++++++++++++++++++++----------------- Ladestation_v2/module.php | 47 ++++++++++++++++++++++----------------- 2 files changed, 52 insertions(+), 42 deletions(-) diff --git a/Ladestation/module.php b/Ladestation/module.php index 34eac6d..be9c878 100644 --- a/Ladestation/module.php +++ b/Ladestation/module.php @@ -278,7 +278,7 @@ class Ladestation extends IPSModule // zurückgesetzt. if ( $stationType === 3 && - $this->GetBuffer("SmartMeFullDetectionVersion") !== "2" + $this->GetBuffer("SmartMeFullDetectionVersion") !== "3" ) { $this->SetValue("Car_is_full", false); $this->SetValue("Pending_Counter", 0); @@ -287,7 +287,7 @@ class Ladestation extends IPSModule (float)$this->ReadPropertyInteger("Max_Current_abs") ); $this->SetBuffer("SmartMeChargingEnabled", "0"); - $this->SetBuffer("SmartMeFullDetectionVersion", "2"); + $this->SetBuffer("SmartMeFullDetectionVersion", "3"); } $usesEaseeGateway = $this->UsesEaseeGateway($stationType); @@ -1043,11 +1043,10 @@ class Ladestation extends IPSModule abs((float)$chargingPowerWatts) >= 100; $carIsFull = $carDetected && $wasFull && !$carIsCharging; - // Ein aus einer früheren Regelungsunterbrechung gelernter Wert unter - // dem Mindestladestrom darf die Station nicht dauerhaft blockieren. - // Ein korrekt bestätigtes Ladeende wird dagegen bis zum Abstecken oder - // bis zur erneuten Leistungsaufnahme gehalten. - if (!$carIsFull && (float)$this->GetValue("Max_Current") < 6) { + // Pico liefert die verfügbare Stations-/Gruppenobergrenze direkt über + // die API. Ein zuvor über den Soll-/Istvergleich gelernter Fahrzeugwert + // darf deshalb den möglichen Ladestrom nicht dauerhaft begrenzen. + if (!$carIsFull) { $this->SetValue("Max_Current", $maxCurrent); } @@ -1597,21 +1596,27 @@ class Ladestation extends IPSModule if ($counter >= $requiredCycles) { $this->SetValue("Pending_Counter", 0); if ($requestedMismatch) { - $this->Calc_Max_Current($this->GetValue("Is_1_ph")); + if ($stationType === 3) { + // Smart-Me liefert keinen eindeutigen Status "Auto + // voll". Der berechnete Fahrzeugwert dient hier nur + // zur Ladeende-Erkennung und wird nicht als neue + // dauerhafte Stationsobergrenze gespeichert. + $learnedMaxCurrent = 2.5 + ( + $actualPower / + ($this->GetValue("Is_1_ph") ? 230 : 1.71 * 400) + ); - // Smart-Me liefert keinen eindeutigen Status "Auto - // voll". Erst wenn während einer echten Freigabe über - // 90 Sekunden praktisch kein Strom angenommen wird, - // bestätigt der gelernte Wert unter 6 A das Ladeende. - if ( - $stationType === 3 && - $this->GetBuffer("SmartMeChargingEnabled") === "1" && - (float)$this->GetValue("Max_Current") > 0 && - (float)$this->GetValue("Max_Current") < 6 - ) { - $this->SetValue("Car_is_full", true); - $this->ResetTimer(); - $this->ResetNullTimer(); + if ( + $this->GetBuffer("SmartMeChargingEnabled") === "1" && + $learnedMaxCurrent > 0 && + $learnedMaxCurrent < 6 + ) { + $this->SetValue("Car_is_full", true); + $this->ResetTimer(); + $this->ResetNullTimer(); + } + } else { + $this->Calc_Max_Current($this->GetValue("Is_1_ph")); } } } diff --git a/Ladestation_v2/module.php b/Ladestation_v2/module.php index 0954dc2..4c7e00e 100644 --- a/Ladestation_v2/module.php +++ b/Ladestation_v2/module.php @@ -288,7 +288,7 @@ class Ladestation_v2 extends IPSModule // zurückgesetzt. if ( $stationType === 3 && - $this->GetBuffer("SmartMeFullDetectionVersion") !== "2" + $this->GetBuffer("SmartMeFullDetectionVersion") !== "3" ) { $this->SetValue("Car_is_full", false); $this->SetValue("Pending_Counter", 0); @@ -297,7 +297,7 @@ class Ladestation_v2 extends IPSModule (float)$this->ReadPropertyInteger("Max_Current_abs") ); $this->SetBuffer("SmartMeChargingEnabled", "0"); - $this->SetBuffer("SmartMeFullDetectionVersion", "2"); + $this->SetBuffer("SmartMeFullDetectionVersion", "3"); } $usesEaseeGateway = $this->UsesEaseeGateway($stationType); @@ -1063,11 +1063,10 @@ class Ladestation_v2 extends IPSModule abs((float)$chargingPowerWatts) >= 100; $carIsFull = $carDetected && $wasFull && !$carIsCharging; - // Ein aus einer früheren Regelungsunterbrechung gelernter Wert unter - // dem Mindestladestrom darf die Station nicht dauerhaft blockieren. - // Ein korrekt bestätigtes Ladeende wird dagegen bis zum Abstecken oder - // bis zur erneuten Leistungsaufnahme gehalten. - if (!$carIsFull && (float)$this->GetValue("Max_Current") < 6) { + // Pico liefert die verfügbare Stations-/Gruppenobergrenze direkt über + // die API. Ein zuvor über den Soll-/Istvergleich gelernter Fahrzeugwert + // darf deshalb den möglichen Ladestrom nicht dauerhaft begrenzen. + if (!$carIsFull) { $this->SetValue("Max_Current", $maxCurrent); } @@ -1610,21 +1609,27 @@ class Ladestation_v2 extends IPSModule if ($counter >= $requiredCycles) { $this->SetValue("Pending_Counter", 0); if ($requestedMismatch) { - $this->Calc_Max_Current($this->GetValue("Is_1_ph")); + if ($stationType === 3) { + // Smart-Me liefert keinen eindeutigen Status "Auto + // voll". Der berechnete Fahrzeugwert dient hier nur + // zur Ladeende-Erkennung und wird nicht als neue + // dauerhafte Stationsobergrenze gespeichert. + $learnedMaxCurrent = 2.5 + ( + $actualPower / + ($this->GetValue("Is_1_ph") ? 230 : 1.71 * 400) + ); - // Smart-Me liefert keinen eindeutigen Status "Auto - // voll". Erst wenn während einer echten Freigabe über - // 90 Sekunden praktisch kein Strom angenommen wird, - // bestätigt der gelernte Wert unter 6 A das Ladeende. - if ( - $stationType === 3 && - $this->GetBuffer("SmartMeChargingEnabled") === "1" && - (float)$this->GetValue("Max_Current") > 0 && - (float)$this->GetValue("Max_Current") < 6 - ) { - $this->SetValue("Car_is_full", true); - $this->ResetTimer(); - $this->ResetNullTimer(); + if ( + $this->GetBuffer("SmartMeChargingEnabled") === "1" && + $learnedMaxCurrent > 0 && + $learnedMaxCurrent < 6 + ) { + $this->SetValue("Car_is_full", true); + $this->ResetTimer(); + $this->ResetNullTimer(); + } + } else { + $this->Calc_Max_Current($this->GetValue("Is_1_ph")); } } }