Consolidate battery metrics

This commit is contained in:
Ryan McGuire 2025-01-07 10:27:02 -05:00
parent e8654e76bc
commit 4c93303f27
5 changed files with 111 additions and 90 deletions

View File

@ -16,10 +16,10 @@ func main() {
ctx, cncl := signal.NotifyContext(context.Background(), os.Kill, unix.SIGTERM) ctx, cncl := signal.NotifyContext(context.Background(), os.Kill, unix.SIGTERM)
defer cncl() defer cncl()
// Read config and environment, set up logging, load up
// an appCtx, and prepare ambient weather local exporter
ctx = app.MustSetupConfigAndLogging(ctx) ctx = app.MustSetupConfigAndLogging(ctx)
aw := ambient.New(ctx).Init()
aw := ambient.New(ctx)
aw.MustInit()
awApp := app.App{ awApp := app.App{
AppContext: ctx, AppContext: ctx,

View File

@ -37,10 +37,12 @@ func New(appCtx context.Context) *AmbientWeather {
} }
} }
func (aw *AmbientWeather) MustInit() { // Initialize with defaults, set logger from context
func (aw *AmbientWeather) Init() *AmbientWeather {
aw.awnProvider = &awn.AWNProvider{} aw.awnProvider = &awn.AWNProvider{}
aw.wuProvider = &wunderground.WUProvider{} aw.wuProvider = &wunderground.WUProvider{}
aw.l = zerolog.Ctx(aw.appCtx) aw.l = zerolog.Ctx(aw.appCtx)
return aw
} }
func (aw *AmbientWeather) GetAWNHandlerFunc(appCtx context.Context) func(http.ResponseWriter, *http.Request) { func (aw *AmbientWeather) GetAWNHandlerFunc(appCtx context.Context) func(http.ResponseWriter, *http.Request) {

View File

@ -57,10 +57,24 @@ func MapAwnUpdate(awnUpdate *AmbientWeatherUpdate) *weather.WeatherUpdate {
MonthlyRainIn: awnUpdate.MonthlyRainIn, MonthlyRainIn: awnUpdate.MonthlyRainIn,
YearlyRainIn: awnUpdate.YearlyRainIn, YearlyRainIn: awnUpdate.YearlyRainIn,
TotalRainIn: awnUpdate.TotalRainIn, TotalRainIn: awnUpdate.TotalRainIn,
BattOutdoorSensor: awnUpdate.BattOut, Batteries: []weather.BatteryStatus{
BattIndoorSensor: awnUpdate.BattIn, {
BattRainSensor: awnUpdate.BattRain, Component: "OutdoorSensor",
BattCO2Sensor: awnUpdate.BattCO2, Status: awnUpdate.BattOut,
},
{
Component: "IndoorSensor",
Status: awnUpdate.BattIn,
},
{
Component: "RainSensor",
Status: awnUpdate.BattRain,
},
{
Component: "CO2Sensor",
Status: awnUpdate.BattCO2,
},
},
TempIndoorF: awnUpdate.TempInF, TempIndoorF: awnUpdate.TempInF,
HumidityIndoor: awnUpdate.HumidityIn, HumidityIndoor: awnUpdate.HumidityIn,
BaromRelativeIn: awnUpdate.BaromRelIn, BaromRelativeIn: awnUpdate.BaromRelIn,

View File

@ -30,9 +30,7 @@ type WeatherMetrics struct {
MonthlyRainIn metric.Float64Gauge MonthlyRainIn metric.Float64Gauge
YearlyRainIn metric.Float64Gauge YearlyRainIn metric.Float64Gauge
TotalRainIn metric.Float64Gauge TotalRainIn metric.Float64Gauge
BattOutdoorSensor metric.Int64Gauge BatteryStatus metric.Int64Gauge
BattIndoorSensor metric.Int64Gauge
BattRainSensor metric.Int64Gauge
BaromRelativeIn metric.Float64Gauge BaromRelativeIn metric.Float64Gauge
BaromAbsoluteIn metric.Float64Gauge BaromAbsoluteIn metric.Float64Gauge
DewPointF metric.Float64Gauge DewPointF metric.Float64Gauge
@ -90,12 +88,8 @@ func MustInitMetrics(appCtx context.Context) *WeatherMetrics {
metric.WithDescription("Yearly Rain in Inches")) metric.WithDescription("Yearly Rain in Inches"))
wm.TotalRainIn, _ = wm.meter.Float64Gauge("weather_total_rain_in", wm.TotalRainIn, _ = wm.meter.Float64Gauge("weather_total_rain_in",
metric.WithDescription("Total Rain in Inches")) metric.WithDescription("Total Rain in Inches"))
wm.BattOutdoorSensor, _ = wm.meter.Int64Gauge("weather_batt_outdoor_sensor", wm.BatteryStatus, _ = wm.meter.Int64Gauge("battery_status",
metric.WithDescription("Outdoor Equipment Battery")) metric.WithDescription("Per-component battery status"))
wm.BattIndoorSensor, _ = wm.meter.Int64Gauge("weather_batt_indoor_sensor",
metric.WithDescription("Indoor Equipmenet Battery"))
wm.BattRainSensor, _ = wm.meter.Int64Gauge("weather_batt_rain_sensor",
metric.WithDescription("Rain Sensor Battery"))
wm.BaromRelativeIn, _ = wm.meter.Float64Gauge("weather_barometric_pressure_relative_in", wm.BaromRelativeIn, _ = wm.meter.Float64Gauge("weather_barometric_pressure_relative_in",
metric.WithDescription("Relative Pressure in Inches of Mercury")) metric.WithDescription("Relative Pressure in Inches of Mercury"))
wm.BaromAbsoluteIn, _ = wm.meter.Float64Gauge("weather_barometric_pressure_absolute_in", wm.BaromAbsoluteIn, _ = wm.meter.Float64Gauge("weather_barometric_pressure_absolute_in",
@ -136,13 +130,18 @@ func (wm *WeatherMetrics) Update(u *WeatherUpdate) {
wm.MonthlyRainIn.Record(wm.appCtx, u.MonthlyRainIn, metric.WithAttributeSet(attributes)) wm.MonthlyRainIn.Record(wm.appCtx, u.MonthlyRainIn, metric.WithAttributeSet(attributes))
wm.YearlyRainIn.Record(wm.appCtx, u.YearlyRainIn, metric.WithAttributeSet(attributes)) wm.YearlyRainIn.Record(wm.appCtx, u.YearlyRainIn, metric.WithAttributeSet(attributes))
wm.TotalRainIn.Record(wm.appCtx, u.TotalRainIn, metric.WithAttributeSet(attributes)) wm.TotalRainIn.Record(wm.appCtx, u.TotalRainIn, metric.WithAttributeSet(attributes))
wm.BattOutdoorSensor.Record(wm.appCtx, int64(u.BattOutdoorSensor), metric.WithAttributeSet(attributes))
wm.BattIndoorSensor.Record(wm.appCtx, int64(u.BattIndoorSensor), metric.WithAttributeSet(attributes))
wm.BattRainSensor.Record(wm.appCtx, int64(u.BattRainSensor), metric.WithAttributeSet(attributes))
wm.BaromRelativeIn.Record(wm.appCtx, u.BaromRelativeIn, metric.WithAttributeSet(attributes)) wm.BaromRelativeIn.Record(wm.appCtx, u.BaromRelativeIn, metric.WithAttributeSet(attributes))
wm.BaromAbsoluteIn.Record(wm.appCtx, u.BaromAbsoluteIn, metric.WithAttributeSet(attributes)) wm.BaromAbsoluteIn.Record(wm.appCtx, u.BaromAbsoluteIn, metric.WithAttributeSet(attributes))
wm.DewPointF.Record(wm.appCtx, u.DewPointF, metric.WithAttributeSet(attributes)) wm.DewPointF.Record(wm.appCtx, u.DewPointF, metric.WithAttributeSet(attributes))
wm.WindChillF.Record(wm.appCtx, u.WindChillF, metric.WithAttributeSet(attributes)) wm.WindChillF.Record(wm.appCtx, u.WindChillF, metric.WithAttributeSet(attributes))
// Batteries
for _, battery := range u.Batteries {
wm.BatteryStatus.Record(wm.appCtx, int64(battery.Status),
metric.WithAttributeSet(attributes),
metric.WithAttributes(attribute.String("component", battery.Component)),
)
}
wm.UpdatesReceived.Add(wm.appCtx, 1) wm.UpdatesReceived.Add(wm.appCtx, 1)
} }

View File

@ -27,10 +27,11 @@ type WeatherUpdate struct {
MonthlyRainIn float64 MonthlyRainIn float64
YearlyRainIn float64 YearlyRainIn float64
TotalRainIn float64 TotalRainIn float64
BattOutdoorSensor int Batteries []BatteryStatus
BattIndoorSensor int // BattOutdoorSensor int
BattRainSensor int // BattIndoorSensor int
BattCO2Sensor int // BattRainSensor int
// BattCO2Sensor int
BaromRelativeIn float64 BaromRelativeIn float64
BaromAbsoluteIn float64 BaromAbsoluteIn float64
// These fields may be calculated // These fields may be calculated
@ -38,3 +39,8 @@ type WeatherUpdate struct {
DewPointF float64 DewPointF float64
WindChillF float64 WindChillF float64
} }
type BatteryStatus struct {
Component string
Status int
}