evcc-io/server/http_history_handler.go
2026-04-15 11:34:28 +00:00

51 lines
1 KiB
Go

package server
import (
"errors"
"net/http"
"time"
"github.com/evcc-io/evcc/core/metrics"
"github.com/evcc-io/evcc/server/db"
)
// energyHistoryHandler returns aggregated energy history data
func energyHistoryHandler(w http.ResponseWriter, r *http.Request) {
if db.Instance == nil {
jsonError(w, http.StatusBadRequest, errors.New("database offline"))
return
}
q := r.URL.Query()
var from, to time.Time
if s := q.Get("from"); s != "" {
var err error
if from, err = time.Parse(time.RFC3339, s); err != nil {
jsonError(w, http.StatusBadRequest, errors.New("invalid 'from' parameter"))
return
}
}
if s := q.Get("to"); s != "" {
var err error
if to, err = time.Parse(time.RFC3339, s); err != nil {
jsonError(w, http.StatusBadRequest, errors.New("invalid 'to' parameter"))
return
}
}
aggregate := q.Get("aggregate")
if aggregate == "" {
aggregate = "15m"
}
res, err := metrics.QueryImportEnergy(from, to, aggregate)
if err != nil {
jsonError(w, http.StatusInternalServerError, err)
return
}
jsonWrite(w, res)
}