131 lines
2.5 KiB
Go
131 lines
2.5 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/evcc-io/evcc/core/site"
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
// minSocHandler updates min soc
|
|
func minSocHandler(site site.API) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
|
|
v, err := site.Vehicles().ByName(vars["name"])
|
|
if err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
soc, err := strconv.Atoi(vars["value"])
|
|
if err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
v.SetMinSoc(soc)
|
|
|
|
res := struct {
|
|
Soc int `json:"soc"`
|
|
}{
|
|
Soc: v.GetMinSoc(),
|
|
}
|
|
|
|
jsonResult(w, res)
|
|
}
|
|
}
|
|
|
|
// limitSocHandler updates limit soc
|
|
func limitSocHandler(site site.API) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
|
|
v, err := site.Vehicles().ByName(vars["name"])
|
|
if err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
soc, err := strconv.Atoi(vars["value"])
|
|
if err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
v.SetLimitSoc(soc)
|
|
|
|
res := struct {
|
|
Soc int `json:"soc"`
|
|
}{
|
|
Soc: v.GetLimitSoc(),
|
|
}
|
|
|
|
jsonResult(w, res)
|
|
}
|
|
}
|
|
|
|
// planSocHandler updates plan soc and time
|
|
func planSocHandler(site site.API) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
|
|
v, err := site.Vehicles().ByName(vars["name"])
|
|
if err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
ts, err := time.ParseInLocation(time.RFC3339, vars["time"], nil)
|
|
if err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
soc, err := strconv.Atoi(vars["value"])
|
|
if err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
if err := v.SetPlanSoc(ts, soc); err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
ts, soc = v.GetPlanSoc()
|
|
|
|
res := struct {
|
|
Soc int `json:"soc"`
|
|
Time time.Time `json:"time"`
|
|
}{
|
|
Soc: soc,
|
|
Time: ts,
|
|
}
|
|
|
|
jsonResult(w, res)
|
|
}
|
|
}
|
|
|
|
// planSocRemoveHandler removes plan soc and time
|
|
func planSocRemoveHandler(site site.API) http.HandlerFunc {
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
vars := mux.Vars(r)
|
|
|
|
v, err := site.Vehicles().ByName(vars["name"])
|
|
if err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
if err := v.SetPlanSoc(time.Time{}, 0); err != nil {
|
|
jsonError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
res := struct{}{}
|
|
jsonResult(w, res)
|
|
}
|
|
}
|