summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2025-12-20 12:46:28 +0100
committerxengineering <me@xengineering.eu>2025-12-20 12:46:28 +0100
commitfeced16cf361a085de9a6f97d7491412261cf8b8 (patch)
tree830fc2b992a44cb72fc17c313f6c73bb4f9b4796 /main.go
parent6b876c1e22b72cfaa91b2a3064a1f1c4fe7380ed (diff)
downloadsia-server-feced16cf361a085de9a6f97d7491412261cf8b8.tar
sia-server-feced16cf361a085de9a6f97d7491412261cf8b8.tar.zst
sia-server-feced16cf361a085de9a6f97d7491412261cf8b8.zip
Refactor with Start() and Stop()
This reduces the lines of code of the main() function significantly and groups all start and stop actions.
Diffstat (limited to 'main.go')
-rw-r--r--main.go48
1 files changed, 32 insertions, 16 deletions
diff --git a/main.go b/main.go
index 91f65ba..67af965 100644
--- a/main.go
+++ b/main.go
@@ -24,24 +24,11 @@ func main() {
log.Println("+++ Started Sia server +++")
defer log.Println("--- Stopped Sia server ---")
- req := homematic.NewRequester(OPENCCU)
- log.Printf("Created Homematic requester (%s).", OPENCCU)
-
- inventory, err := req.ListDevices()
+ req, inventory, client, err := Start()
+ defer Stop(client)
if err != nil {
- log.Fatalf("Failed to retrieve device list: %v", err)
+ log.Fatalf("Failed startup process: %v", err)
}
- log.Printf("Retrieved Homematic inventory with %d devices.", len(inventory))
-
- client, err := ConnectMQTT(BROKER, CLIENT_ID)
- if err != nil {
- log.Fatalf("Could not connect to MQTT broker: %v", err)
- }
- defer func () {
- client.Disconnect(MQTT_DISCONNECT_TIMEOUT_US)
- log.Println("Disconnected from MQTT broker.")
- }()
- log.Printf("Connected to MQTT broker (%s).", BROKER)
for _, device := range inventory {
if device.Type == `SHUTTER_CONTACT` {
@@ -79,3 +66,32 @@ func ConnectMQTT(broker string, id string) (mqtt.Client, error) {
return client, nil
}
+
+func Start() (homematic.Requester, homematic.Devices, mqtt.Client, error) {
+ var req homematic.Requester
+ var inventory homematic.Devices
+ var client mqtt.Client
+ var err error
+
+ req = homematic.NewRequester(OPENCCU)
+ log.Printf("Created Homematic requester (%s).", OPENCCU)
+
+ inventory, err = req.ListDevices()
+ if err != nil {
+ return req, inventory, client, fmt.Errorf("Failed getting initial device list: %w", err)
+ }
+ log.Printf("Retrieved Homematic inventory with %d devices.", len(inventory))
+
+ client, err = ConnectMQTT(BROKER, CLIENT_ID)
+ if err != nil {
+ return req, inventory, client, fmt.Errorf("Failed connecting to MQTT broker: %w", err)
+ }
+ log.Printf("Connected to MQTT broker (%s).", BROKER)
+
+ return req, inventory, client, nil
+}
+
+func Stop(c mqtt.Client) {
+ c.Disconnect(MQTT_DISCONNECT_TIMEOUT_US)
+ log.Println("Disconnected from MQTT broker.")
+}