feat(bridge): MQTT bridge with Home Assistant auto-discovery

This commit is contained in:
2026-05-24 18:52:59 +03:00
parent e99616a135
commit c3837376f5
7 changed files with 282 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
package bridge
import (
"log/slog"
"strings"
mqtt "github.com/eclipse/paho.mqtt.golang"
)
func (b *Bridge) onConnect(c mqtt.Client) {
c.Publish(b.availTopic(), 1, true, b.availPayload())
c.Subscribe(b.cfg.DiscoveryPrefix+"/status", 1, func(_ mqtt.Client, msg mqtt.Message) {
if string(msg.Payload()) == "online" {
b.publishDiscovery()
b.OnState(b.dev.GetStatus())
}
})
for out := 1; out <= numOutputs; out++ {
out := out
c.Subscribe(b.cmdTopic(out), 1, func(_ mqtt.Client, msg mqtt.Message) {
payload := strings.TrimSpace(string(msg.Payload()))
in := inputNumberFromLabel(payload)
if in == 0 {
slog.Warn("unknown input label", "payload", payload)
return
}
b.dev.SetOutput(out, in)
c.Publish(b.stateTopic(out), 1, true, inputLabel(in))
})
}
b.publishDiscovery()
}