summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2026-03-23 17:59:33 +0100
committerxengineering <me@xengineering.eu>2026-03-25 21:09:01 +0100
commit776e6fdd8415edd0daa5743c35cbee029a89c6a7 (patch)
treeaf6ec85cf7da94a8c647c1d87bc78705d6f0ad0e
parent91844eb24c16d7ba768f913597702f8075fe8af2 (diff)
downloadsia-server-776e6fdd8415edd0daa5743c35cbee029a89c6a7.tar
sia-server-776e6fdd8415edd0daa5743c35cbee029a89c6a7.tar.zst
sia-server-776e6fdd8415edd0daa5743c35cbee029a89c6a7.zip
Add shelly configuration parsing
This allows to specify Shelly cover devices to be added to the configuration file with all information required by the Sia server.
-rw-r--r--config.go15
-rw-r--r--configs/valid/shelly.json21
2 files changed, 36 insertions, 0 deletions
diff --git a/config.go b/config.go
index b3cd9dc..a294b6c 100644
--- a/config.go
+++ b/config.go
@@ -45,9 +45,17 @@ type HomematicConfig struct {
PollingPeriod string `json:"polling-period"`
}
+type ShellyConfig struct {
+ ID string `json:"id"`
+ IP string `json:"ip"`
+}
+
+type ShellyConfigs []ShellyConfig
+
type StartupConfig struct {
MQTT MQTTConfig `json:"mqtt"`
Homematic HomematicConfig `json:"homematic"`
+ Shelly ShellyConfigs `json:"shelly"`
}
func (sc StartupConfig) String() string {
@@ -117,6 +125,13 @@ func (sc StartupConfig) Validate() error {
return fmt.Errorf("homematic/polling-period configuration '%s' could not be parsed to duration: %v", sc.Homematic.PollingPeriod, err)
}
+ for _, shelly := range sc.Shelly {
+ ip := net.ParseIP(shelly.IP)
+ if ip == nil {
+ return fmt.Errorf("Failed to parse IP address '%s'.", shelly.IP)
+ }
+ }
+
return nil
}
diff --git a/configs/valid/shelly.json b/configs/valid/shelly.json
new file mode 100644
index 0000000..578f6dc
--- /dev/null
+++ b/configs/valid/shelly.json
@@ -0,0 +1,21 @@
+{
+ "mqtt": {
+ "broker": "tcp://127.0.0.1:1883",
+ "client-id": "siaserver",
+ "topic-prefix": "sia"
+ },
+ "homematic": {
+ "ccu": "http://127.0.0.1:8080",
+ "polling-period": "50ms"
+ },
+ "shelly": [
+ {
+ "id": "shelly1",
+ "ip": "192.168.1.20"
+ },
+ {
+ "id": "shelly2",
+ "ip": "2001:db8::68"
+ }
+ ]
+}