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