From 9419a70c707b8033d3465ffc9693f76cca86b9dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Rasmussen?= Date: Sat, 15 Jun 2024 16:20:32 +0200 Subject: [PATCH] Add gokrazy configuration --- cmd/fermentord/loop.go | 2 +- internal/configuration/config.go | 32 +++++++++------ .../{global.go => fermentord.go} | 26 ------------ internal/configuration/fermentord.toml | 40 +++++++++++++++++++ internal/configuration/init_default.go | 11 +++++ internal/configuration/init_gokrazy.go | 9 +++++ 6 files changed, 81 insertions(+), 39 deletions(-) rename internal/configuration/{global.go => fermentord.go} (62%) create mode 100644 internal/configuration/fermentord.toml create mode 100644 internal/configuration/init_default.go create mode 100644 internal/configuration/init_gokrazy.go diff --git a/cmd/fermentord/loop.go b/cmd/fermentord/loop.go index b3fddf2..e289475 100644 --- a/cmd/fermentord/loop.go +++ b/cmd/fermentord/loop.go @@ -44,7 +44,7 @@ func mainLoop(ctx context.Context, wg *sync.WaitGroup, js nats.JetStream) { chn.Subscribe(chConfigChange) chn.Subscribe(temperature.ConfigUpdate) chn.Subscribe(ctrl.ConfigUpdates) - //chn.Subscribe(display.ConfiguUpdate) + //chn.Subscribe(display.ConfigUpdate) chn.Notify(configuration.Global()) viper.OnConfigChange(chn.OnConfigChange) viper.WatchConfig() diff --git a/internal/configuration/config.go b/internal/configuration/config.go index 0adbeb1..ae95db9 100644 --- a/internal/configuration/config.go +++ b/internal/configuration/config.go @@ -1,6 +1,10 @@ +//go:build !gokrazy + package configuration import ( + "bytes" + _ "embed" "log" "sync" @@ -11,25 +15,24 @@ import ( var ( globalConfig Configuration globalLock *sync.Mutex + + //go:embed fermentord.toml + globalData []byte ) func init() { globalLock = &sync.Mutex{} } -func Global() (c Configuration) { +func Global() Configuration { globalLock.Lock() - c = globalConfig - globalLock.Unlock() - return + defer globalLock.Unlock() + + return globalConfig } func Initialize() { setDefaults() - - viper.AddConfigPath("/etc") - viper.AddConfigPath("/usr/local/etc") - viper.AddConfigPath(".") viper.SetConfigName("fermentord") viper.SetConfigType("toml") } @@ -38,17 +41,22 @@ func LoadConfiguration() Configuration { globalLock.Lock() defer globalLock.Unlock() - if err := viper.ReadInConfig(); err != nil { + buf := bytes.NewBuffer(globalData) + if err := viper.ReadConfig(buf); err != nil { + panic(err) + } + + if err := viper.MergeInConfig(); err != nil { log.Printf("Error loading configuration: %v", err) } - config := &Configuration{} - if err := viper.Unmarshal(config); err != nil { + config := Configuration{} + if err := viper.Unmarshal(&config); err != nil { sentry.CaptureException(err) log.Fatal(err) } - globalConfig = *config + globalConfig = config return globalConfig } diff --git a/internal/configuration/global.go b/internal/configuration/fermentord.go similarity index 62% rename from internal/configuration/global.go rename to internal/configuration/fermentord.go index db52d68..f203d44 100644 --- a/internal/configuration/global.go +++ b/internal/configuration/fermentord.go @@ -1,9 +1,5 @@ package configuration -import ( - "github.com/spf13/viper" -) - type Configuration struct { Brew struct { UUID string `mapstructure:"uuid"` @@ -54,25 +50,3 @@ type Configuration struct { Kd float64 `mapstructure:"kd"` // 2.0 } `mapstructure:"pid"` } - -func setDefaults() { - viper.SetDefault("cooler_enabled", true) - viper.SetDefault("heater_enabled", true) - viper.SetDefault("http.port", 8000) - viper.SetDefault("nats.stream", "DWJONDAHL") - viper.SetDefault("nats.subject.event", "DWJONDAHL.ingest.fermentor.ingest_event") - viper.SetDefault("nats.subject.state", "DWJONDAHL.ingest.fermentor.ingest_state") - viper.SetDefault("nats.subject.temp", "DWJONDAHL.ingest.fermentor.ingest_temperature_reading") - viper.SetDefault("nats.subject.tilt", "DWJONDAHL.ingest.fermentor.ingest_tilt_reading") - viper.SetDefault("nats.url", "nats.service.consul") - viper.SetDefault("pid.kd", 2.0) - viper.SetDefault("pid.ki", 0.0001) - viper.SetDefault("pid.kp", 2.0) - viper.SetDefault("limits.heater_grace_time_secs", 1800) - viper.SetDefault("limits.max_chamber_temp", 40) - viper.SetDefault("limits.max_cooler_runtime_secs", 86400) - viper.SetDefault("limits.min_chamber_temp", 5) - viper.SetDefault("limits.min_cooler_cooldown_secs", 300) - viper.SetDefault("limits.min_cooler_runtime_secs", 300) - viper.SetDefault("sensors.weight", 0.8) -} diff --git a/internal/configuration/fermentord.toml b/internal/configuration/fermentord.toml new file mode 100644 index 0000000..f2361e7 --- /dev/null +++ b/internal/configuration/fermentord.toml @@ -0,0 +1,40 @@ +heater_enabled = true +cooler_enabled = true +fermentation_temp = 20.5 +delta_temperature_cool = 1.0 +delta_temperature_heat = 0.1 + +[brew] +uuid = "00000000-0000-0000-0000-000000000000" + +[nats] +url = "nats://nats.service.consul:4222" +stream = "DWJONDAHL" + +[nats.subject] +event = "DWJONDAHL.ingest.fermentor.ingest_event" +state = "DWJONDAHL.ingest.fermentor.ingest_state" +temp = "DWJONDAHL.ingest.fermentor.ingest_temperature_reading" +tilt = "DWJONDAHL.ingest.fermentor.ingest_tilt_reading" + +[http] +port = 8000 + +[sensors] +wort = "" +chamber = "" +ambient = "" +weight = 0.8 + +[limits] +min_chamber_temp = 0.0 +max_chamber_temp = 25 +min_cooler_runtime_secs = 180 +max_cooler_runtime_secs = 86400 +min_cooler_cooldown_secs = 300 +heater_grace_time_secs = 1800 + +[pid] +kp = 2.0 +ki = 0.0001 +kd = 2.0 diff --git a/internal/configuration/init_default.go b/internal/configuration/init_default.go new file mode 100644 index 0000000..cc99784 --- /dev/null +++ b/internal/configuration/init_default.go @@ -0,0 +1,11 @@ +//go:build !gokrazy + +package configuration + +import "github.com/spf13/viper" + +func setDefaults() { + viper.AddConfigPath("/etc") + viper.AddConfigPath("/usr/local/etc") + viper.AddConfigPath(".") +} diff --git a/internal/configuration/init_gokrazy.go b/internal/configuration/init_gokrazy.go new file mode 100644 index 0000000..328bc9a --- /dev/null +++ b/internal/configuration/init_gokrazy.go @@ -0,0 +1,9 @@ +//go:build gokrazy + +package configuration + +import "github.com/spf13/viper" + +func setDefaults() { + viper.AddConfigPath("/perm") +}