aboutsummaryrefslogtreecommitdiffstats
path: root/internal/weather/config.go
diff options
context:
space:
mode:
authorPetri Hienonen <petri.hienonen@gmail.com>2026-01-04 11:52:47 +0200
committerPetri Hienonen <petri.hienonen@gmail.com>2026-01-04 11:52:47 +0200
commit59491201976316a30ffc475dd99b0af02b5e997d (patch)
treeecf395594d5d289d855eba16f786e0fb66c1d814 /internal/weather/config.go
parent4e0ca0509c6b314eea8a7b2df6d093f5d9b7e70f (diff)
downloadpub-59491201976316a30ffc475dd99b0af02b5e997d.tar.zst
Both publisher and subscriber
Diffstat (limited to 'internal/weather/config.go')
-rw-r--r--internal/weather/config.go102
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
+}