weatherfeeder: split the former maximumdirect.net/weatherd project in two.

feedkit now contains a reusable core, while weatherfeeder is a concrete implementation that includes weather-specific functions.
This commit is contained in:
2026-01-13 18:14:21 -06:00
parent 1e05b38347
commit aa4774e0dd
21 changed files with 2432 additions and 1 deletions

View File

@@ -0,0 +1,72 @@
package model
import "time"
type WeatherObservation struct {
// Identity / metadata
StationID string
StationName string
Timestamp time.Time
// Canonical internal representation (provider-independent).
//
// ConditionCode should be populated by all sources. ConditionText should be the
// canonical human-readable string derived from the WMO code (not the provider's
// original wording).
//
// IsDay is optional; some providers supply a day/night flag (e.g., Open-Meteo),
// while others may not (e.g., NWS observations). When unknown, it can be nil.
ConditionCode WMOCode
ConditionText string
IsDay *bool
// Provider-specific “evidence” for troubleshooting mapping and drift.
//
// This is intentionally limited: it is not intended to be used downstream for
// business logic. Downstream logic should rely on ConditionCode / ConditionText.
ProviderRawDescription string
// Human-facing (legacy / transitional)
//
// TextDescription currently carries provider text in existing drivers.
// As we transition to WMO-based normalization, downstream presentation should
// switch to using ConditionText. After migration, this may be removed or repurposed.
TextDescription string
// Provider-specific (legacy / transitional)
//
// IconURL is not part of the canonical internal vocabulary. It's retained only
// because current sources populate it; it is not required for downstream systems.
IconURL string
// Core measurements (nullable)
TemperatureC *float64
DewpointC *float64
WindDirectionDegrees *float64
WindSpeedKmh *float64
WindGustKmh *float64
BarometricPressurePa *float64
SeaLevelPressurePa *float64
VisibilityMeters *float64
RelativeHumidityPercent *float64
WindChillC *float64
HeatIndexC *float64
ElevationMeters *float64
RawMessage string
PresentWeather []PresentWeather
CloudLayers []CloudLayer
}
type CloudLayer struct {
BaseMeters *float64
Amount string
}
type PresentWeather struct {
Raw map[string]any
}