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()))