diff --git a/core/loadpoint.go b/core/loadpoint.go index d5bfc6c67..ef9425ad8 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -136,8 +136,6 @@ type LoadPoint struct { chargedEnergy float64 // Charged energy while connected in Wh chargeRemainingDuration time.Duration // Remaining charge duration chargeRemainingEnergy float64 // Remaining charge energy in Wh - - tasks []func() error // task list for repeated execution } // NewLoadPointFromConfig creates a new loadpoint @@ -708,8 +706,7 @@ func (lp *LoadPoint) setActiveVehicle(vehicle api.Vehicle) { lp.publish("vehiclePresent", true) lp.publish("vehicleTitle", lp.vehicle.Title()) lp.publish("vehicleCapacity", lp.vehicle.Capacity()) - - lp.task(lp.odometer) + lp.publish("vehicleOdometer", 0.0) } else { lp.socEstimator = nil @@ -1182,6 +1179,22 @@ func (lp *LoadPoint) publishSoCAndRange() { } lp.setRemainingEnergy(1e3 * lp.socEstimator.RemainingChargeEnergy(lp.SoC.Target)) + + // range + if vs, ok := lp.vehicle.(api.VehicleRange); ok { + if rng, err := vs.Range(); err == nil { + lp.log.DEBUG.Printf("vehicle range: %vkm", rng) + lp.publish("vehicleRange", rng) + } + } + + // odometer + if vs, ok := lp.vehicle.(api.VehicleOdometer); ok { + if odo, err := vs.Odometer(); err == nil { + lp.log.DEBUG.Printf("vehicle odometer: %vkm", odo) + lp.publish("vehicleOdometer", odo) + } + } } else { if errors.Is(err, api.ErrMustRetry) { lp.socUpdated = time.Time{} @@ -1190,14 +1203,6 @@ func (lp *LoadPoint) publishSoCAndRange() { } } - // range - if vs, ok := lp.vehicle.(api.VehicleRange); ok { - if rng, err := vs.Range(); err == nil { - lp.log.DEBUG.Printf("vehicle range: %vkm", rng) - lp.publish("vehicleRange", rng) - } - } - return } @@ -1248,9 +1253,6 @@ func (lp *LoadPoint) Update(sitePower float64, cheap bool, batteryBuffered bool) } } - // odometer etc, if active - lp.runTasks() - // publish soc after updating charger status to make sure // initial update of connected state matches charger status lp.publishSoCAndRange() diff --git a/core/loadpoint_task.go b/core/loadpoint_task.go deleted file mode 100644 index 3eb767a77..000000000 --- a/core/loadpoint_task.go +++ /dev/null @@ -1,41 +0,0 @@ -package core - -import ( - "errors" - - "github.com/evcc-io/evcc/api" -) - -// task adds a task to the list of running tasks -func (lp *LoadPoint) task(task func() error) { - lp.tasks = append(lp.tasks, task) -} - -// runTasks runs all defined tasks -func (lp *LoadPoint) runTasks() { - var incomplete []func() error - for _, task := range lp.tasks { - err := task() - if errors.Is(err, api.ErrMustRetry) { - incomplete = append(incomplete, task) - } - } - lp.tasks = incomplete -} - -func (lp *LoadPoint) odometer() error { - v, ok := lp.vehicle.(api.VehicleOdometer) - if !ok { - return nil - } - - odo, err := v.Odometer() - switch err { - case nil: - lp.publish("vehicleOdometer", odo) - case api.ErrMustRetry: - default: - lp.log.ERROR.Printf("vehicle odometer: %v", err) - } - return err -}