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