diff --git a/cmd/invertergui/main.go b/cmd/invertergui/main.go index b01441e..280acb2 100644 --- a/cmd/invertergui/main.go +++ b/cmd/invertergui/main.go @@ -44,7 +44,7 @@ func main() { flag.Parse() source := datasource.NewJSONSource(*url) - gui := webgui.NewWebGui(source, 10*time.Second) + gui := webgui.NewWebGui(source, 10*time.Second, 100) http.Handle("/", gui) log.Fatal(http.ListenAndServe(":8080", nil)) } diff --git a/webgui/charge_tracker.go b/webgui/charge_tracker.go new file mode 100644 index 0000000..474e673 --- /dev/null +++ b/webgui/charge_tracker.go @@ -0,0 +1,35 @@ +package webgui + +import ( + "time" +) + +type ChargeTracker struct { + fullLevel float64 + currentLevel float64 + lastUpdate time.Time +} + +// Creates a new charge tracker. fullLevel is in A h. +func NewChargeTracker(fullLevel float64) *ChargeTracker { + return &ChargeTracker{ + fullLevel: fullLevel, + currentLevel: fullLevel, // Have to start somewhere. + lastUpdate: time.Now(), + } +} + +func (c *ChargeTracker) Update(amp float64) { + newNow := time.Now() + elapsed := newNow.Sub(c.lastUpdate).Hours() + c.lastUpdate = newNow + c.currentLevel -= elapsed * amp +} + +func (c *ChargeTracker) CurrentLevel() float64 { + return c.currentLevel +} + +func (c *ChargeTracker) Reset() { + c.currentLevel = c.fullLevel +} diff --git a/webgui/htmltemplate.go b/webgui/htmltemplate.go index 946b0a4..15c6149 100644 --- a/webgui/htmltemplate.go +++ b/webgui/htmltemplate.go @@ -65,6 +65,7 @@ var htmlTemplate string = `