Vehicle: don't instantiate disabled vehicles (#32919)
This commit is contained in:
parent
8cf5a44a32
commit
adfbd057b0
5 changed files with 74 additions and 12 deletions
|
|
@ -253,7 +253,8 @@ func NewLoadpointFromConfig(log *util.Logger, settings settings.Settings, collec
|
|||
}
|
||||
lp.defaultVehicle = dev.Instance()
|
||||
if lp.defaultVehicle == nil {
|
||||
return lp, errors.New("missing default vehicle instance")
|
||||
// disabled vehicle
|
||||
lp.log.DEBUG.Printf("default vehicle '%s' is disabled", lp.VehicleRef)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,9 @@ import (
|
|||
"github.com/evcc-io/evcc/core/soc"
|
||||
"github.com/evcc-io/evcc/messenger"
|
||||
"github.com/evcc-io/evcc/util"
|
||||
"github.com/evcc-io/evcc/util/config"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"go.uber.org/mock/gomock"
|
||||
)
|
||||
|
||||
|
|
@ -882,3 +884,26 @@ func TestBatteryBoostHold(t *testing.T) {
|
|||
// which is what keeps the sitePower priority adjustment applied to the loadpoint
|
||||
assert.NotEqual(t, boostDisabled, lp.GetBatteryBoost(), "hold is active")
|
||||
}
|
||||
|
||||
// default vehicle referencing a disabled vehicle must not fail loadpoint creation
|
||||
func TestNewLoadpointFromConfigDisabledVehicle(t *testing.T) {
|
||||
config.Reset()
|
||||
t.Cleanup(config.Reset)
|
||||
|
||||
ctrl := gomock.NewController(t)
|
||||
|
||||
// disabled vehicle: device registered without instance
|
||||
var vehicle api.Vehicle
|
||||
require.NoError(t, config.Vehicles().Add(config.NewStaticDevice(config.Named{Name: "vehicle"}, vehicle)))
|
||||
require.NoError(t, config.Chargers().Add(config.NewStaticDevice(config.Named{Name: "charger"}, api.Charger(api.NewMockCharger(ctrl)))))
|
||||
|
||||
lp, err := NewLoadpointFromConfig(util.NewLogger("foo"), nil, nil, map[string]any{
|
||||
"charger": "charger",
|
||||
"vehicle": "vehicle",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Nil(t, lp.defaultVehicle)
|
||||
|
||||
// disabled vehicle is filtered from instances
|
||||
require.Empty(t, config.Instances(config.Vehicles().Devices()))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,14 +104,7 @@ type vehicles struct {
|
|||
}
|
||||
|
||||
func (vv *vehicles) Instances() []api.Vehicle {
|
||||
devs := config.Vehicles().Devices()
|
||||
|
||||
res := make([]api.Vehicle, 0, len(devs))
|
||||
for _, dev := range devs {
|
||||
res = append(res, dev.Instance())
|
||||
}
|
||||
|
||||
return res
|
||||
return config.Instances(config.Vehicles().Devices())
|
||||
}
|
||||
|
||||
func (vv *vehicles) Settings() []vehicle.API {
|
||||
|
|
@ -119,6 +112,10 @@ func (vv *vehicles) Settings() []vehicle.API {
|
|||
|
||||
res := make([]vehicle.API, 0, len(devs))
|
||||
for _, dev := range devs {
|
||||
// skip disabled vehicles
|
||||
if dev.Instance() == nil {
|
||||
continue
|
||||
}
|
||||
res = append(res, vehicle.Adapter(vv.log, dev))
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue