Refactor and complete providers
This commit is contained in:
70
pkg/provider/wunderground/provider.go
Normal file
70
pkg/provider/wunderground/provider.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package wunderground
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
"github.com/gorilla/schema"
|
||||
|
||||
"gitea.libretechconsulting.com/rmcguire/ambient-weather-local-exporter/pkg/weather"
|
||||
)
|
||||
|
||||
type WUProvider struct{}
|
||||
|
||||
const providerName = "weatherunderground"
|
||||
|
||||
func (wu *WUProvider) Name() string {
|
||||
return providerName
|
||||
}
|
||||
|
||||
// Takes an inbound request from the ambient device and maps
|
||||
// to a stable struct for weather updates
|
||||
func (wu *WUProvider) ReqToWeather(_ context.Context, r *http.Request) (
|
||||
*weather.WeatherUpdate, error,
|
||||
) {
|
||||
wuUpdate, err := UnmarshalQueryParams(r.URL.Query())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return MapWUUpdate(wuUpdate), nil
|
||||
}
|
||||
|
||||
func MapWUUpdate(wuUpdate *WundergroundUpdate) *weather.WeatherUpdate {
|
||||
updateTime, err := time.Parse(time.DateTime, wuUpdate.DateUTC)
|
||||
if err != nil {
|
||||
updateTime = time.Now()
|
||||
}
|
||||
|
||||
return &weather.WeatherUpdate{
|
||||
StationType: wuUpdate.SoftwareType,
|
||||
DateUTC: &updateTime,
|
||||
TempF: wuUpdate.Tempf,
|
||||
Humidity: wuUpdate.Humidity,
|
||||
WindSpeedMPH: wuUpdate.WindGustMPH,
|
||||
WindGustMPH: wuUpdate.WindGustMPH,
|
||||
WindDir: wuUpdate.WindDir,
|
||||
UV: wuUpdate.UV,
|
||||
SolarRadiation: wuUpdate.SolarRadiation,
|
||||
HourlyRainIn: wuUpdate.RainIn,
|
||||
DailyRainIn: wuUpdate.DailyRainIn,
|
||||
WeeklyRainIn: wuUpdate.WeeklyRainIn,
|
||||
MonthlyRainIn: wuUpdate.MonthlyRainIn,
|
||||
YearlyRainIn: wuUpdate.YearlyRainIn,
|
||||
TempInsideF: wuUpdate.IndoorTempF,
|
||||
HumidityInside: wuUpdate.IndoorHumidity,
|
||||
BaromRelativeIn: wuUpdate.BaromIn,
|
||||
}
|
||||
}
|
||||
|
||||
func UnmarshalQueryParams(query url.Values) (*WundergroundUpdate, error) {
|
||||
update := new(WundergroundUpdate)
|
||||
|
||||
if err := schema.NewDecoder().Decode(update, query); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return update, nil
|
||||
}
|
29
pkg/provider/wunderground/types.go
Normal file
29
pkg/provider/wunderground/types.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package wunderground
|
||||
|
||||
type WundergroundUpdate struct {
|
||||
ID string `json:"ID,omitempty" schema:"ID"`
|
||||
Password string `json:"PASSWORD,omitempty" schema:"PASSWORD"`
|
||||
UV int `json:"UV,omitempty" schema:"UV"`
|
||||
Action string `json:"action,omitempty" schema:"action"`
|
||||
BaromIn float32 `json:"baromin,omitempty" schema:"baromin"`
|
||||
DailyRainIn float32 `json:"dailyrainin,omitempty" schema:"dailyrainin"`
|
||||
DateUTC string `json:"dateutc,omitempty" schema:"dateutc"`
|
||||
DewPtF float32 `json:"dewptf,omitempty" schema:"dewptf"`
|
||||
Humidity int `json:"humidity,omitempty" schema:"humidity"`
|
||||
IndoorHumidity int `json:"indoorhumidity,omitempty" schema:"indoorhumidity"`
|
||||
IndoorTempF float32 `json:"indoortempf,omitempty" schema:"indoortempf"`
|
||||
LowBatt bool `json:"lowbatt,omitempty" schema:"lowbatt"`
|
||||
MonthlyRainIn float32 `json:"monthlyrainin,omitempty" schema:"monthlyrainin"`
|
||||
RainIn float32 `json:"rainin,omitempty" schema:"rainin"`
|
||||
Realtime bool `json:"realtime,omitempty" schema:"realtime"`
|
||||
Rtfreq int `json:"rtfreq,omitempty" schema:"rtfreq"`
|
||||
SoftwareType string `json:"softwaretype,omitempty" schema:"softwaretype"`
|
||||
SolarRadiation float32 `json:"solarradiation,omitempty" schema:"solarradiation"`
|
||||
Tempf float32 `json:"tempf,omitempty" schema:"tempf"`
|
||||
WeeklyRainIn float32 `json:"weeklyrainin,omitempty" schema:"weeklyrainin"`
|
||||
WindChillF float32 `json:"windchillf,omitempty" schema:"windchillf"`
|
||||
WindDir int `json:"winddir,omitempty" schema:"winddir"`
|
||||
WindGustMPH float32 `json:"windgustmph,omitempty" schema:"windgustmph"`
|
||||
WindSpeedMPH float32 `json:"windspeedmph,omitempty" schema:"windspeedmph"`
|
||||
YearlyRainIn float32 `json:"yearlyrainin,omitempty" schema:"yearlyrainin"`
|
||||
}
|
Reference in New Issue
Block a user