Loadpoint: reset fake charge rater when interrupting session (#22293)
This commit is contained in:
parent
0899b44c5a
commit
a2b8c1cbc2
2 changed files with 34 additions and 4 deletions
|
|
@ -4,6 +4,7 @@ import (
|
|||
"github.com/evcc-io/evcc/api"
|
||||
"github.com/evcc-io/evcc/core/keys"
|
||||
"github.com/evcc-io/evcc/core/session"
|
||||
"github.com/evcc-io/evcc/core/wrapper"
|
||||
"github.com/jinzhu/now"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
|
@ -72,10 +73,6 @@ func (lp *Loadpoint) stopSession() {
|
|||
s.MeterStop = &meterStop
|
||||
}
|
||||
|
||||
if chargedEnergy := lp.GetChargedEnergy() / 1e3; chargedEnergy > s.ChargedEnergy {
|
||||
lp.energyMetrics.Update(chargedEnergy)
|
||||
}
|
||||
|
||||
s.SolarPercentage = lo.ToPtr(lp.energyMetrics.SolarPercentage())
|
||||
s.Price = lp.energyMetrics.Price()
|
||||
s.PricePerKWh = lp.energyMetrics.PricePerKWh()
|
||||
|
|
@ -125,5 +122,10 @@ func (lp *Loadpoint) resetHeatingSession() {
|
|||
|
||||
lp.stopSession()
|
||||
lp.clearSession()
|
||||
|
||||
if cr, ok := lp.chargeRater.(wrapper.ChargeResetter); ok {
|
||||
cr.ResetCharge()
|
||||
}
|
||||
|
||||
lp.createSession()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,11 @@ type ChargeRater struct {
|
|||
chargedEnergy float64
|
||||
}
|
||||
|
||||
// ChargeResetter resets the charging session
|
||||
type ChargeResetter interface {
|
||||
ResetCharge()
|
||||
}
|
||||
|
||||
// NewChargeRater creates charge rater and initializes realtime clock
|
||||
func NewChargeRater(log *util.Logger, meter api.Meter) *ChargeRater {
|
||||
return &ChargeRater{
|
||||
|
|
@ -78,6 +83,29 @@ func (cr *ChargeRater) StopCharge() {
|
|||
}
|
||||
}
|
||||
|
||||
var _ ChargeResetter = (*ChargeRater)(nil)
|
||||
|
||||
// ChargeResetter resets the charging session
|
||||
func (cr *ChargeRater) ResetCharge() {
|
||||
cr.Lock()
|
||||
defer cr.Unlock()
|
||||
|
||||
// get end energy amount
|
||||
if m, ok := cr.meter.(api.MeterEnergy); ok {
|
||||
if f, err := m.TotalEnergy(); err == nil {
|
||||
cr.chargedEnergy += f - cr.startEnergy
|
||||
cr.log.DEBUG.Printf("charge final energy: %.3fkWh", cr.chargedEnergy)
|
||||
|
||||
cr.startEnergy = f
|
||||
} else {
|
||||
cr.log.ERROR.Printf("charge total import: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
cr.chargedEnergy = 0
|
||||
cr.start = cr.clck.Now()
|
||||
}
|
||||
|
||||
// SetChargePower increments consumed energy by amount in kWh since last update
|
||||
func (cr *ChargeRater) SetChargePower(power float64) {
|
||||
cr.Lock()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue