Add CoarseCurrent feature for vehicles that can't follow mA charging (#4662)

This commit is contained in:
andig 2022-10-05 17:49:38 +02:00 • committed by GitHub
parent 85d0117b5a
commit 6e943a0405
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 21 deletions

View file

@ -14,4 +14,5 @@ func (f *Feature) UnmarshalText(text []byte) error {
const (
_ Feature = iota
Offline
CoarseCurrent
)

View file

@ -7,11 +7,11 @@ import (
"strings"
)
const _FeatureName = "Offline"
const _FeatureName = "OfflineCoarseCurrent"
var _FeatureIndex = [...]uint8{0, 7}
var _FeatureIndex = [...]uint8{0, 7, 20}
const _FeatureLowerName = "offline"
const _FeatureLowerName = "offlinecoarsecurrent"
func (i Feature) String() string {
i -= 1
@ -26,17 +26,21 @@ func (i Feature) String() string {
func _FeatureNoOp() {
var x [1]struct{}
_ = x[Offline-(1)]
_ = x[CoarseCurrent-(2)]
}
var _FeatureValues = []Feature{Offline}
var _FeatureValues = []Feature{Offline, CoarseCurrent}
var _FeatureNameToValueMap = map[string]Feature{
_FeatureName[0:7]: Offline,
_FeatureLowerName[0:7]: Offline,
_FeatureName[0:7]: Offline,
_FeatureLowerName[0:7]: Offline,
_FeatureName[7:20]: CoarseCurrent,
_FeatureLowerName[7:20]: CoarseCurrent,
}
var _FeatureNames = []string{
_FeatureName[0:7],
_FeatureName[7:20],
}
// FeatureString retrieves an enum value from the enum constants string name.

View file

@ -613,7 +613,7 @@ func (lp *LoadPoint) setLimit(chargeCurrent float64, force bool) error {
// set current
if chargeCurrent != lp.chargeCurrent && chargeCurrent >= lp.GetMinCurrent() {
var err error
if charger, ok := lp.charger.(api.ChargerEx); ok {
if charger, ok := lp.charger.(api.ChargerEx); ok && !lp.vehicleHasFeature(api.CoarseCurrent) {
err = charger.MaxCurrentMillis(chargeCurrent)
} else {
chargeCurrent = math.Trunc(chargeCurrent)
@ -697,12 +697,7 @@ func (lp *LoadPoint) setStatus(status api.ChargeStatus) {
// targetEnergyReached checks if target is configured and reached
func (lp *LoadPoint) targetEnergyReached() bool {
v, ok := lp.vehicle.(api.FeatureDescriber)
if ok {
ok = v.Has(api.Offline)
}
return (v == nil || ok) &&
return (lp.vehicle == nil || lp.vehicleHasFeature(api.Offline)) &&
lp.targetEnergy > 0 &&
lp.chargedEnergy/1e3 >= float64(lp.targetEnergy)
}
@ -941,13 +936,18 @@ func (lp *LoadPoint) unpublishVehicle() {
lp.vehiclePublishFeature(api.Offline)
}
// vehiclePublishFeature availability of vehicle features
func (lp *LoadPoint) vehiclePublishFeature(f api.Feature) {
// vehicleHasFeature checks availability of vehicle feature
func (lp *LoadPoint) vehicleHasFeature(f api.Feature) bool {
v, ok := lp.vehicle.(api.FeatureDescriber)
if ok {
ok = v.Has(f)
}
lp.publish("vehicleFeature"+f.String(), ok)
return ok
}
// vehiclePublishFeature availability of vehicle features
func (lp *LoadPoint) vehiclePublishFeature(f api.Feature) {
lp.publish("vehicleFeature"+f.String(), lp.vehicleHasFeature(f))
}
// vehicleUnidentified returns true if there are associated vehicles and detection is running.

View file

@ -59,11 +59,10 @@ func (lp *LoadPoint) GetTargetEnergy() int {
// setTargetEnergy sets loadpoint charge target energy (no mutex)
func (lp *LoadPoint) setTargetEnergy(energy int) {
lp.targetEnergy = energy
// test guard
if lp.socTimer != nil {
// TODO soctimer
// lp.socTimer.Energy = energy
}
// TODO soctimer
// if lp.socTimer != nil {
// lp.socTimer.Energy = energy
// }
lp.publish("targetEnergy", energy)
}