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
|
/cmd/git_version.go
|
||||||
/dist
|
/dist
|
||||||
.env
|
.env
|
||||||
|
screen_off
|
||||||
|
screen_on
|
||||||
|
|||||||
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user