diff --git a/charger/fritzdect.go b/charger/fritzdect.go index e7bfe3152..05e33d8fe 100644 --- a/charger/fritzdect.go +++ b/charger/fritzdect.go @@ -139,10 +139,10 @@ func (c *FritzDECT) CurrentPower() (float64, error) { return power, err } -var _ api.ChargeRater = (*FritzDECT)(nil) +var _ api.MeterEnergy = (*FritzDECT)(nil) -// ChargedEnergy implements the api.ChargeRater interface -func (c *FritzDECT) ChargedEnergy() (float64, error) { +// TotalEnergy implements the api.MeterEnergy interface +func (c *FritzDECT) TotalEnergy() (float64, error) { // fetch basicdevicestats resp, err := c.fritzdect.ExecCmd("getbasicdevicestats") if err != nil { diff --git a/charger/tasmota.go b/charger/tasmota.go index 6d4101154..a8002d324 100644 --- a/charger/tasmota.go +++ b/charger/tasmota.go @@ -125,10 +125,10 @@ func (c *Tasmota) CurrentPower() (float64, error) { return power, err } -var _ api.ChargeRater = (*Tasmota)(nil) +var _ api.MeterEnergy = (*Tasmota)(nil) -// ChargedEnergy implements the api.ChargeRater interface -func (c *Tasmota) ChargedEnergy() (float64, error) { +// TotalEnergy implements the api.MeterEnergy interface +func (c *Tasmota) TotalEnergy() (float64, error) { var resp tasmota.StatusSNSResponse err := c.GetJSON(c.cmdUri("Status 8"), &resp) diff --git a/charger/tplink.go b/charger/tplink.go index e612ebcbd..5f4c9e159 100644 --- a/charger/tplink.go +++ b/charger/tplink.go @@ -134,10 +134,10 @@ func (c *TPLink) CurrentPower() (float64, error) { return power, nil } -var _ api.ChargeRater = (*TPLink)(nil) +var _ api.MeterEnergy = (*TPLink)(nil) -// ChargedEnergy implements the api.ChargeRater interface -func (c *TPLink) ChargedEnergy() (float64, error) { +// TotalEnergy implements the api.MeterEnergy interface +func (c *TPLink) TotalEnergy() (float64, error) { var resp tplink.DayStatResponse year, month, day := time.Now().Date() cmd := fmt.Sprintf(`{"emeter":{"get_daystat":{"day":%v,"month":%v,"year":%v}}}`, day, int(month), year) diff --git a/core/loadpoint.go b/core/loadpoint.go index d8017782c..5228f556a 100644 --- a/core/loadpoint.go +++ b/core/loadpoint.go @@ -302,12 +302,16 @@ func (lp *LoadPoint) requestUpdate() { // configureChargerType ensures that chargeMeter, Rate and Timer can use charger capabilities func (lp *LoadPoint) configureChargerType(charger api.Charger) { + var integrated bool + // ensure charge meter exists if lp.chargeMeter == nil { + integrated = true + if mt, ok := charger.(api.Meter); ok { lp.chargeMeter = mt } else { - mt := &wrapper.ChargeMeter{} + mt := new(wrapper.ChargeMeter) _ = lp.bus.Subscribe(evChargeCurrent, lp.evChargeCurrentWrappedMeterHandler) _ = lp.bus.Subscribe(evChargeStop, func() { mt.SetPower(0) }) lp.chargeMeter = mt @@ -315,7 +319,9 @@ func (lp *LoadPoint) configureChargerType(charger api.Charger) { } // ensure charge rater exists - if rt, ok := charger.(api.ChargeRater); ok { + // measurement are obtained from separate charge meter if defined + // (https://github.com/evcc-io/evcc/issues/2469) + if rt, ok := charger.(api.ChargeRater); ok && integrated { lp.chargeRater = rt } else { rt := wrapper.NewChargeRater(lp.log, lp.chargeMeter)