summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go19
1 files changed, 11 insertions, 8 deletions
diff --git a/main.go b/main.go
index 6ef4c63..051deef 100644
--- a/main.go
+++ b/main.go
@@ -35,14 +35,18 @@ func main() {
log.Fatalf("Failed startup process: %v", err)
}
+ cache := NewCache(client)
+
for {
start := time.Now()
- err = Poll(req, inventory, client)
+ states, err := Poll(req, inventory)
if err != nil {
log.Fatalf("Failed to poll states: %v", err)
}
+ cache.Update(states)
+
WaitUntil(start.Add(POLLING_PERIOD))
}
}()
@@ -102,21 +106,20 @@ func Stop(c mqtt.Client) {
log.Println("Disconnected from MQTT broker.")
}
-func Poll(req homematic.Requester, inventory homematic.Devices, client mqtt.Client) error {
+func Poll(req homematic.Requester, inventory homematic.Devices) (States, error) {
+ states := make(States)
+
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)
+ return states, 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)
+ states[device.Address] = state
}
}
- return nil
+ return states, nil
}
func Await(signals ...syscall.Signal) {