openpdu/src/webui/mqtt_ui.go

88 lines
2.7 KiB
Go

package webui
import (
"strings"
"git.openpdu.org/OpenPDU/openpdu/config"
"git.openpdu.org/OpenPDU/openpdu/mqtt"
"gopkg.in/macaron.v1"
)
type MQTTReconfigFunction func()
var mqttReconfigFunction MQTTReconfigFunction
func SetMQTTReconfigFunction(f MQTTReconfigFunction) {
mqttReconfigFunction = f
}
func mqttPage(ctx *macaron.Context) {
ctx.Data["schema"] = config.GetString("Mqtt.Schema")
ctx.Data["host"] = config.GetString("Mqtt.Host")
ctx.Data["port"] = config.GetString("Mqtt.Port")
ctx.Data["clientid"] = config.GetString("Mqtt.CliendID")
ctx.Data["prefix"] = config.GetString("Mqtt.Prefix")
ctx.Data["username"] = config.GetString("Mqtt.Username")
ctx.Data["password"] = config.GetString("Mqtt.Password")
ctx.Data["lwttopic"] = config.GetString("Mqtt.LWTTopic")
ctx.Data["lwtonline"] = config.GetString("Mqtt.LWTMessageOnline")
ctx.Data["lwtoffline"] = config.GetString("Mqtt.LWTMessageOffline")
ctx.Data["homeassistant"] = config.GetString("Mqtt.homeassistant")
if mqtt.Connected() {
ctx.Data["mqttstatus"] = "Connected"
} else {
ctx.Data["mqttstatus"] = "Disconnected"
}
ctx.Data["schemas"] = []string{"tcp", "ssl", "ws"}
ctx.HTML(200, "mqtt")
}
type MQTTPostForm struct {
Schema string `form:"schema" binding:"Required"`
Host string `form:"host" binding:"Required"`
Port string `form:"port" binding:"Required"`
Prefix string `form:"prefix" binding:"Required"`
ClientID string `form:"clientid" binding:"Required"`
Username string `form:"username"`
Password string `form:"password"`
LWTTopic string `form:"lwttopic"`
LWTMessageOnline string `form:"lwtonline"`
LWTMessageOffline string `form:"lwtoffline"`
HomeAssistant bool `form:"homeassistant"`
}
func mqttPost(ctx *macaron.Context, f MQTTPostForm) {
schema := strings.ToLower(strings.TrimSpace(f.Schema))
switch schema {
case
"tcp",
"ssl",
"ws":
config.Set("Mqtt.Schema", schema)
default:
mqttPage(ctx)
return
}
config.Set("Mqtt.Host", strings.ToLower(strings.TrimSpace(f.Host)))
config.Set("Mqtt.Port", strings.ToLower(strings.TrimSpace(f.Port)))
config.Set("Mqtt.CliendID", strings.TrimSpace(f.ClientID))
config.Set("Mqtt.Prefix", strings.TrimSpace(f.Prefix))
config.Set("Mqtt.Username", strings.TrimSpace(f.Username))
config.Set("Mqtt.Password", f.Password)
config.Set("Mqtt.LWTTopic", strings.TrimSpace(f.LWTTopic))
config.Set("Mqtt.LWTMessageOnline", strings.TrimSpace(f.LWTMessageOnline))
config.Set("Mqtt.LWTMessageOffline", strings.TrimSpace(f.LWTMessageOffline))
config.Set("Mqtt.HomeAssistant", f.HomeAssistant)
config.WriteConfig()
if mqttReconfigFunction != nil {
go mqttReconfigFunction()
}
mqttPage(ctx)
}