diff --git a/core/helper.go b/core/helper.go index 4035b9716..2e2d3fc3e 100644 --- a/core/helper.go +++ b/core/helper.go @@ -2,6 +2,7 @@ package core import ( "fmt" + "slices" "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util/config" @@ -47,6 +48,12 @@ func ptrValueEqual[T comparable](a, b *T) bool { return a == nil && b == nil || (*a) == (*b) } +// hasFeature returns true if features are supported and given feature present +func hasFeature(a any, f api.Feature) bool { + c, ok := a.(api.FeatureDescriber) + return ok && slices.Contains(c.Features(), f) +} + // deviceProperties returns the common device data for the given reference func deviceProperties[T any](dev config.Device[T]) config.Properties { if d, ok := dev.(config.ConfigurableDevice[T]); ok { diff --git a/core/loadpoint.go b/core/loadpoint.go index 7b5517a7e..89163ff49 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -1092,7 +1092,7 @@ func (lp *Loadpoint) updateChargerStatus() (bool, error) { if prevStatus != api.StatusNone { switch ev { case evVehicleConnect: - welcomeCharge = lp.chargerHasFeature(api.WelcomeCharge) + welcomeCharge = lp.chargerHasFeature(api.WelcomeCharge) || hasFeature(lp.defaultVehicle, api.WelcomeCharge) // Enable charging on connect if any available vehicle requires it. // We're using the PV timer to disable after the welcome diff --git a/core/loadpoint_charger.go b/core/loadpoint_charger.go index 8736868e8..8a09eecb1 100644 --- a/core/loadpoint_charger.go +++ b/core/loadpoint_charger.go @@ -1,8 +1,6 @@ package core import ( - "slices" - "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/core/keys" "github.com/evcc-io/evcc/core/soc" @@ -10,8 +8,7 @@ import ( // chargerHasFeature checks availability of charger feature func (lp *Loadpoint) chargerHasFeature(f api.Feature) bool { - c, ok := lp.charger.(api.FeatureDescriber) - return ok && slices.Contains(c.Features(), f) + return hasFeature(lp.charger, f) } // publishChargerFeature publishes availability of charger features diff --git a/core/loadpoint_vehicle.go b/core/loadpoint_vehicle.go index 18dce88b6..a4dd0b2c6 100644 --- a/core/loadpoint_vehicle.go +++ b/core/loadpoint_vehicle.go @@ -3,7 +3,6 @@ package core import ( "errors" "regexp" - "slices" "strings" "time" @@ -219,8 +218,7 @@ func (lp *Loadpoint) unpublishVehicle() { // vehicleHasFeature checks availability of vehicle feature func (lp *Loadpoint) vehicleHasFeature(f api.Feature) bool { - v, ok := lp.GetVehicle().(api.FeatureDescriber) - return ok && slices.Contains(v.Features(), f) + return hasFeature(lp.GetVehicle(), f) } // vehicleUnidentified returns true if there are associated vehicles and detection is running.