From feced16cf361a085de9a6f97d7491412261cf8b8 Mon Sep 17 00:00:00 2001 From: xengineering Date: Sat, 20 Dec 2025 12:46:28 +0100 Subject: Refactor with Start() and Stop() This reduces the lines of code of the main() function significantly and groups all start and stop actions. --- main.go | 48 ++++++++++++++++++++++++++++++++---------------- 1 file 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.") +} -- cgit v1.2.3-70-g09d2