diff --git a/cmd/setup.go b/cmd/setup.go index 9133ba85a..24dc706ca 100644 --- a/cmd/setup.go +++ b/cmd/setup.go @@ -161,14 +161,21 @@ func configureInflux(conf server.InfluxConfig, site site.API, in <-chan util.Par func configureMQTT(conf mqttConfig) error { log := util.NewLogger("mqtt") - var err error - if mqtt.Instance, err = mqtt.RegisteredClient(log, conf.Broker, conf.User, conf.Password, conf.ClientID, 1, conf.Insecure, func(options *paho.ClientOptions) { + instance, err := mqtt.RegisteredClient(log, conf.Broker, conf.User, conf.Password, conf.ClientID, 1, conf.Insecure, func(options *paho.ClientOptions) { topic := fmt.Sprintf("%s/status", strings.Trim(conf.Topic, "/")) options.SetWill(topic, "offline", 1, true) - }); err != nil { + + oc := options.OnConnect + options.SetOnConnectHandler(func(client paho.Client) { + oc(client) // original handler + _ = mqtt.Instance.Publish(topic, true, "online") // alive + }) + }) + if err != nil { return fmt.Errorf("failed configuring mqtt: %w", err) } + mqtt.Instance = instance return nil } diff --git a/server/mqtt.go b/server/mqtt.go index 0a337807f..91e9903f4 100644 --- a/server/mqtt.go +++ b/server/mqtt.go @@ -209,10 +209,6 @@ func (m *MQTT) listenSetters(topic string, site site.API, lp loadpoint.API) { // Run starts the MQTT publisher for the MQTT API func (m *MQTT) Run(site site.API, in <-chan util.Param) { - // alive - topic := fmt.Sprintf("%s/status", m.root) - m.publish(topic, true, "online") - // site setters m.Handler.ListenSetter(m.root+"/site/prioritySoc", func(payload string) error { val, err := parseFloat(payload) @@ -255,7 +251,7 @@ func (m *MQTT) Run(site site.API, in <-chan util.Param) { }) // number of loadpoints - topic = fmt.Sprintf("%s/loadpoints", m.root) + topic := fmt.Sprintf("%s/loadpoints", m.root) m.publish(topic, true, len(site.Loadpoints())) // loadpoint setters