first commit

This commit is contained in:
Florian Klemenz 2024-10-19 16:24:29 +02:00
commit 5489a0d684
6 changed files with 254 additions and 0 deletions

0
README.md Normal file
View File

51
munin-collector Executable file
View File

@ -0,0 +1,51 @@
TARGETS="192.168.0.51"
#PLUGINS="load memory pisense_temp 1wire ina219 hue_temp_10 hue_temp_14 433mhz"
PLUGINS="load memory pisense_temp 1wire ina219 433mhz"
PASSWORD="SET_ME"
source ~/.munin-collector.conf
while true; do
IFS=' '; for TARGET in ${TARGETS}; do
echo "$(date) Fetching data from ${TARGET} ..."
SOURCE=$(echo "nodes" | nc -N ${TARGET} 4949 | tail -n +2 | head -n -1)
IFS=' '; for PLUGIN in ${PLUGINS}; do
CONFIG=$(echo "config ${PLUGIN}" | nc -N ${TARGET} 4949 | tail -n +2 | head -n -1)
DATA=$(echo "fetch ${PLUGIN}" | nc -N ${TARGET} 4949 | tail -n +2 | head -n -1)
#echo "-----------------"
#echo "$CONFIG"
#echo "-----------------"
#echo "$DATA"
#echo "-----------------"
TABLE_NAME="home_${PLUGIN}" # default
if [[ $PLUGIN == hue_temp_* ]]; then
TABLE_NAME="home_hue_temp" # FIXME use config data.sql.table
fi
IFS=$'\n'; for LINE in ${DATA}; do
# parse data and insert to database
#echo $LINE
# if [ "${PLUGIN}" = "433mhz" ]; then
# ZONE=$(echo $LINE | sed -E "s/(.*)_(.*)_(.*)\.(.*) (.*)/\1/")
# METRIC=$(echo $LINE | sed -E "s/(.*)_(.*)_(.*)\.(.*) (.*)/\3/")
# VALUE=$(echo $LINE | sed -E "s/(.*)_(.*)_(.*)\.(.*) (.*)/\5/")
#
# SQL="INSERT INTO readings (source, metric, value) VALUES (\"${ZONE}\",\"${METRIC}\",\"${VALUE}\");"
# else
SQL=$(echo $LINE | sed -E "s/(.*)\.(.*) (.*)/INSERT INTO ${TABLE_NAME} (source, metric, value) VALUES (\"${SOURCE}\",\"\1\", \"\3\");/")
# fi
#echo $SQL
echo $SQL | mysql --host="192.168.0.12" --database="grafanaData" --user="grafanaWriter" --password="${PASSWORD}"
done # LINE
done # PLUGINS
done # TARGETS
sleep 300
done # FOREVER-LOOP

12
plugin-conf.d/1wire Normal file
View File

@ -0,0 +1,12 @@
[1wire]
env.alias_001415daa6ff Vorlauf
env.alias_000802775a88 Ext_1
env.alias_0008027777d5 Ext_2
env.alias_00000614a13f Schlafen_1
env.alias_00000614a9dd Schlafen_2
env.alias_00042c37a7ff Wohnen_1
env.alias_000802774f41 Wohnen_2
env.alias_00042e0076ff Kind
env.alias_000006140045 Bad
env.alias_0000061451b3 Kueche
env.alias_0008027774a6 Esstisch

22
plugin-conf.d/433mhz Normal file
View File

@ -0,0 +1,22 @@
[433mhz]
user root
#env.ignore_ttl true
# global types
env.type_1 Temperatur
env.type_2 Luftfeuchte
env.type_3 Spannung
# node names
env.node_0 Wohnzimmer
env.node_1 Schlafzimmer
env.node_2 Arbeitszimmer
env.node_3 Esszimmer
env.node_4 Küche
env.node_5 Bad
env.node_6 Abstellkammer
env.node_7 Balkon
# single sensor type overrides
#env.sensor_0_0 Special

99
plugins/433mhz Executable file
View File

