64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
package bridge
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log/slog"
|
|
)
|
|
|
|
func (b *Bridge) publishDiscovery() {
|
|
type component struct {
|
|
Platform string `json:"p"`
|
|
Name string `json:"name"`
|
|
UniqueID string `json:"unique_id"`
|
|
CommandTopic string `json:"command_topic"`
|
|
StateTopic string `json:"state_topic"`
|
|
Options []string `json:"options"`
|
|
}
|
|
type payload struct {
|
|
Device struct {
|
|
Identifiers []string `json:"identifiers"`
|
|
Name string `json:"name"`
|
|
Manufacturer string `json:"manufacturer"`
|
|
Model string `json:"model"`
|
|
} `json:"device"`
|
|
Origin map[string]string `json:"origin"`
|
|
Availability []map[string]string `json:"availability"`
|
|
Components map[string]component `json:"components"`
|
|
}
|
|
|
|
options := make([]string, numInputs)
|
|
for i := range options {
|
|
options[i] = inputLabel(i + 1)
|
|
}
|
|
|
|
p := payload{
|
|
Origin: map[string]string{"name": "ezcoo-usb-control"},
|
|
Availability: []map[string]string{{"topic": b.availTopic()}},
|
|
Components: make(map[string]component, numOutputs),
|
|
}
|
|
p.Device.Identifiers = []string{"ezcoo_mx42has_arc"}
|
|
p.Device.Name = "EZCOO HDMI Matrix"
|
|
p.Device.Manufacturer = "EZCOO"
|
|
p.Device.Model = "EZ-MX42HAS-ARC"
|
|
|
|
for out := 1; out <= numOutputs; out++ {
|
|
p.Components[fmt.Sprintf("out%d", out)] = component{
|
|
Platform: "select",
|
|
Name: fmt.Sprintf("Output %d", out),
|
|
UniqueID: fmt.Sprintf("ezcoo_mx42_out%d", out),
|
|
CommandTopic: b.cmdTopic(out),
|
|
StateTopic: b.stateTopic(out),
|
|
Options: options,
|
|
}
|
|
}
|
|
|
|
data, err := json.Marshal(p)
|
|
if err != nil {
|
|
slog.Error("marshal discovery payload", "err", err)
|
|
return
|
|
}
|
|
b.client.Publish(b.discoveryTopic(), 1, true, data)
|
|
slog.Info("published HA discovery")
|
|
}
|