From 8205200e73ff45c09aaa67dacb7ceb9b33845f5d Mon Sep 17 00:00:00 2001 From: xengineering Date: Sat, 20 Dec 2025 12:55:57 +0100 Subject: Add continuous polling execution This state polls the device states with 500 milliseconds period and publishes the state on every poll. --- main.go | 48 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index f0dfb95..6ef4c63 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,9 @@ package main import ( "fmt" "log" + "os" + "os/signal" + "syscall" "time" mqtt "github.com/eclipse/paho.mqtt.golang" @@ -18,22 +21,33 @@ const ( RETAINED = false MQTT_CONNECT_TIMEOUT = time.Second * 5 MQTT_DISCONNECT_TIMEOUT_US = 500 + POLLING_PERIOD = 500 * time.Millisecond ) func main() { log.Println("+++ Started Sia server +++") defer log.Println("--- Stopped Sia server ---") - req, inventory, client, err := Start() - defer Stop(client) - if err != nil { - log.Fatalf("Failed startup process: %v", err) - } + go func() { + req, inventory, client, err := Start() + defer Stop(client) + if err != nil { + log.Fatalf("Failed startup process: %v", err) + } - err = Poll(req, inventory, client) - if err != nil { - log.Fatalf("Failed to poll states: %v", err) - } + for { + start := time.Now() + + err = Poll(req, inventory, client) + if err != nil { + log.Fatalf("Failed to poll states: %v", err) + } + + WaitUntil(start.Add(POLLING_PERIOD)) + } + }() + + Await(syscall.SIGTERM, syscall.SIGINT) } func ConnectMQTT(broker string, id string) (mqtt.Client, error) { @@ -104,3 +118,19 @@ func Poll(req homematic.Requester, inventory homematic.Devices, client mqtt.Clie return nil } + +func Await(signals ...syscall.Signal) { + listener := make(chan os.Signal) + for _, s := range signals { + signal.Notify(listener, s) + } + sig := <-listener + log.Printf("Received OS signal '%v'\n", sig) +} + +func WaitUntil(deadline time.Time) { + duration := time.Until(deadline) + if duration > 0 { + time.Sleep(duration) + } +} -- cgit v1.2.3-70-g09d2