kiosk presence helper added
This commit is contained in:
parent
f22890bb66
commit
19322dd350
2
.gitignore
vendored
2
.gitignore
vendored
@ -23,3 +23,5 @@ go.work
|
||||
/cmd/git_version.go
|
||||
/dist
|
||||
.env
|
||||
screen_off
|
||||
screen_on
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user