diff options
Diffstat (limited to 'main.go')
| -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.") +} |
