diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 31 |
1 files changed, 20 insertions, 11 deletions
@@ -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 +} |
