RandomVideo/buzzer.sh

111 lines
2.9 KiB
Bash
Executable File

#!/bin/sh
# SPDX-License-Identifier: Unlicense
configfile="config.json"
cmdjq="$(command -v jq)"
if [ -z "$cmdjq" ]; then
echo "Missing \"jq\"!"
exit 1
fi
cmdgpio="$(command -v gpio)"
if [ -z "$cmdgpio" ]; then
echo "Missing \"gpio\"!"
echo "This is a part of WiringPi-Package."
exit 1
fi
player="$($cmdjq -r ".player" < $configfile)"
if [ -z "$(command -v $player)" ]; then
echo "Missing \"$player\"!"
exit 1
fi
buzzergpio="$($cmdjq -r ".buzzer | .buzzergpio" < $configfile)"
strobegpio="$($cmdjq -r ".buzzer | .strobegpio" < $configfile)"
swupgpio="$($cmdjq -r ".swupgpio" < $configfile)"
swdowngpio="$($cmdjq -r ".buzzer | .swdowngpio" < $configfile)"
playerparam="$($cmdjq -r ".playerparam" < $configfile)"
playerloop="$($cmdjq -r ".buzzer | .playerloop" < $configfile)"
pgrepplayer="$($cmdjq -r ".pgrepplayer" < $configfile)"
pollingtime="$($cmdjq -r ".buzzer | .pollingtime" < $configfile)"
buzzertimeout="$($cmdjq -r ".buzzer | .buzzertimeout" < $configfile)"
strobeduration="$($cmdjq -r ".buzzer | .strobeduration" < $configfile)"
volumetimeout="$($cmdjq -r ".buzzer | .volumetimeout" < $configfile)"
volumedelay="$($cmdjq -r ".buzzer | .volumedelay" < $configfile)"
volumemax="$($cmdjq -r ".buzzer | .volumemax" < $configfile)"
playerfull="$(command -v $player) $playerparam"
cmdamixer="$(command -v amixer)"
$cmdgpio mode $buzzergpio in
$cmdgpio mode $strobegpio out
$cmdgpio write $strobegpio 1
$cmdgpio mode $swdowngpio in
$cmdgpio mode $swupgpio in
volumevalue=0
$cmdamixer -q -c 2 sset 'Speaker' $volumevalue%
while true; do
buzzerstat="$($cmdgpio read $buzzergpio)"
swupstat="$($cmdgpio read $swupgpio)"
swdownstat="$($cmdgpio read $swdowngpio)"
if [ "$buzzerstat" -eq 0 ] && [ "$swupstat" -eq 0 ]; then
~/RandomVideo/RandomVideo.sh buzzer
$cmdgpio write $strobegpio 0; sleep $strobeduration; $cmdgpio write $strobegpio 1 &
sleep $buzzertimeout
elif [ "$swupstat" -eq 1 ]; then
if pgrep "$pgrepplayer" > /dev/null; then
pkill "$pgrepplayer"
fi
$playerfull $playerloop ~/RandomVideo/onair.mp4 &
while [ "$swupstat" -eq 1 ]; do
swupstat="$($cmdgpio read $swupgpio)"
sleep $pollingtime
done
pkill "$pgrepplayer"
elif [ "$volumevalue" -eq 0 ] && [ "$swdownstat" -eq 1 ]; then
while [ "$volumevalue" -lt "$volumemax" ] && [ "$buzzerstat" -eq 1 ]; do
volumevalue=$((volumevalue + 1))
$cmdamixer -q -c 2 sset 'Speaker' $volumevalue%
buzzerstat="$($cmdgpio read $buzzergpio)"
sleep $volumetimeout
done
sleep $volumedelay
elif [ "$volumevalue" -gt 0 ] && [ "$swdownstat" -eq 0 ]; then
while [ "$volumevalue" -gt 0 ] && [ "$swdownstat" -eq 0 ]; do
volumevalue=$((volumevalue -1))
$cmdamixer -q -c 2 sset 'Speaker' $volumevalue%
swdownstat="$($cmdgpio read $swdowngpio)"
sleep $volumetimeout
done
sleep $volumedelay
elif [ "$buzzerstat" -eq 1 ] && [ "$swupstat" -eq 0 ]; then
sleep $pollingtime
fi
done