Proxy support for AWN/Wunderground

This commit is contained in:
2025-01-12 15:30:37 -05:00
parent 849dbfb6ff
commit 7fc1fc9b56
9 changed files with 228 additions and 39 deletions

View File

@ -13,7 +13,10 @@ import (
type WUProvider struct{}
const providerName = "weatherunderground"
const (
providerName = "weatherunderground"
wuURL = "http://rtupdate.wunderground.com/weatherstation/updateweatherstation.php"
)
func (wu *WUProvider) Name() string {
return providerName
@ -32,6 +35,29 @@ func (wu *WUProvider) ReqToWeather(_ context.Context, r *http.Request) (
return MapWUUpdate(wuUpdate), nil
}
func (wu *WUProvider) ProxyReq(ctx context.Context, update *weather.WeatherUpdate) error {
// tracer := otel.GetTracer(ctx, "wuProvider", "proxyReq")
// ctx, span := tracer.Start(ctx, "proxyToWunderground")
// defer span.End()
//
// resp, err := resty.New().R().
// SetContext(ctx).
// SetQueryParamsFromValues(r.URL.Query()).
// Get(wuURL)
// if err != nil {
// span.SetStatus(codes.Error, err.Error())
// span.RecordError(err)
// }
//
// span.SetAttributes(
// attribute.Int("statusCode", resp.StatusCode()),
// attribute.String("body", string(resp.Body())),
// )
//
// return err
return nil
}
func MapWUUpdate(wuUpdate *WundergroundUpdate) *weather.WeatherUpdate {
updateTime := time.Now()
@ -42,25 +68,32 @@ func MapWUUpdate(wuUpdate *WundergroundUpdate) *weather.WeatherUpdate {
}
}
credentials := make(map[string]string)
if wuUpdate.ID != nil && wuUpdate.Password != nil {
credentials["ID"] = *wuUpdate.ID
credentials["Password"] = *wuUpdate.Password
}
return &weather.WeatherUpdate{
DateUTC: &updateTime,
StationID: wuUpdate.ID,
StationType: wuUpdate.SoftwareType,
TempOutdoorF: wuUpdate.Tempf,
HumidityOudoor: 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,
TempIndoorF: wuUpdate.IndoorTempF,
HumidityIndoor: wuUpdate.IndoorHumidity,
BaromRelativeIn: wuUpdate.BaromIn,
DateUTC: &updateTime,
StationID: wuUpdate.ID,
StationType: wuUpdate.SoftwareType,
TempOutdoorF: wuUpdate.Tempf,
HumidityOudoor: 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,
TempIndoorF: wuUpdate.IndoorTempF,
HumidityIndoor: wuUpdate.IndoorHumidity,
BaromRelativeIn: wuUpdate.BaromIn,
WeatherServiceCredentials: credentials,
}
}