summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.go38
-rw-r--r--config_test.go14
-rw-r--r--configs/default.json11
-rw-r--r--meson.build1
4 files changed, 64 insertions, 0 deletions
diff --git a/config.go b/config.go
new file mode 100644
index 0000000..38f0af9
--- /dev/null
+++ b/config.go
@@ -0,0 +1,38 @@
+package main
+
+import (
+ _ "embed"
+ "encoding/json"
+ "log"
+)
+
+//go:embed configs/default.json
+var defaultConfig []byte
+
+type StartupConfig struct {
+ MQTT struct {
+ Broker string `json:"broker"`
+ ClientID string `json:"client-id"`
+ TopicPrefix string `json:"topic-prefix"`
+ } `json:"mqtt"`
+
+ Homematic struct {
+ CCU string `json:"ccu"`
+ PollingPeriodMilliseconds int `json:"polling-period-milliseconds"`
+ } `json:"homematic"`
+}
+
+func (sc *StartupConfig) FromJSON(data []byte) error {
+ return json.Unmarshal(data, sc)
+}
+
+func GetStartupConfig() StartupConfig {
+ config := StartupConfig{}
+
+ err := config.FromJSON(defaultConfig)
+ if err != nil {
+ log.Fatalf("Could not parse default config: %v", err)
+ }
+
+ return config
+}
diff --git a/config_test.go b/config_test.go
new file mode 100644
index 0000000..c568a34
--- /dev/null
+++ b/config_test.go
@@ -0,0 +1,14 @@
+package main
+
+import (
+ "testing"
+)
+
+func TestDefaultConfig(t *testing.T) {
+ config := StartupConfig{}
+
+ err := config.FromJSON(defaultConfig)
+ if err != nil {
+ t.Fatalf("Failed parsing default config from JSON: %v", err)
+ }
+}
diff --git a/configs/default.json b/configs/default.json
new file mode 100644
index 0000000..9d3fb07
--- /dev/null
+++ b/configs/default.json
@@ -0,0 +1,11 @@
+{
+ "mqtt": {
+ "broker": "tcp://127.0.0.1:1883",
+ "client-id": "siaserver",
+ "topic-prefix": "sia"
+ },
+ "homematic": {
+ "ccu": "http://127.0.0.1:8080",
+ "polling-period-milliseconds": 50
+ }
+}
diff --git a/meson.build b/meson.build
index 9861cdf..0917410 100644
--- a/meson.build
+++ b/meson.build
@@ -8,6 +8,7 @@ sia_server = custom_target(
meson.current_source_dir() / 'cache.go',
meson.current_source_dir() / 'mqtt.go',
meson.current_source_dir() / 'homematic.go',
+ meson.current_source_dir() / 'config.go',
],
output : 'sia-server',
command : [