From 35374ab6e0c389040ed1c4ebf7347f53f20feaec Mon Sep 17 00:00:00 2001 From: Ryan McGuire Date: Wed, 2 Apr 2025 20:01:21 -0400 Subject: [PATCH] add lightning sensor --- pkg/weather/metrics.go | 6 ++++ pkg/weather/metrics_init.go | 6 ++++ pkg/weather/types.go | 56 +++++++++++++++++++------------------ 3 files changed, 41 insertions(+), 27 deletions(-) diff --git a/pkg/weather/metrics.go b/pkg/weather/metrics.go index 7093e76..ecd00e9 100644 --- a/pkg/weather/metrics.go +++ b/pkg/weather/metrics.go @@ -37,6 +37,10 @@ type WeatherMetrics struct { DewPointF metric.Float64Gauge WindChillF metric.Float64Gauge + // Lightning Sensor + LightningCountDay metric.Int64Gauge + LightningLastDistance metric.Int64Gauge + // Temp and Humidity Sensors SensorTempF metric.Float64Gauge SensorHumidity metric.Int64Gauge @@ -74,6 +78,8 @@ func (wm *WeatherMetrics) Update(u *WeatherUpdate) { wm.recorder.Record(&RecordOpts{Float64Gauge: wm.BaromAbsoluteIn, FloatVal: u.BaromAbsoluteIn, Field: FieldBaromAbsoluteIn, Attributes: attributes, Station: u.StationConfig}) wm.recorder.Record(&RecordOpts{Float64Gauge: wm.DewPointF, FloatVal: u.DewPointF, Field: FieldDewPointF, Attributes: attributes, Station: u.StationConfig}) wm.recorder.Record(&RecordOpts{Float64Gauge: wm.WindChillF, FloatVal: u.WindChillF, Field: FieldWindChillF, Attributes: attributes, Station: u.StationConfig}) + wm.recorder.Record(&RecordOpts{Int64Gauge: wm.LightningCountDay, IntVal: u.LightningDay, Field: FieldLightningDay, Attributes: attributes, Station: u.StationConfig}) + wm.recorder.Record(&RecordOpts{Int64Gauge: wm.LightningLastDistance, IntVal: u.LightningDistance, Field: FieldLightningDistance, Attributes: attributes, Station: u.StationConfig}) wm.RecordBatteries(u, attributes) wm.RecordTempHumiditySensors(u, attributes) diff --git a/pkg/weather/metrics_init.go b/pkg/weather/metrics_init.go index 54203aa..fd84b3c 100644 --- a/pkg/weather/metrics_init.go +++ b/pkg/weather/metrics_init.go @@ -66,6 +66,12 @@ func MustInitMetrics(appCtx context.Context) *WeatherMetrics { wm.WindChillF, _ = wm.meter.Float64Gauge(MetricPrefix+"_wind_chill_f", metric.WithDescription("Wind Chill in Faherenheit")) + // Lightning Sensor + wm.LightningCountDay, _ = wm.meter.Int64Gauge(MetricPrefix+"_lightning_day", + metric.WithDescription("Count of lightning strikes for current day")) + wm.LightningLastDistance, _ = wm.meter.Int64Gauge(MetricPrefix+"_lightning_last_distance", + metric.WithDescription("Last measured lightning distance")) + // Temp and Humidity Sensors wm.SensorTempF, _ = wm.meter.Float64Gauge(MetricPrefix+"_sensor_temp_f", metric.WithDescription("Temperature Sensor in Faherenheit")) diff --git a/pkg/weather/types.go b/pkg/weather/types.go index bb7c0a7..2d19bea 100644 --- a/pkg/weather/types.go +++ b/pkg/weather/types.go @@ -65,33 +65,35 @@ type BatteryStatus struct { // keep and drop lists // TODO: Use refelct/ast to generate code const ( - FieldDateUTC = "DateUTC" - FieldStationType = "StationType" - FieldTempOutdoorF = "TempOutdoorF" - FieldTempIndoorF = "TempIndoorF" - FieldHumidityOudoor = "HumidityOudoor" - FieldHumidityIndoor = "HumidityIndoor" - FieldWindSpeedMPH = "WindSpeedMPH" - FieldWindGustMPH = "WindGustMPH" - FieldMaxDailyGust = "MaxDailyGust" - FieldWindDir = "WindDir" - FieldWindDirAvg10m = "WindDirAvg10m" - FieldUV = "UV" - FieldSolarRadiation = "SolarRadiation" - FieldHourlyRainIn = "HourlyRainIn" - FieldEventRainIn = "EventRainIn" - FieldDailyRainIn = "DailyRainIn" - FieldWeeklyRainIn = "WeeklyRainIn" - FieldMonthlyRainIn = "MonthlyRainIn" - FieldYearlyRainIn = "YearlyRainIn" - FieldTotalRainIn = "TotalRainIn" - FieldBatteries = "Batteries" - FieldBaromRelativeIn = "BaromRelativeIn" - FieldBaromAbsoluteIn = "BaromAbsoluteIn" - FieldDewPointF = "DewPointF" - FieldWindChillF = "WindChillF" - FieldSensorTempF = "SensorTempF" - FieldSensorHumidity = "SensorHumidity" + FieldDateUTC = "DateUTC" + FieldStationType = "StationType" + FieldTempOutdoorF = "TempOutdoorF" + FieldTempIndoorF = "TempIndoorF" + FieldHumidityOudoor = "HumidityOudoor" + FieldHumidityIndoor = "HumidityIndoor" + FieldWindSpeedMPH = "WindSpeedMPH" + FieldWindGustMPH = "WindGustMPH" + FieldMaxDailyGust = "MaxDailyGust" + FieldWindDir = "WindDir" + FieldWindDirAvg10m = "WindDirAvg10m" + FieldUV = "UV" + FieldSolarRadiation = "SolarRadiation" + FieldHourlyRainIn = "HourlyRainIn" + FieldEventRainIn = "EventRainIn" + FieldDailyRainIn = "DailyRainIn" + FieldWeeklyRainIn = "WeeklyRainIn" + FieldMonthlyRainIn = "MonthlyRainIn" + FieldYearlyRainIn = "YearlyRainIn" + FieldTotalRainIn = "TotalRainIn" + FieldBatteries = "Batteries" + FieldBaromRelativeIn = "BaromRelativeIn" + FieldBaromAbsoluteIn = "BaromAbsoluteIn" + FieldDewPointF = "DewPointF" + FieldWindChillF = "WindChillF" + FieldSensorTempF = "SensorTempF" + FieldSensorHumidity = "SensorHumidity" + FieldLightningDay = "LightningDay" + FieldLightningDistance = "LightningDistance" ) func (u *WeatherUpdate) GetStationName() string {