80 lines
1.2 KiB
Go
80 lines
1.2 KiB
Go
package core
|
|
|
|
import (
|
|
"github.com/evcc-io/evcc/api"
|
|
)
|
|
|
|
func (lp *LoadPoint) chargeMeterTotal() float64 {
|
|
m, ok := lp.chargeMeter.(api.MeterEnergy)
|
|
if !ok {
|
|
return 0
|
|
}
|
|
|
|
f, err := m.TotalEnergy()
|
|
if err != nil {
|
|
lp.log.ERROR.Printf("meter energy: %v", err)
|
|
return 0
|
|
}
|
|
|
|
return f
|
|
}
|
|
|
|
func (lp *LoadPoint) startTxn() {
|
|
// test guard
|
|
if lp.db == nil {
|
|
return
|
|
}
|
|
|
|
if lp.txn == nil {
|
|
lp.txn = lp.db.Txn(lp.chargeMeterTotal())
|
|
|
|
if lp.vehicle != nil {
|
|
lp.txn.Vehicle = lp.vehicle.Title()
|
|
}
|
|
|
|
if c, ok := lp.charger.(api.Identifier); ok {
|
|
if id, err := c.Identify(); err == nil {
|
|
lp.txn.Identifier = id
|
|
}
|
|
}
|
|
|
|
lp.db.Persist(lp.txn)
|
|
}
|
|
}
|
|
|
|
func (lp *LoadPoint) stopTxn() {
|
|
// test guard
|
|
if lp.db == nil || lp.txn == nil {
|
|
return
|
|
}
|
|
|
|
lp.txn.Stop(lp.chargedEnergy, lp.chargeMeterTotal())
|
|
|
|
lp.db.Persist(lp.txn)
|
|
}
|
|
|
|
func (lp *LoadPoint) updateTxn() {
|
|
// test guard
|
|
if lp.db == nil || lp.txn == nil {
|
|
return
|
|
}
|
|
|
|
var title string
|
|
if lp.vehicle != nil {
|
|
title = lp.vehicle.Title()
|
|
}
|
|
|
|
if lp.txn.Vehicle != title {
|
|
lp.txn.Vehicle = title
|
|
lp.db.Persist(lp.txn)
|
|
}
|
|
}
|
|
|
|
func (lp *LoadPoint) finalizeTxn() {
|
|
// test guard
|
|
if lp.db == nil {
|
|
return
|
|
}
|
|
|
|
lp.txn = nil
|
|
}
|