diff --git a/api/feature.go b/api/feature.go index 9d615d73aa..7880518608 100644 --- a/api/feature.go +++ b/api/feature.go @@ -14,4 +14,5 @@ func (f *Feature) UnmarshalText(text []byte) error { const ( _ Feature = iota Offline + CoarseCurrent ) diff --git a/api/feature_enumer.go b/api/feature_enumer.go index 55293ab84a..0beaac830a 100644 --- a/api/feature_enumer.go +++ b/api/feature_enumer.go @@ -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. diff --git a/core/loadpoint.go b/core/loadpoint.go index d97873fb17..b257c08d04 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -602,7 +602,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) @@ -686,12 +686,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) } @@ -929,13 +924,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. diff --git a/core/loadpoint_api.go b/core/loadpoint_api.go index 3d28a716de..2d789d2853 100644 --- a/core/loadpoint_api.go +++ b/core/loadpoint_api.go @@ -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) }