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 /cmd/git_version.go
/dist /dist
.env .env
screen_off
screen_on

View File

@ -3,6 +3,7 @@ package kiosk
import ( import (
"context" "context"
"log/slog" "log/slog"
"os/exec"
"github.com/spf13/viper" "github.com/spf13/viper"
) )
@ -15,6 +16,7 @@ type configObj struct {
username string username string
password string password string
presenceTopic string presenceTopic string
shell string
screen_on_cmd string screen_on_cmd string
screen_off_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.username = viper.GetString("mqtt_broker_user")
config.password = viper.GetString("mqtt_broker_password") config.password = viper.GetString("mqtt_broker_password")
config.presenceTopic = viper.GetString("mqtt_presence_topic") 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_on_cmd = viper.GetString("kiosk_cmd_screen_on")
config.screen_off_cmd = viper.GetString("kiosk_cmd_screen_off") config.screen_off_cmd = viper.GetString("kiosk_cmd_screen_off")
config.logger.Info("starting MQTT broker client") config.logger.Info("starting MQTT broker client")
brokerConsume(ctx) brokerConsume(ctx)
exitch <- true 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 done <- true
return return
case msg := <-messages: case msg := <-messages:
logger.Info("MQTT message received", "topic", msg[0], "body", msg[1]) go handlePresenceMessage(msg)
} }
} }
}() }()