From 5489a0d684299fb0815b876cb049c3e22be7b4ad Mon Sep 17 00:00:00 2001 From: Florian Klemenz Date: Sat, 19 Oct 2024 16:24:29 +0200 Subject: [PATCH] first commit --- README.md | 0 munin-collector | 51 +++++++++++++++++++++++ plugin-conf.d/1wire | 12 ++++++ plugin-conf.d/433mhz | 22 ++++++++++ plugins/433mhz | 99 ++++++++++++++++++++++++++++++++++++++++++++ plugins/ina219 | 70 +++++++++++++++++++++++++++++++ 6 files changed, 254 insertions(+) create mode 100644 README.md create mode 100755 munin-collector create mode 100644 plugin-conf.d/1wire create mode 100644 plugin-conf.d/433mhz create mode 100755 plugins/433mhz create mode 100755 plugins/ina219 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/munin-collector b/munin-collector new file mode 100755 index 0000000..428cbb8 --- /dev/null +++ b/munin-collector @@ -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 diff --git a/plugin-conf.d/1wire b/plugin-conf.d/1wire new file mode 100644 index 0000000..2a9861b --- /dev/null +++ b/plugin-conf.d/1wire @@ -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 diff --git a/plugin-conf.d/433mhz b/plugin-conf.d/433mhz new file mode 100644 index 0000000..0c1f2aa --- /dev/null +++ b/plugin-conf.d/433mhz @@ -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 diff --git a/plugins/433mhz b/plugins/433mhz new file mode 100755 index 0000000..be2f1d8 --- /dev/null +++ b/plugins/433mhz @@ -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" + diff --git a/plugins/ina219 b/plugins/ina219 new file mode 100755 index 0000000..ccb1f9d --- /dev/null +++ b/plugins/ina219 @@ -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"