From 0d51d951a27d1c88827405a2964dc9e3b2e39bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesko=20Ansch=C3=BCtz?= Date: Thu, 26 Mar 2026 23:05:20 +0100 Subject: [PATCH] feat(mqtt): SendDisplayCommand mit retained QoS 1 --- server/backend/internal/mqttnotifier/notifier.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/server/backend/internal/mqttnotifier/notifier.go b/server/backend/internal/mqttnotifier/notifier.go index 5260d4d..d064dab 100644 --- a/server/backend/internal/mqttnotifier/notifier.go +++ b/server/backend/internal/mqttnotifier/notifier.go @@ -95,6 +95,22 @@ func (n *Notifier) RequestScreenshot(screenSlug string) { token.WaitTimeout(3 * time.Second) } +// SendDisplayCommand publiziert einen Display-Befehl (display_on/display_off) +// auf das Command-Topic des Screens. Retained + QoS 1, damit der Agent den +// letzten Sollzustand auch nach einem Reconnect erhält. +func (n *Notifier) SendDisplayCommand(screenSlug, action string) error { + if n.client == nil { + return nil + } + topic := fmt.Sprintf("signage/screen/%s/command", screenSlug) + payload := []byte(fmt.Sprintf(`{"action":%q}`, action)) + token := n.client.Publish(topic, 1, true, payload) + if !token.WaitTimeout(5 * time.Second) { + return fmt.Errorf("mqtt publish display command: timeout") + } + return token.Error() +} + func (n *Notifier) publish(screenSlug string) { topic := Topic(screenSlug) payload := []byte(fmt.Sprintf(`{"ts":%d}`, time.Now().UnixMilli()))