diff options
| author | xengineering <me@xengineering.eu> | 2025-12-20 12:46:28 +0100 |
|---|---|---|
| committer | xengineering <me@xengineering.eu> | 2025-12-20 12:46:28 +0100 |
| commit | feced16cf361a085de9a6f97d7491412261cf8b8 (patch) | |
| tree | 830fc2b992a44cb72fc17c313f6c73bb4f9b4796 | |
| parent | 6b876c1e22b72cfaa91b2a3064a1f1c4fe7380ed (diff) | |
| download | sia-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.
| -rw-r--r-- | main.go | 48 |
1 files changed, 32 insertions, 16 deletions
@@ -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.") +} |
