98 lines
2.1 KiB
Go
98 lines
2.1 KiB
Go
package webui
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"git.openpdu.org/OpenPDU/openpdu/events"
|
|
"git.openpdu.org/OpenPDU/openpdu/outlet"
|
|
"github.com/spf13/viper"
|
|
"gopkg.in/macaron.v1"
|
|
)
|
|
|
|
func outletsPage(ctx *macaron.Context) {
|
|
|
|
ctx.Data["outlets"] = outlet.Outlets
|
|
|
|
ctx.HTML(200, "outlets")
|
|
}
|
|
|
|
type OutletPostForm struct {
|
|
Description string `form:"description" binding:"Required"`
|
|
MQTTStateTopic string `form:"mqttstatetopic"`
|
|
MQTTCommandTopic string `form:"mqttcommandtopic"`
|
|
OnBoot string `form:"onboot" binding:"Required"`
|
|
}
|
|
|
|
func outletEditPage(ctx *macaron.Context) {
|
|
var err error
|
|
var num uint64
|
|
var o *outlet.Outlet
|
|
num, err = strconv.ParseUint(ctx.Params(":num"), 10, 64)
|
|
if err != nil {
|
|
ctx.JSON(http.StatusOK, Dictionary{
|
|
"result": "error",
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
o = outlet.Outlets[num]
|
|
ctx.Data["outlet"] = o
|
|
|
|
ctx.Data["onboot_values"] = []string{"on", "off", "last"}
|
|
ctx.HTML(200, "outlet_edit")
|
|
}
|
|
|
|
func outletEditPost(ctx *macaron.Context, f OutletPostForm) {
|
|
var err error
|
|
var num uint64
|
|
|
|
num, err = strconv.ParseUint(ctx.Params(":num"), 10, 64)
|
|
if err != nil {
|
|
ctx.JSON(http.StatusOK, Dictionary{
|
|
"result": "error",
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
onboot := "on"
|
|
onbootForm := strings.ToLower(strings.TrimSpace(f.OnBoot))
|
|
switch onbootForm {
|
|
case
|
|
"on",
|
|
"off",
|
|
"last":
|
|
onboot = onbootForm
|
|
default:
|
|
outletsPage(ctx)
|
|
return
|
|
}
|
|
outlet.Outlets[num].Channel.SetOnBoot(onboot)
|
|
|
|
outlet.Outlets[num].Description = strings.TrimSpace(f.Description)
|
|
s2 := fmt.Sprintf("outlets.%s.description", outlet.Outlets[num].ID)
|
|
viper.Set(s2, outlet.Outlets[num].Description)
|
|
|
|
mqttstate := strings.TrimSpace(f.MQTTStateTopic)
|
|
if mqttstate == "" {
|
|
mqttstate = outlet.Outlets[num].Channel.Name()
|
|
}
|
|
outlet.Outlets[num].Channel.SetMQTTStateTopic(mqttstate)
|
|
|
|
mqttcommand := strings.TrimSpace(f.MQTTCommandTopic)
|
|
if mqttcommand == "" {
|
|
mqttcommand = outlet.Outlets[num].Channel.Name()
|
|
}
|
|
outlet.Outlets[num].Channel.SetMQTTCommandTopic(mqttcommand)
|
|
|
|
viper.WriteConfig()
|
|
|
|
events.FireEvent("outlet_config_changed")
|
|
|
|
ctx.Redirect("/outlets")
|
|
}
|