diff --git a/charger/helper.go b/charger/helper.go index 341c04c50..d51aaa61e 100644 --- a/charger/helper.go +++ b/charger/helper.go @@ -2,6 +2,7 @@ package charger import ( "bytes" + "errors" "fmt" "strings" @@ -10,6 +11,8 @@ import ( "golang.org/x/text/encoding/unicode" ) +var ErrLoadpointNotInitialized = errors.New("loadpoint not initialized") + // TODO remove when used var _ = ensureCharger diff --git a/charger/twc3.go b/charger/twc3.go index 9d113dde5..016fb4910 100644 --- a/charger/twc3.go +++ b/charger/twc3.go @@ -104,7 +104,7 @@ func (c *Twc3) Enabled() (bool, error) { // Enable implements the api.Charger interface func (c *Twc3) Enable(enable bool) error { if c.lp == nil { - return errors.New("loadpoint not initialized") + return ErrLoadpointNotInitialized } // ignore disabling when vehicle is already disconnected @@ -134,7 +134,7 @@ func (c *Twc3) Enable(enable bool) error { // MaxCurrent implements the api.Charger interface func (c *Twc3) MaxCurrent(current int64) error { if c.lp == nil { - return errors.New("loadpoint not initialized") + return ErrLoadpointNotInitialized } v, ok := c.lp.GetVehicle().(api.CurrentController) diff --git a/charger/vehicle-api.go b/charger/vehicle-api.go index dbc2cb9e2..187567fa9 100644 --- a/charger/vehicle-api.go +++ b/charger/vehicle-api.go @@ -55,12 +55,12 @@ func (c *VehicleApi) isVehicleAtHome(vehicle api.Vehicle) (bool, error) { return true, nil // Assume at charger if geofencing is disabled } - positioner, ok := vehicle.(api.VehiclePosition) + v, ok := vehicle.(api.VehiclePosition) if !ok { return false, errors.New("vehicle must support position tracking if geofence is enabled") } - lat, lon, err := positioner.Position() + lat, lon, err := v.Position() if err != nil { return false, err } @@ -97,12 +97,12 @@ func (c *VehicleApi) Status() (api.ChargeStatus, error) { } } - chargeState, ok := vehicle.(api.ChargeState) + v, ok := vehicle.(api.ChargeState) if !ok { return api.StatusA, errors.New("vehicle not capable of reporting charging status") } - status, err := chargeState.Status() + status, err := v.Status() if err != nil { return api.StatusNone, err } @@ -122,7 +122,7 @@ func (c *VehicleApi) Enabled() (bool, error) { // Enable implements the api.Charger interface func (c *VehicleApi) Enable(enable bool) error { if c.lp == nil { - return errors.New("loadpoint not initialized") + return ErrLoadpointNotInitialized } status, err := c.Status() @@ -136,12 +136,12 @@ func (c *VehicleApi) Enable(enable bool) error { return nil } - chargeController, ok := c.lp.GetVehicle().(api.ChargeController) + v, ok := c.lp.GetVehicle().(api.ChargeController) if !ok { return errors.New("vehicle not capable of start/stop") } - if err := chargeController.ChargeEnable(enable); err != nil { + if err := v.ChargeEnable(enable); err != nil { return err } @@ -155,16 +155,32 @@ func (c *VehicleApi) Enable(enable bool) error { // MaxCurrent implements the api.Charger interface func (c *VehicleApi) MaxCurrent(current int64) error { if c.lp == nil { - return errors.New("loadpoint not initialized") + return ErrLoadpointNotInitialized } - currentController, ok := c.lp.GetVehicle().(api.CurrentController) + v, ok := c.lp.GetVehicle().(api.CurrentController) if !ok { // If we cannot control the current, we just pretend that we do return nil } - return currentController.MaxCurrent(current) + return v.MaxCurrent(current) +} + +var _ api.Resurrector = (*VehicleApi)(nil) + +// WakeUp implements the api.Resurrector interface +func (c *VehicleApi) WakeUp() error { + if c.lp == nil { + return ErrLoadpointNotInitialized + } + + v, ok := c.lp.GetVehicle().(api.Resurrector) + if !ok { + return nil + } + + return v.WakeUp() } var _ loadpoint.Controller = (*VehicleApi)(nil)