From dcca3638bac200bbd43b4252892cb3f76b5fdd8f Mon Sep 17 00:00:00 2001 From: Michael Geers Date: Tue, 27 Jun 2023 20:16:14 +0200 Subject: [PATCH] Use estimator only for vehicles with soc (#8663) * Estimator only for vehicles with soc * fix tests --- core/loadpoint.go | 8 ++++++-- core/loadpoint_vehicle_test.go | 28 ++++++++++++++-------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/core/loadpoint.go b/core/loadpoint.go index fd0af15f9..4c85755c8 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -734,7 +734,11 @@ func (lp *Loadpoint) setStatus(status api.ChargeStatus) { // remainingChargeEnergy returns missing energy amount in kWh if vehicle has a valid energy target func (lp *Loadpoint) remainingChargeEnergy() (float64, bool) { return math.Max(0, lp.targetEnergy-lp.getChargedEnergy()/1e3), - (lp.vehicle == nil || lp.vehicleHasFeature(api.Offline)) && lp.targetEnergy > 0 + lp.vehicleHasSoc() && lp.targetEnergy > 0 +} + +func (lp *Loadpoint) vehicleHasSoc() bool { + return lp.vehicle != nil && !lp.vehicleHasFeature(api.Offline) } // targetEnergyReached checks if target is configured and reached @@ -1295,7 +1299,7 @@ func (lp *Loadpoint) publishSocAndRange() { soc, err := lp.chargerSoc() // guard for socEstimator removed by api - if lp.socEstimator == nil { + if lp.socEstimator == nil || !lp.vehicleHasSoc() { // This is a workaround for heaters. Without vehicle, the soc estimator is not initialized. // We need to check if the charger can provide soc and use it if available. if err == nil { diff --git a/core/loadpoint_vehicle_test.go b/core/loadpoint_vehicle_test.go index 8d72dd9ed..2ee2ba562 100644 --- a/core/loadpoint_vehicle_test.go +++ b/core/loadpoint_vehicle_test.go @@ -32,20 +32,20 @@ func TestPublishSocAndRange(t *testing.T) { log := util.NewLogger("foo") lp := &Loadpoint{ - log: log, - bus: evbus.New(), - clock: clck, - charger: charger, - defaultVehicle: vehicle, - chargeMeter: &Null{}, // silence nil panics - chargeRater: &Null{}, // silence nil panics - chargeTimer: &Null{}, // silence nil panics - socEstimator: soc.NewEstimator(log, charger, vehicle, false), - sessionEnergy: NewEnergyMetrics(), - MinCurrent: minA, - MaxCurrent: maxA, - phases: 1, - Mode: api.ModeNow, + log: log, + bus: evbus.New(), + clock: clck, + charger: charger, + vehicle: vehicle, + chargeMeter: &Null{}, // silence nil panics + chargeRater: &Null{}, // silence nil panics + chargeTimer: &Null{}, // silence nil panics + socEstimator: soc.NewEstimator(log, charger, vehicle, false), + sessionEnergy: NewEnergyMetrics(), + MinCurrent: minA, + MaxCurrent: maxA, + phases: 1, + Mode: api.ModeNow, } // populate channels