Vehicle api charger: add wakeup (#26780)

This commit is contained in:
andig 2026-01-18 14:31:40 +01:00 • committed by GitHub
parent cbdd129286
commit 4048f855d9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 31 additions and 12 deletions

View file

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

View file

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

View file

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