kiosk presence helper added

This commit is contained in:
Mike Bloy 2024-09-29 13:08:20 -05:00
parent f22890bb66
commit 19322dd350
3 changed files with 27 additions and 1 deletions

2
.gitignore vendored
View File

@ -23,3 +23,5 @@ go.work
/cmd/git_version.go
/dist
.env
screen_off
screen_on

View File

@ -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)
}
}

View File

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