check_rpi_temperature/check_rpi_temperature.sh

114 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
#
# Created by Jonny007-MKD 2020-10-03
echoerr() { echo "$@" 1>&2; }
pathToBc=$(command -v bc)
if [ $? -ne 0 ]; then
echoerr Please install bc
exit -2
fi
pathToVcGenCmd=/usr/bin/vcgencmd
if [ ! -x "$pathToVcGenCmd" ]; then
pathToVcGenCmd=/opt/vc/bin/vcgencmd
fi
if [ ! -x "$pathToVcGenCmd" ]; then
pathToVcGenCmd=$(which vcgencmd 2> /dev/null)
fi
if [ ! -x "$pathToVcGenCmd" ]; then
echoerr Cannot find vcgencmd
exit -3
fi
WARN=50
CRIT=70
FAHRENHEIT=false
DEBUG=false
while [[ $# -gt 0 ]]; do
case $1 in
-w|--warn|--warning)
case "$2" in
''|*[!0-9]*) echoerr "Value for \"$1\" has to be a number"; exit -3;;
esac
WARN=$2
shift
;;
-c|--crit|--critical)
case "$2" in
''|*[!0-9]*) echoerr "Value for \"$1\" has to be a number"; exit -3;;
esac
CRIT=$2
shift
;;
-f|--fahrenheit)
FAHRENHEIT=true
;;
-d|--debug)
DEBUG=true
;;
-?|--help)
echo "Check /proc/mdstat. Arguments:"
echo "--warning $WARN: Temperature above which the result is warning"
echo "--critical $CRIT: Temperature above which the result is critical"
echo "--fahrenheit: All temperatures in Fahrenheit (°F)"
exit 0
;;
esac
shift
done
if [ $CRIT -le $WARN ]; then
echoerr "Critical threshold ($CRIT) has to be greater than Warning threshold ($WARN)"
exit -3
fi
function log {
if $DEBUG; then
echo " > $@"
fi
}
NL=$'\n'
output=$($pathToVcGenCmd measure_temp)
result=$?
log vcgencmd: $result. $output
if [ $result -ne 0 ]; then
echoerr "vcgencmd returned $result"
exit $result
fi
temp=${output/temp=/}
temp=${temp/\'C/}
unit="C"
if $FAHRENHEIT; then
temp=$(bc <<< "scale=1; ($temp * 1.8) + 32")
unit="F"
fi
log "$temp'$unit. Warn: $WARN'$unit, Crit: $CRIT'$unit"
c=$(bc <<< "$temp > $CRIT")
w=$(bc <<< "$temp > $WARN")
if [ $c -eq 1 ]; then
result="CRITICAL"
elif [ $w -eq 1 ]; then
result="WARNING"
else
result="OK"
fi
echo "$result. $temp'$unit | 'temperature'=$temp$unit;$WARN;$CRIT;-40;85"
case $result in
OK) exit 0;;
WARNING) exit 1;;
CRITICAL) exit 2;;
esac