feat(bridge): MQTT bridge with Home Assistant auto-discovery
This commit is contained in:
@@ -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()
|
||||
}
|
||||
Reference in New Issue
Block a user