Allow decorating powerless switch charger with separate meter (#2472)
This commit is contained in:
parent
acc581b903
commit
bec8cb202b
4 changed files with 17 additions and 11 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue