36 lines
820 B
Go
36 lines
820 B
Go
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()
|
|
}
|