diff options
| author | Petri Hienonen <petri.hienonen@gmail.com> | 2026-01-04 11:52:47 +0200 |
|---|---|---|
| committer | Petri Hienonen <petri.hienonen@gmail.com> | 2026-01-04 11:52:47 +0200 |
| commit | 59491201976316a30ffc475dd99b0af02b5e997d (patch) | |
| tree | ecf395594d5d289d855eba16f786e0fb66c1d814 /internal/weather/config.go | |
| parent | 4e0ca0509c6b314eea8a7b2df6d093f5d9b7e70f (diff) | |
| download | pub-59491201976316a30ffc475dd99b0af02b5e997d.tar.zst | |
Both publisher and subscriber
Diffstat (limited to 'internal/weather/config.go')
| -rw-r--r-- | internal/weather/config.go | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/internal/weather/config.go b/internal/weather/config.go new file mode 100644 index 0000000..6450da4 --- /dev/null +++ b/internal/weather/config.go @@ -0,0 +1,102 @@ +package weather + +import ( + "time" +) + +// PublisherConfig configuration for the publisher +type PublisherConfig struct { + // FMI API + FMIEndpoint string `env:"FMI_ENDPOINT"` + + // Observation + StationID int `env:"STATION_ID"` + ObsPollEvery time.Duration `env:"OBS_POLL_EVERY"` + ObsSafetyLag time.Duration `env:"OBS_SAFETY_LAG"` + ObsTimestep int `env:"OBS_TIMESTEP"` + WatermarkFile string `env:"WATERMARK_FILE"` + + // Forecast + FcPollEvery time.Duration `env:"FC_POLL_EVERY"` + HelLat float64 `env:"HEL_LAT"` + HelLon float64 `env:"HEL_LON"` + + // MQTT + MQTTBroker string `env:"MQTT_BROKER"` + MQTTClientID string `env:"MQTT_CLIENT_ID"` + MQTTUsername string `env:"MQTT_USERNAME"` + MQTTPassword string `env:"MQTT_PASSWORD"` + MQTTKeepAlive time.Duration `env:"MQTT_KEEP_ALIVE"` + MQTTSessionExp time.Duration `env:"MQTT_SESSION_EXP"` + + // Application + LogLevel string `env:"LOG_LEVEL"` + HTTPTimeout time.Duration `env:"HTTP_TIMEOUT"` +} + +// SubscriberConfig configuration for the subscriber +type SubscriberConfig struct { + // MQTT Configuration + MQTTBroker string `env:"MQTT_BROKER"` + MQTTClientID string `env:"MQTT_CLIENT_ID"` + MQTTUsername string `env:"MQTT_USERNAME"` + MQTTPassword string `env:"MQTT_PASSWORD"` + MQTTKeepAlive time.Duration `env:"MQTT_KEEP_ALIVE"` + MQTTSessionExp time.Duration `env:"MQTT_SESSION_EXP"` + + // Subscription Configuration + Topics []string `env:"SUBSCRIBE_TOPICS"` + QoS int `env:"SUBSCRIBE_QOS"` + + // Application + LogLevel string `env:"LOG_LEVEL"` + EnableDebug bool `env:"ENABLE_DEBUG"` +} + +// LoadPublisherConfig loads publisher configuration from environment +func LoadPublisherConfig() *PublisherConfig { + cfg := &PublisherConfig{ + FMIEndpoint: GetEnv("FMI_ENDPOINT", "https://opendata.fmi.fi/wfs"), + StationID: ParseInt(GetEnv("STATION_ID", "100968")), + ObsPollEvery: ParseDuration(GetEnv("OBS_POLL_EVERY", "5m")), + ObsSafetyLag: ParseDuration(GetEnv("OBS_SAFETY_LAG", "2m")), + ObsTimestep: ParseInt(GetEnv("OBS_TIMESTEP", "60")), + WatermarkFile: GetEnv("WATERMARK_FILE", "obs_watermark.txt"), + FcPollEvery: ParseDuration(GetEnv("FC_POLL_EVERY", "1h")), + HelLat: ParseFloat(GetEnv("HEL_LAT", "60.1699")), + HelLon: ParseFloat(GetEnv("HEL_LON", "24.9384")), + MQTTBroker: GetEnv("MQTT_BROKER", "tcp://localhost:1883"), + MQTTClientID: GetEnv("MQTT_CLIENT_ID", "fmi-publisher"), + MQTTUsername: GetEnv("MQTT_USERNAME", ""), + MQTTPassword: GetEnv("MQTT_PASSWORD", ""), + MQTTKeepAlive: ParseDuration(GetEnv("MQTT_KEEP_ALIVE", "60s")), + MQTTSessionExp: ParseDuration(GetEnv("MQTT_SESSION_EXP", "1h")), + LogLevel: GetEnv("LOG_LEVEL", "info"), + HTTPTimeout: ParseDuration(GetEnv("HTTP_TIMEOUT", "30s")), + } + + return cfg +} + +// LoadSubscriberConfig loads subscriber configuration from environment +func LoadSubscriberConfig() *SubscriberConfig { + qos := ParseInt(GetEnv("SUBSCRIBE_QOS", "1")) + if qos < 0 || qos > 2 { + qos = 1 + } + + cfg := &SubscriberConfig{ + MQTTBroker: GetEnv("MQTT_BROKER", "tcp://localhost:1883"), + MQTTClientID: GetEnv("MQTT_CLIENT_ID", "fmi-subscriber"), + MQTTUsername: GetEnv("MQTT_USERNAME", ""), + MQTTPassword: GetEnv("MQTT_PASSWORD", ""), + MQTTKeepAlive: ParseDuration(GetEnv("MQTT_KEEP_ALIVE", "60s")), + MQTTSessionExp: ParseDuration(GetEnv("MQTT_SESSION_EXP", "1h")), + Topics: ParseTopics(GetEnv("SUBSCRIBE_TOPICS", "")), + QoS: qos, + LogLevel: GetEnv("LOG_LEVEL", "info"), + EnableDebug: GetEnv("ENABLE_DEBUG", "false") == "true", + } + + return cfg +} |
