From da22c6207367ea31c9596974fbcf1f0b711ee04c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=BCdel?= <818878+cguedel@users.noreply.github.com> Date: Sun, 9 Nov 2025 13:29:04 +0100 Subject: [PATCH] Planner: adjust session energy by initial value plan (#25149) --- core/loadpoint.go | 4 ++++ core/loadpoint_api.go | 1 + core/loadpoint_plan.go | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/core/loadpoint.go b/core/loadpoint.go index ab9f99cb7..caa4b5904 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -148,6 +148,7 @@ type Loadpoint struct { planTime time.Time // time goal planPrecondition time.Duration // precondition duration planEnergy float64 // Plan charge energy in kWh (dumb vehicles) + planEnergyOffset float64 // already charged energy in kWh when plan was set planSlotEnd time.Time // current plan slot end time planActive bool // charge plan exists and has a currently active slot @@ -514,6 +515,9 @@ func (lp *Loadpoint) evVehicleConnectHandler() { // create charging session lp.createSession() + + // reset energy-based charging plan offset + lp.planEnergyOffset = 0 } // evVehicleDisconnectHandler sends external start event diff --git a/core/loadpoint_api.go b/core/loadpoint_api.go index 46eb42035..b9d4e5273 100644 --- a/core/loadpoint_api.go +++ b/core/loadpoint_api.go @@ -368,6 +368,7 @@ func (lp *Loadpoint) setPlanEnergy(finishAt time.Time, precondition time.Duratio lp.planTime = finishAt lp.planPrecondition = precondition + lp.planEnergyOffset = lp.getChargedEnergy() / 1e3 lp.publish(keys.PlanTime, finishAt) lp.publish(keys.PlanPrecondition, precondition) lp.settings.SetTime(keys.PlanTime, finishAt) diff --git a/core/loadpoint_plan.go b/core/loadpoint_plan.go index 6a29c1f32..cf022a43e 100644 --- a/core/loadpoint_plan.go +++ b/core/loadpoint_plan.go @@ -37,7 +37,7 @@ func (lp *Loadpoint) finishPlan() { // remainingPlanEnergy returns missing energy amount in kWh func (lp *Loadpoint) remainingPlanEnergy(planEnergy float64) float64 { - return max(0, planEnergy-lp.getChargedEnergy()/1e3) + return max(0, planEnergy-(lp.getChargedEnergy()/1e3-lp.planEnergyOffset)) } // GetPlanRequiredDuration is the estimated total charging duration