summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go31
1 files changed, 20 insertions, 11 deletions
diff --git a/main.go b/main.go
index 67af965..f0dfb95 100644
--- a/main.go
+++ b/main.go
@@ -30,17 +30,9 @@ func main() {
log.Fatalf("Failed startup process: %v", err)
}
- for _, device := range inventory {
- if device.Type == `SHUTTER_CONTACT` {
- state, err := req.GetValue(device.Address)
- if err != nil {
- log.Fatalf("Failed to get value: %v", err)
- }
-
- topic := fmt.Sprintf("%s/contact/%s/state", TOPIC_PREFIX, device.Address)
- payload := []byte(fmt.Sprintf("%t", state))
- client.Publish(topic, QOS, RETAINED, payload)
- }
+ err = Poll(req, inventory, client)
+ if err != nil {
+ log.Fatalf("Failed to poll states: %v", err)
}
}
@@ -95,3 +87,20 @@ func Stop(c mqtt.Client) {
c.Disconnect(MQTT_DISCONNECT_TIMEOUT_US)
log.Println("Disconnected from MQTT broker.")
}
+
+func Poll(req homematic.Requester, inventory homematic.Devices, client mqtt.Client) error {
+ for _, device := range inventory {
+ if device.Type == `SHUTTER_CONTACT` {
+ state, err := req.GetValue(device.Address)
+ if err != nil {
+ return fmt.Errorf("Failed to get value: %w", err)
+ }
+
+ topic := fmt.Sprintf("%s/contact/%s/state", TOPIC_PREFIX, device.Address)
+ payload := []byte(fmt.Sprintf("%t", state))
+ _ = client.Publish(topic, QOS, RETAINED, payload)
+ }
+ }
+
+ return nil
+}