Persistent Savings (#4956)
This commit is contained in:
parent
2905c0a3ee
commit
cef8bb15fc
9 changed files with 45 additions and 9 deletions
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
<div class="modal-body">
|
||||
<p>
|
||||
{{
|
||||
$t("footer.savings.sinceServerStart", {
|
||||
$t("footer.savings.since", {
|
||||
since: fmtTimeAgo(secondsSinceStart()),
|
||||
})
|
||||
}}
|
||||
|
|
|
|||
|
|
@ -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
4
dist/index.html
vendored
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue