Add CurrentGetter api for validating charger current (#9147)

This commit is contained in:
andig 2023-07-28 10:26:34 +02:00 • committed by GitHub
parent 7d6a3914c8
commit ad92a44b2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 0 deletions

View file

@ -113,6 +113,11 @@ type CurrentLimiter interface {
MaxCurrent(current int64) error
}
// CurrentGetter provides getting charging maximum charging current for validation
type CurrentGetter interface {
GetMaxCurrent() (float64, error)
}
// Charger provides current charging status and enable/disable charging
type Charger interface {
ChargeState

View file

@ -652,6 +652,24 @@ func (lp *Loadpoint) syncCharger() error {
return lp.charger.Enable(false)
}
if charger, ok := lp.charger.(api.CurrentGetter); ok {
current, err := charger.GetMaxCurrent()
if err != nil {
return err
}
if enabled && lp.chargeCurrent != current {
if lp.guardGracePeriodElapsed() {
lp.log.WARN.Printf("charger logic error: current mismatch (got %.3gA, expected %.3gA)", current, lp.chargeCurrent)
}
if charger, ok := lp.charger.(api.ChargerEx); ok {
return charger.MaxCurrentMillis(lp.chargeCurrent)
}
return lp.charger.MaxCurrent(int64(lp.chargeCurrent))
}
}
return nil
}