hasshelper/kiosk/kiosk.go

60 lines
1.6 KiB
Go

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