package ups import ( "git.openpdu.org/OpenPDU/openpdu/config" "git.openpdu.org/OpenPDU/openpdu/events" "git.openpdu.org/OpenPDU/openpdu/syslog" nut "github.com/robbiet480/go.nut" ) var upsClient nut.Client var ups nut.UPS var Vars map[string]nut.Variable var Connected bool var defaults = map[string]interface{}{ "Ups.Host": "localhost", "Ups.Port": 3493, "Ups.Name": "ups", "Ups.Username": "", "Ups.Password": "", } func init() { for k, v := range defaults { config.SetDefault(k, v) } Connected = false events.AddListener("ups_config_changed", Reconfigure) } func UpsConnect() { var port int var host, username, password string var connectErr, authenticationError error var u nut.UPS host = config.GetString("Ups.Host") port = config.GetInt("Ups.Port") upsClient, connectErr = nut.Connect(host, port) if connectErr != nil { syslog.Err(connectErr.Error()) return } username = config.GetString("Ups.Username") password = config.GetString("Ups.Password") if username != "" && password != "" { _, authenticationError = upsClient.Authenticate(username, password) if authenticationError != nil { syslog.Err(authenticationError.Error()) return } } upsList, listErr := upsClient.GetUPSList() if listErr != nil { syslog.Err(listErr.Error()) return } for _, u = range upsList { if u.Name == config.GetString("Ups.Name") { ups = u Connected = true UpsReadVars() syslog.Notice("UPS connected") events.FireEvent("ups_connected") } } } func UpsReadVars() { Vars = map[string]nut.Variable{} for _, v := range ups.Variables { Vars[v.Name] = v } } func Reconfigure() { ups = nut.UPS{} upsClient = nut.Client{} syslog.Notice("UPS disconnected") events.FireEvent("ups_disconnected") Connected = false Vars = make(map[string]nut.Variable) go UpsConnect() }