var apcConn *apcupsd.Client
var err error
var sdNotifyOnce sync.Once
+ var apcUpsdAddr = "127.0.0.1:3551"
+ var nominalPower = 0
+
+ flag.StringVar(&apcUpsdAddr, "apcupsd-addr", apcUpsdAddr, "address at which apcupsd can be contacted")
+ flag.IntVar(&nominalPower, "apcupsd-nominal-power", nominalPower, "max power output in W for the UPS - only used if apcupsd does not specify NOMPOWER")
ctx, _ := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
flag.Parse()
select {
case <-ticker.C:
if apcConn == nil {
- apcConn, err = apcupsd.Dial("tcp", "127.0.0.1:3551")
+ apcConn, err = apcupsd.Dial("tcp", apcUpsdAddr)
if err != nil {
log.Default().Errorf("error getting status from apcupsd: %v", err)
continue
sdNotifyOnce.Do(func() {
daemon.SdNotify(false, daemon.SdNotifyReady)
})
+ nomPower := status.NominalPower
+ if nomPower == 0 {
+ nomPower = nominalPower
+ }
metrics.lineVoltage.Set(status.LineVoltage)
metrics.loadPercentage.Set(status.LoadPercent)
metrics.secondsLeft.Set(status.TimeLeft.Seconds())
metrics.chargePct.Set(status.BatteryChargePercent)
- metrics.powerConsumption.Set(float64(status.NominalPower) * (status.LoadPercent / 100))
+ metrics.powerConsumption.Set(float64(nomPower) * (status.LoadPercent / 100))
if _, ok := metrics.stateMap[status.Status]; !ok {
metrics.stateMap[status.Status] = metrics.state.WithLabelValues(mbclient.KV{"state": status.Status})
}