99 lines
2.1 KiB
Go
99 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/go-macaron/binding"
|
|
"github.com/go-macaron/pongo2"
|
|
"github.com/spf13/viper"
|
|
"gopkg.in/macaron.v1"
|
|
)
|
|
|
|
func statusPage(ctx *macaron.Context) {
|
|
ctx.HTML(200, "status") // 200 is the response code.
|
|
}
|
|
|
|
func jsonStatus(ctx *macaron.Context) {
|
|
// MQTTpublish("openpdu/status", "asdss")
|
|
|
|
var data = [][]string{}
|
|
var o *Outlet
|
|
for i := range outlets {
|
|
o = outlets[i]
|
|
d := []string{fmt.Sprintf("%d", o.Num), o.Channel.Name, fmt.Sprintf("%v", o.Channel.Value)}
|
|
data = append(data, d)
|
|
}
|
|
|
|
ctx.JSON(http.StatusOK, Dictionary{
|
|
"data": data,
|
|
})
|
|
}
|
|
|
|
func jsonOutletToggle(ctx *macaron.Context) {
|
|
var err error
|
|
var num uint64
|
|
var outlet *Outlet
|
|
|
|
num, err = strconv.ParseUint(ctx.Params(":id"), 10, 64)
|
|
if err != nil {
|
|
ctx.JSON(http.StatusOK, Dictionary{
|
|
"data": "error1",
|
|
})
|
|
}
|
|
|
|
if num >= uint64(len(outlets)) || num < 0 {
|
|
ctx.JSON(http.StatusOK, Dictionary{
|
|
"data": "error2",
|
|
})
|
|
}
|
|
|
|
outlet = outlets[num]
|
|
_, err = outlet.Channel.Toggle()
|
|
if err != nil {
|
|
ctx.JSON(http.StatusOK, Dictionary{
|
|
"data": "error3",
|
|
})
|
|
}
|
|
// MQTTpublish("openpdu/toggolo1", fmt.Sprint(id))
|
|
|
|
ctx.JSON(http.StatusOK, Dictionary{
|
|
"data": "ok",
|
|
})
|
|
}
|
|
|
|
func init() {
|
|
viper.SetDefault("system.listeningport", 4000)
|
|
}
|
|
|
|
func startServer() {
|
|
m := macaron.Classic()
|
|
m.Use(pongo2.Pongoer())
|
|
m.Use(macaron.Static("static"))
|
|
// m.Get("/", myHandler)
|
|
|
|
m.Get("/", statusPage)
|
|
m.Get("/outlets", outletsPage)
|
|
m.Get("/outlet/:num", outletEditPage)
|
|
m.Post("/outlet/:num", binding.Bind(OutletPostForm{}), outletEditPost)
|
|
m.Get("/lan", lanPage)
|
|
m.Get("/mqtt", mqttPage)
|
|
m.Post("/mqtt", binding.Bind(MQTTPostForm{}), mqttPost)
|
|
m.Get("/ups", upsPage)
|
|
m.Post("/ups", binding.Bind(UPSPostForm{}), upsPost)
|
|
m.Get("/syslog", syslogPage)
|
|
m.Get("/backup", backupPage)
|
|
m.Get("/json/status", jsonStatus)
|
|
m.Post("/json/outlet/:id/toggle", jsonOutletToggle)
|
|
|
|
m.Get("/boards", func(ctx *macaron.Context) {
|
|
ctx.HTML(200, "boards") // 200 is the response code.
|
|
})
|
|
|
|
logInfo("hostname: " + viper.GetString("system.hostname"))
|
|
|
|
logInfo("Web interface ready")
|
|
http.ListenAndServe("0.0.0.0:"+viper.GetString("system.listeningport"), m)
|
|
}
|