summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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.")
+}