package main import ( "fmt" "log" "xengineering.eu/homematic-go/homematic" mqtt "github.com/eclipse/paho.mqtt.golang" ) const ( HOST = `127.0.0.1` PORT = 8080 BROKER = `tcp://127.0.0.1:1883` CLIENT_ID = `sia-server` TOPIC_PREFIX = `sia-server` QOS = byte(0) RETAINED = false ) func main() { server := fmt.Sprintf("http://%s:%d", HOST, PORT) req := homematic.NewRequester(server) inventory, err := req.ListDevices() if err != nil { log.Fatalf("Failed to retrieve device list: %v", err) } opts := mqtt.NewClientOptions() opts.AddBroker(BROKER) opts.SetClientID(CLIENT_ID) opts.SetCleanSession(true) client := mqtt.NewClient(opts) if token := client.Connect(); token.Wait() && token.Error() != nil { log.Fatal(token.Error()) } 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/%s", TOPIC_PREFIX, device.Address) payload := []byte(fmt.Sprintf("%t", state)) client.Publish(topic, QOS, RETAINED, payload) } } client.Disconnect(500) }