summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2025-12-20 12:14:01 +0100
committerxengineering <me@xengineering.eu>2025-12-20 12:14:01 +0100
commit03ceb4e5babba95c9ec60da580fbeac465aa0938 (patch)
tree575d7304ba5aa732fdfcfd78e6bef10dc98eee10 /main.go
parentb0fcc3e7590b9f3486f1edf8c2b004d035e38652 (diff)
downloadsia-server-03ceb4e5babba95c9ec60da580fbeac465aa0938.tar
sia-server-03ceb4e5babba95c9ec60da580fbeac465aa0938.tar.zst
sia-server-03ceb4e5babba95c9ec60da580fbeac465aa0938.zip
Publish contact state with MQTT
This demonstrates the ability to take information from the Homematic system to MQTT. It is a major proof of concept step towards a minimal viable product (MVP) Sia server.
Diffstat (limited to 'main.go')
-rw-r--r--main.go22
1 files changed, 21 insertions, 1 deletions
diff --git a/main.go b/main.go
index 2beb538..47b6eef 100644
--- a/main.go
+++ b/main.go
@@ -5,11 +5,17 @@ import (
"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() {
@@ -22,6 +28,16 @@ func main() {
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)
@@ -29,7 +45,11 @@ func main() {
log.Fatalf("Failed to get value: %v", err)
}
- log.Printf("%s %s has state %t", device.Type, device.Address, state)
+ topic := fmt.Sprintf("%s/%s", TOPIC_PREFIX, device.Address)
+ payload := []byte(fmt.Sprintf("%t", state))
+ client.Publish(topic, QOS, RETAINED, payload)
}
}
+
+ client.Disconnect(500)
}