1
0
Fork 0
mirror of https://github.com/munin-monitoring/contrib.git synced 2025-07-25 02:18:08 +00:00
Munin-Contrib/plugins/power/tasmota_
2023-10-16 13:45:06 +11:00

173 lines
4.4 KiB
Bash
Executable file

#!/bin/sh
: << =cut
=head1 NAME
tasmota_ - logs voltage, energy usage, power, power factor and current logged from tasmota power switches
To install the plugin, copy or move the plugin to /usr/share/munin/plugins/ set
the chmod to 755 and create a symbolic link:
ln -s /usr/share/munin/plugins/tasmota_ /etc/munin/plugins/tasmota_hostname_voltage
ln -s /usr/share/munin/plugins/tasmota_ /etc/munin/plugins/tasmota_hostname_energy
ln -s /usr/share/munin/plugins/tasmota_ /etc/munin/plugins/tasmota_hostname_power
ln -s /usr/share/munin/plugins/tasmota_ /etc/munin/plugins/tasmota_hostname_powerfactor
ln -s /usr/share/munin/plugins/tasmota_ /etc/munin/plugins/tasmota_hostname_current
Plugin also implements suggests, so if you have /etc/genders
populated with "tasmota,powermon" flags for those tasmota devices
that implement energy monitoring, and nodeattr installed, you can
run an ansible play like this to set up your links:
https://github.com/spacelama/ansible-initial-server-setup/tree/master/roles/monitoring/tasks
=head1 APPLICABLE SYSTEMS
Any host that can access tasmota systems and has "jq" installed. Can
auto suggest values if nodeattr genders (debian: apt install genders)
installed and configured with tasmota,powermon flag.
=head1 AUTHOR
Tim Connors <tconnors@rather.puzzling.org>
=head1 LICENSE
GPLv2 or later
=head1 MAGICK MARKERS
#%# family=auto
#%# capabilities=autoconf
=cut
SWITCH=$(basename "$0" | cut -d_ -f2)
FUNCTION=$(basename "$0" | cut -d_ -f3)
if [ "$1" = "autoconf" ]; then
echo yes && exit 0
fi
if [ "$1" = "suggest" ]; then
nodeattr -n 'tasmota&&powermon' | while read device ; do
for i in voltage power powerfactor current energy; do
echo "${device}_${i}"
done
done
exit
fi
voltage() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Voltage: $SWITCH"
echo "graph_category sensors"
echo "graph_vlabel Volts"
echo "graph_args --base 1000 -l 0"
echo "Volts.label Volts"
exit 0
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$SWITCH/cm )
volts=$( echo "$res" | jq -c '.StatusSNS.ENERGY.Voltage' )
echo Volts.value $volts
fi
}
current() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Current: $SWITCH"
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://$SWITCH/cm )
current=$( echo "$res" | jq -c '.StatusSNS.ENERGY.Current' )
echo Current.value $current
fi
}
power() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Power: $SWITCH"
echo "graph_category sensors"
echo "graph_vlabel Watts"
echo "graph_args --base 1000 -l 0"
for i in Power ApparentPower ReactivePower ; do
echo "${i}.label $i"
echo "${i}.type GAUGE"
echo "${i}.min 0"
done
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$SWITCH/cm )
for i in Power ApparentPower ReactivePower ; do
power=$( echo "$res" | jq -c '.StatusSNS.ENERGY.'$i )
echo $i.value $power
done
fi
}
powerfactor() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Power factor: $SWITCH"
echo "graph_category sensors"
echo "graph_vlabel Power Factor"
echo "graph_args --base 1000 -l 0"
echo "PowerFactor.min 0"
echo "PowerFactor.max 1"
echo "PowerFactor.label Power Factor"
exit 0
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$SWITCH/cm )
powerfactor=$( echo "$res" | jq -c '.StatusSNS.ENERGY.Factor' )
echo PowerFactor.value $powerfactor
fi
}
energy() {
if [ "$1" = "config" ]; then
echo "graph_title Tasmota Energy: $SWITCH"
echo "graph_category sensors"
echo "graph_args --base 1000"
echo "graph_vlabel kWh"
echo "Energy.label Energy"
echo "Energy.draw AREA"
exit 0
else
res=$( curl -fsS --data-urlencode "cmnd=Status 8" http://$SWITCH/cm )
energy=$( echo "$res" | jq -c '.StatusSNS.ENERGY.Total' )
echo Energy.value $energy
fi
}
[ "$1" = "config" ] && echo "graph_category sensors"
case "$FUNCTION" in
voltage)
voltage "$1"
;;
power)
power "$1"
;;
powerfactor)
powerfactor "$1"
;;
current)
current "$1"
;;
energy)
energy "$1"
;;
esac