package kiosk import ( "context" "log/slog" "os/exec" "github.com/spf13/viper" ) type handler func(area string, present bool) type configObj struct { logger *slog.Logger broker string username string password string presenceTopic string shell string screen_on_cmd string screen_off_cmd string } var config = configObj{} func Run(rootLogger *slog.Logger, exitch chan bool, ctx context.Context) { config.logger = rootLogger.With("component", "kiosk") config.broker = viper.GetString("mqtt_broker_url") 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) } }