1
0
Fork 0
mirror of https://github.com/munin-monitoring/contrib.git synced 2025-07-22 02:51:03 +00:00

Fix issues detected in munin-monitoring!PR 1312

Consistent tabbing
perldoc style comment
detect curl and jq prereqs
shellcheck linting
error handling
jq parsing
This commit is contained in:
Tim Connors 2023-10-16 17:00:02 +11:00
parent cdd731d0ae
commit 33b1b80361

View file

@ -42,20 +42,46 @@ GPLv2 or later
=cut
cached_curl=none
# runs curl on "Status $1", and parses through jq -c "$2", setting the value in "$res"
# Caches the curl results for when we're plotting multiple (power) values
# -- don't forget to make sure we're not being called in a subshell!
get_value() {
if [ "$cached_curl" = none ] ; then
# run curl, cache the result, and if there was an error, set value to "U"
if ! cached_curl=$( curl --max-time 5 -fsS --data-urlencode "cmnd=Status $1" "http://$DEVICE/cm" ) ; then
cached_curl='{}'
fi
fi
res=$( echo "$cached_curl" | jq -c "$2" )
if [ "$res" = null ] ; then
res=U
fi
}
DEVICE=$(basename "$0" | cut -d_ -f2)
FUNCTION=$(basename "$0" | cut -d_ -f3)
if [ "$1" = "autoconf" ]; then
if ! which curl > /dev/null 2>&1 ; then
echo "no (no curl)"
exit 0
fi
if ! which jq > /dev/null 2>&1 ; then
echo "no (no jq)"
exit 0
fi
echo yes && exit 0
fi
if [ "$1" = "suggest" ]; then
nodeattr -n 'tasmota&&powermon' | while read device ; do
nodeattr -n 'tasmota&&powermon' | while read -r device ; do
for i in voltage power powerfactor current energy ; do
echo "${device}_${i}"
done
done
nodeattr -n 'tasmota&&DS18B20temp' | while read device ; do
nodeattr -n 'tasmota&&DS18B20temp' | while read -r device ; do
for i in DS18B20temp ; do
echo "${device}_${i}"
done
@ -67,16 +93,14 @@ voltage() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Voltage: $DEVICE"
echo "graph_category sensors"
echo "graph_vlabel Volts"
echo "graph_args --base 1000 -l 0"
echo "Volts.label Volts"
echo "Volts.label Voltage"
exit 0
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$DEVICE/cm )
volts=$( echo "$res" | jq -c '.StatusSNS.ENERGY.Voltage' )
echo Volts.value $volts
get_value 8 ".StatusSNS.ENERGY.Voltage"
echo "Volts.value $res"
fi
}
@ -84,16 +108,14 @@ current() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Current: $DEVICE"
echo "graph_category sensors"
echo "graph_vlabel Amps"
echo "graph_args --base 1000 -l 0"
echo "Current.label Current"
exit 0
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$DEVICE/cm )
current=$( echo "$res" | jq -c '.StatusSNS.ENERGY.Current' )
echo Current.value $current
get_value 8 ".StatusSNS.ENERGY.Current"
echo "Current.value $res"
fi
}
@ -101,7 +123,6 @@ power() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Power: $DEVICE"
echo "graph_category sensors"
echo "graph_vlabel Watts"
echo "graph_args --base 1000 -l 0"
@ -111,10 +132,9 @@ power() {
echo "${i}.min 0"
done
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$DEVICE/cm )
for i in Power ApparentPower ReactivePower ; do
power=$( echo "$res" | jq -c '.StatusSNS.ENERGY.'$i )
echo $i.value $power
get_value 8 ".StatusSNS.ENERGY.$i"
echo "$i.value $res"
done
fi
}
@ -123,7 +143,6 @@ powerfactor() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Power factor: $DEVICE"
echo "graph_category sensors"
echo "graph_vlabel Power Factor"
echo "graph_args --base 1000 -l 0"
@ -132,9 +151,8 @@ powerfactor() {
echo "PowerFactor.label Power Factor"
exit 0
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$DEVICE/cm )
powerfactor=$( echo "$res" | jq -c '.StatusSNS.ENERGY.Factor' )
echo PowerFactor.value $powerfactor
get_value 8 ".StatusSNS.ENERGY.Factor"
echo "PowerFactor.value $res"
fi
}
@ -142,7 +160,6 @@ energy() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Energy: $DEVICE"
echo "graph_category sensors"
echo "graph_args --base 1000"
echo "graph_vlabel kWh"
@ -151,9 +168,8 @@ energy() {
exit 0
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$DEVICE/cm )
energy=$( echo "$res" | jq -c '.StatusSNS.ENERGY.Total' )
echo Energy.value $energy
get_value 8 ".StatusSNS.ENERGY.Total"
echo "Energy.value $res"
fi
}
@ -161,7 +177,6 @@ DS18B20temp() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Temperature: $DEVICE"
echo "graph_category sensors"
echo "graph_args --base 1000"
echo "graph_vlabel °C"
@ -171,9 +186,8 @@ DS18B20temp() {
exit 0
else
res=$( curl -fsS --data-urlencode "cmnd=Status 10" http://$DEVICE/cm )
energy=$( echo "$res" | jq -c '.StatusSNS.DS18B20.Temperature' )
echo Temperature.value $energy
get_value 10 ".StatusSNS.DS18B20.Temperature"
echo "Temperature.value $res"
fi
}