evVehicleDisconnectHandler sends external start event
()
| 570 | |
| 571 | // evVehicleDisconnectHandler sends external start event |
| 572 | func (lp *Loadpoint) evVehicleDisconnectHandler() { |
| 573 | lp.log.INFO.Println("car disconnected") |
| 574 | |
| 575 | // re-read energy from charger and re-persist session if values improved |
| 576 | lp.finalizeSessionEnergy() |
| 577 | |
| 578 | // re-read odometer to catch delayed update (#30225) |
| 579 | lp.vehicleOdometer() |
| 580 | |
| 581 | // session is persisted during evChargeStopHandler which runs before |
| 582 | lp.clearSession() |
| 583 | |
| 584 | // clear locked plan goal on disconnect |
| 585 | lp.clearPlanLock() |
| 586 | |
| 587 | // phases are unknown when vehicle disconnects |
| 588 | lp.ResetMeasuredPhases() |
| 589 | |
| 590 | // energy and duration |
| 591 | lp.energyMetrics.Publish("session", lp) |
| 592 | lp.publish(keys.ChargedEnergy, lp.GetChargedEnergy()) |
| 593 | lp.publish(keys.ConnectedDuration, lp.clock.Since(lp.connectedTime).Round(time.Second)) |
| 594 | |
| 595 | // charge status |
| 596 | lp.publish(keys.ChargerStatusReason, api.ReasonUnknown) |
| 597 | |
| 598 | // forget startup energy offset |
| 599 | lp.chargedAtStartup = 0 |
| 600 | |
| 601 | // remove charger vehicle id and stop potential detection |
| 602 | lp.setVehicleIdentifier("") |
| 603 | lp.stopVehicleDetection() |
| 604 | |
| 605 | // set default mode on disconnect |
| 606 | // skip for integrated devices: the "disconnect" here is just the socket |
| 607 | // being switched off, not a vehicle being unplugged - keep the user's mode (#30187) |
| 608 | if !lp.chargerHasFeature(api.IntegratedDevice) { |
| 609 | lp.defaultMode() |
| 610 | } |
| 611 | |
| 612 | // set default vehicle (may be nil) |
| 613 | lp.setActiveVehicle(lp.defaultVehicle) |
| 614 | |
| 615 | // soc update reset |
| 616 | lp.socUpdated = time.Time{} |
| 617 | |
| 618 | // boost |
| 619 | if err := lp.SetBatteryBoost(false); err != nil { |
| 620 | lp.log.ERROR.Printf("battery boost: %v", err) |
| 621 | } |
| 622 | |
| 623 | // reset session |
| 624 | lp.SetLimitSoc(0) |
| 625 | lp.SetLimitEnergy(0) |
| 626 | |
| 627 | // mark plan slot as inactive |
| 628 | // this will force a deletion of an outdated plan once plan time is expired in GetPlan() |
| 629 | lp.setPlanActive(false) |