Use estimator only for vehicles with soc (#8663)

* Estimator only for vehicles with soc

* fix tests
This commit is contained in:
Michael Geers 2023-06-27 20:16:14 +02:00 • committed by GitHub
parent 2ffb050fb4
commit dcca3638ba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 16 deletions

View file

@ -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 {

View file

@ -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