@ -0,0 +1,99 @@
#!/bin/bash
# -*- sh -*-
: << =cut
=head1 NAME
433mhz - Plugin to capture readings from wireless sensors via serial
=head1 NOTES
=head1 AUTHOR
Contributed by Florian Klemenz
=head1 LICENSE
GPLv2
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=cut
. $MUNIN_LIBDIR/plugins/plugin.sh
if [ "$1" = "autoconf" ]; then
echo yes
exit 0
fi
if [ "$1" = "config" ]; then
echo 'graph_title Wireless temperature sensor readings'
echo 'graph_args --base 1 -l 0 '
echo 'graph_scale no'
echo 'graph_vlabel °C'
echo 'graph_category temperature'
echo 'temp.label Vorratskammer'
echo 'temp.draw LINE'
print_warning temp
print_critical temp
exit 0
fi
# DATA TYPE IDs
#define TYPE_TEMPERATURE 1
#define TYPE_HUMIDITY 2
#define TYPE_VOLTAGE 3
TYPES=( none tmp hmd vlt )
CMD="arduino | tail -n +2"
IFS=$'\n'
SENSORS=( $(eval $CMD) )
#declare -p SENSORS
IFS=' '
for ROW in "${SENSORS[@]}"; do
ENTRY=( $ROW )
NODE=${ENTRY[0]}
SENSOR=${ENTRY[1]}
VALUE=${ENTRY[2]}
TYPE=${ENTRY[3]}
TTL=$(echo "${ENTRY[4]}" | tr -d '[:space:]')
if [ "$TTL" != "0" ] || [ ${ignore_ttl} ]; then
# Overrides NODE - Example: env.node_0 Wohnzimmer
ENV_NODE_VAR_NAME="node_${NODE}"
ENV_NODE_NAME=${!ENV_NODE_VAR_NAME}
# Overrides SENSOR - Example: env.sensor_0_0 Batterie
ENV_SENSOR_VAR_NAME="sensor_${NODE}_${SENSOR}"
ENV_SENSOR_NAME=${!ENV_SENSOR_VAR_NAME}
if [ -n "${ENV_SENSOR_NAME}" ]; then
echo "${ENV_NODE_NAME:-$NODE}_${SENSOR}_${ENV_SENSOR_NAME}.value ${VALUE}"
else
# Overrides TYPE - Example: env.type_1 Batterie
ENV_TYPE_VAR_NAME="type_${TYPE}"
ENV_TYPE_NAME=${!ENV_TYPE_VAR_NAME}
if [ -n "${ENV_TYPE_NAME}" ]; then
echo "${ENV_NODE_NAME:-$NODE}_${SENSOR}_${ENV_TYPE_NAME}.value ${VALUE}"
else
echo "${ENV_NODE_NAME:-$NODE}_${SENSOR}_${TYPES[$TYPE]}.value ${VALUE}"
fi
fi
#echo "${ENV_NODE_NAME:-$NODE}_${ENV_SENSOR_NAME:-$SENSOR}_${TYPES[$TYPE]}.value ${VALUE}"
fi
done
#echo "Vorratskammer.value $TEMP"

70
plugins/ina219 Executable file
View File

@ -0,0 +1,70 @@
#!/bin/sh
# -*- sh -*-
: << =cut
=head1 NAME
ina219 - Plugin to measure power consumption.
=head1 NOTES
=head1 AUTHOR
Contributed by Florian Klemenz
=head1 LICENSE
GPLv2
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf
=cut
. $MUNIN_LIBDIR/plugins/plugin.sh
if [ "$1" = "autoconf" ]; then
echo yes
exit 0
fi
if [ "$1" = "config" ]; then
echo 'graph_title Power'
echo 'graph_args --base 1 -l 0 '
echo 'graph_scale no'
echo 'graph_vlabel mW'
echo 'graph_category power'
echo 'power.label power'
echo 'power.draw LINE'
print_warning power
print_critical power
exit 0
fi
ROUNDS=5
VOLTAGE=0
CURRENT=0
POWER=0
for i in $(seq ${ROUNDS}); do
RESULT=$(/usr/bin/ina219)
VOLTAGE_RAW=$(echo $RESULT | /bin/sed 's/\([0-9]\+\)mV \+\([0-9\.]\+\)mA/\1/')
VOLTAGE=$(echo "scale=3; $VOLTAGE+$VOLTAGE_RAW" | /usr/bin/bc)
CURRENT_RAW=$(echo $RESULT | /bin/sed 's/\([0-9]\+\)mV \+\([0-9\.]\+\)mA/\2/')
CURRENT=$(echo "scale=3; $CURRENT+$CURRENT_RAW" | /usr/bin/bc)
done
VOLTAGE=$(echo "scale=3; $VOLTAGE/$ROUNDS" | /usr/bin/bc)
CURRENT=$(echo "scale=3; $CURRENT/$ROUNDS" | /usr/bin/bc)
POWER=$(echo "scale=3; $VOLTAGE*$CURRENT/1000000" | /usr/bin/bc)
echo "power.value $POWER"