Persistent Savings (#4956)

This commit is contained in:
Michael Geers 2022-10-25 22:05:03 +02:00 • committed by GitHub
parent 2905c0a3ee
commit cef8bb15fc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 45 additions and 9 deletions

View file

@ -29,7 +29,7 @@ modalUpdateStatusFailed = "Aktualisierung nicht möglich: "
footerShort = "{percent}% Sonne"
footerLong = "{percent}% Sonnenenergie"
modalTitle = "Auswertung Ladeenergie"
sinceServerStart = "Seit Serverstart {since}."
since = "Seit {since}."
percentTitle = "Sonnenenergie"
percentSelf = "{self} kWh Sonne"
percentGrid = "{grid} kWh Netz"

View file

@ -29,7 +29,7 @@ modalUpdateStatusFailed = "Update failed: "
footerShort = "{percent}% solar"
footerLong = "{percent}% solar energy"
modalTitle = "Charge Energy Overview"
sinceServerStart = "Since server start {since}."
since = "Since {since}."
percentTitle = "Solar Energy"
percentSelf = "{self} kWh solar"
percentGrid = "{grid} kWh grid"

View file

@ -29,7 +29,7 @@ modalUpdateStatusFailed = "Naujinimas nepavyko: "
footerShort = "{percent}% saulės"
footerLong = "{percent}% saulės energija"
modalTitle = "Įkrovimo energijos apžvalga"
sinceServerStart = "Nuo evcc starto {since}."
since = "Nuo {since}."
percentTitle = "Saulės energija"
percentSelf = "{self} kWh saulės"
percentGrid = "{grid} kWh tinklas"

View file

@ -43,7 +43,7 @@
<div class="modal-body">
<p>
{{
$t("footer.savings.sinceServerStart", {
$t("footer.savings.since", {
since: fmtTimeAgo(secondsSinceStart()),
})
}}

View file

@ -5,6 +5,7 @@ import (
"time"
"github.com/benbjohnson/clock"
"github.com/evcc-io/evcc/server/db/settings"
"github.com/evcc-io/evcc/tariff"
)
@ -41,9 +42,29 @@ func NewSavings(tariffs tariff.Tariffs) *Savings {
updated: clock.Now(),
}
savings.load()
return savings
}
func (s *Savings) load() {
s.started, _ = settings.Time("savings.started")
s.gridCharged, _ = settings.Float("savings.gridCharged")
s.gridCost, _ = settings.Float("savings.gridCost")
s.gridSavedCost, _ = settings.Float("savings.gridSavedCost")
s.selfConsumptionCharged, _ = settings.Float("savings.selfConsumptionCharged")
s.selfConsumptionCost, _ = settings.Float("savings.selfConsumptionCost")
}
func (s *Savings) save() {
settings.SetTime("savings.started", s.started)
settings.SetFloat("savings.gridCharged", s.gridCharged)
settings.SetFloat("savings.gridCost", s.gridCost)
settings.SetFloat("savings.gridSavedCost", s.gridSavedCost)
settings.SetFloat("savings.selfConsumptionCharged", s.selfConsumptionCharged)
settings.SetFloat("savings.selfConsumptionCost", s.selfConsumptionCost)
}
func (s *Savings) Since() time.Time {
return s.started
}
@ -155,5 +176,7 @@ func (s *Savings) Update(p publisher, gridPower, pvPower, batteryPower, chargePo
p.publish("savingsEffectivePrice", s.EffectivePrice())
p.publish("savingsAmount", s.SavingsAmount())
s.save()
return deltaCharged, deltaSelf
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

4
dist/index.html vendored
View file

@ -20,8 +20,8 @@
<meta name="theme-color" content="#020318" />
<title>evcc</title>
<script type="module" crossorigin src="./assets/index.34c57bb3.js"></script>
<link rel="stylesheet" href="./assets/index.0f7f1beb.css">
<script type="module" crossorigin src="./assets/index.170c5f46.js"></script>
<link rel="stylesheet" href="./assets/index.08f10448.css">
</head>
<body>

View file

@ -5,6 +5,7 @@ import (
"errors"
"strconv"
"sync/atomic"
"time"
"github.com/evcc-io/evcc/server/db"
"golang.org/x/exp/slices"
@ -62,6 +63,10 @@ func SetFloat(key string, val float64) {
SetString(key, strconv.FormatFloat(val, 'f', -1, 64))
}
func SetTime(key string, val time.Time) {
SetString(key, val.Format(time.RFC3339))
}
func SetJson(key string, val any) error {
b, err := json.Marshal(val)
if err == nil {
@ -96,6 +101,14 @@ func Float(key string) (float64, error) {
return strconv.ParseFloat(s, 64)
}
func Time(key string) (time.Time, error) {
s, err := String(key)
if err != nil {
return time.Now(), err
}
return time.Parse(time.RFC3339, s)
}
func Json(key string, res any) error {
s, err := String(key)
if err == nil {