From 19322dd35079c0b1771735a4c1c20b7ee4d0791d Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Sun, 29 Sep 2024 13:08:20 -0500 Subject: [PATCH] kiosk presence helper added --- .gitignore | 2 ++ kiosk/kiosk.go | 24 ++++++++++++++++++++++++ kiosk/mqtt.go | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9f4fd54..346b10f 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,5 @@ go.work /cmd/git_version.go /dist .env +screen_off +screen_on diff --git a/kiosk/kiosk.go b/kiosk/kiosk.go index e32bf0f..05fa57b 100644 --- a/kiosk/kiosk.go +++ b/kiosk/kiosk.go @@ -3,6 +3,7 @@ package kiosk import ( "context" "log/slog" + "os/exec" "github.com/spf13/viper" ) @@ -15,6 +16,7 @@ type configObj struct { username string password string presenceTopic string + shell string screen_on_cmd string screen_off_cmd string } @@ -27,9 +29,31 @@ func Run(rootLogger *slog.Logger, exitch chan bool, ctx context.Context) { config.username = viper.GetString("mqtt_broker_user") config.password = viper.GetString("mqtt_broker_password") config.presenceTopic = viper.GetString("mqtt_presence_topic") + config.shell = viper.GetString("kiosk_cmd_shell") config.screen_on_cmd = viper.GetString("kiosk_cmd_screen_on") config.screen_off_cmd = viper.GetString("kiosk_cmd_screen_off") config.logger.Info("starting MQTT broker client") brokerConsume(ctx) exitch <- true } + +func handlePresenceMessage(msg [2]string) { + logger := config.logger + logger.Debug("received presence message", "msg", msg) + cmdStr := "" + switch msg[1] { + case "on": + cmdStr = config.screen_on_cmd + case "off": + cmdStr = config.screen_off_cmd + default: + logger.Warn("recieved unexpected presence message", "msg", msg) + return + } + logger.Info("Presence change event", "presence", msg[1], "command", cmdStr) + cmd := exec.Command(config.shell, "-c", cmdStr) + err := cmd.Run() + if err != nil { + logger.Error("error while executing command", "msg", msg, "command", cmdStr, "err", err) + } +} diff --git a/kiosk/mqtt.go b/kiosk/mqtt.go index 0eee1c5..cdc97ce 100644 --- a/kiosk/mqtt.go +++ b/kiosk/mqtt.go @@ -45,7 +45,7 @@ func brokerConsume(ctx context.Context) { done <- true return case msg := <-messages: - logger.Info("MQTT message received", "topic", msg[0], "body", msg[1]) + go handlePresenceMessage(msg) } } }()