Sessions: add odometer (#5069)

This commit is contained in:
andig 2022-11-07 16:32:19 +01:00 • committed by GitHub
parent dc22d10ed3
commit db9f5dd73d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 26 additions and 11 deletions

View file

@ -201,6 +201,7 @@ title = "Ladevorgänge"
downloadCsv = "Als CSV herunterladen"
loadpoint = "Ladepunkt"
vehicle = "Fahrzeug"
odometer = "Kilometerstand"
energy = "Geladen"
date = "Zeitraum"

View file

@ -207,6 +207,7 @@ date = "Period"
[sessions.csv]
loadpoint = "Loadpoint"
vehicle = "Vehicle"
odometer = "Mileage (km)"
identifier = "Identifier"
chargedenergy = "Energy (kWh)"
meterstart = "Meter Start (kWh)"

View file

@ -23,6 +23,7 @@ type Session struct {
Loadpoint string `json:"loadpoint"`
Identifier string `json:"identifier"`
Vehicle string `json:"vehicle"`
Odometer float64 `json:"odometer"`
MeterStart float64 `json:"meterStart" csv:"Meter Start (kWh)" gorm:"column:meter_start_kwh"`
MeterStop float64 `json:"meterStop" csv:"Meter Stop (kWh)" gorm:"column:meter_end_kwh"`
ChargedEnergy float64 `json:"chargedEnergy" csv:"Charged Energy (kWh)" gorm:"column:charged_kwh"`

View file

@ -905,7 +905,15 @@ func (lp *LoadPoint) setActiveVehicle(vehicle api.Vehicle) {
lp.Lock()
lp.unpublishVehicle()
lp.updateSession()
lp.updateSession(func(session *db.Session) {
var title string
if lp.vehicle != nil {
title = lp.vehicle.Title()
}
lp.session.Vehicle = title
})
}
func (lp *LoadPoint) wakeUpVehicle() {
@ -1039,6 +1047,11 @@ func (lp *LoadPoint) vehicleOdometer() {
if odo, err := vs.Odometer(); err == nil {
lp.log.DEBUG.Printf("vehicle odometer: %.0fkm", odo)
lp.publish(vehicleOdometer, odo)
// update session once odometer is read
lp.updateSession(func(session *db.Session) {
session.Odometer = odo
})
} else {
lp.log.ERROR.Printf("vehicle odometer: %v", err)
}

View file

@ -2,6 +2,7 @@ package core
import (
"github.com/evcc-io/evcc/api"
"github.com/evcc-io/evcc/core/db"
)
func (lp *LoadPoint) chargeMeterTotal() float64 {
@ -53,21 +54,19 @@ func (lp *LoadPoint) stopSession() {
lp.db.Persist(lp.session)
}
func (lp *LoadPoint) updateSession() {
type sessionOption func(*db.Session)
func (lp *LoadPoint) updateSession(opts ...sessionOption) {
// test guard
if lp.db == nil || lp.session == nil {
return
}
var title string
if lp.vehicle != nil {
title = lp.vehicle.Title()
for _, opt := range opts {
opt(lp.session)
}
if lp.session.Vehicle != title {
lp.session.Vehicle = title
lp.db.Persist(lp.session)
}
lp.db.Persist(lp.session)
}
func (lp *LoadPoint) finalizeSession() {

File diff suppressed because one or more lines are too long

2
dist/index.html vendored
View file

@ -20,7 +20,7 @@
<meta name="theme-color" content="#020318" />
<title>evcc</title>
<script type="module" crossorigin src="./assets/index.2e41d610.js"></script>
<script type="module" crossorigin src="./assets/index.3dafc84f.js"></script>
<link rel="stylesheet" href="./assets/index.ab3ceb62.css">
</head>